2013-05-05 3 views
0

나는 테이블을 만들고 데이터를 데이터베이스에 삽입하기 위해 안드로이드 sqlite 데이터베이스에 쿼리를 시도했습니다.오류 삽입 및 테이블을 찾을 수 없습니다.

테이블 함수를 작성 데이터 기능을 삽입

public void onCreate(SQLiteDatabase db) { 
     String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "(" 
       + KEY_ID + " INTEGER PRIMARY KEY," 
       + KEY_ID_USER + " TEXT," 
       + KEY_NAMA + " TEXT," 
       + KEY_EMAIL + " TEXT UNIQUE," 
       + KEY_REGID + " TEXT," 
       + KEY_DIBUAT_AT + " TEXT" + ")"; 
     db.execSQL(CREATE_LOGIN_TABLE); 
    } 

public void addUser(String id_user, String name, String email, String regid, String created_at) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_NAMA, name); // Name 
     values.put(KEY_ID_USER, id_user); 
     values.put(KEY_EMAIL, email); // Email 
     values.put(KEY_REGID, regid); // Email 
     values.put(KEY_DIBUAT_AT, created_at); // Created At 

     // Inserting Row 
     db.insert(TABLE_LOGIN, null, values); 
     db.close(); // Closing database connection 
    } 

이 코드를 잘하지만 자신이 포함되어 오류가 난

05-05 11:19:15.549: E/SQLiteDatabase(29294): Error inserting regid=XX1 id_user=12 nama=Edwin Andrianto dibuat_at=2013-05-01 15:11:41 [email protected] 

05-05 11:19:15.549: E/SQLiteDatabase(29294): android.database.sqlite.SQLiteException: table login has no column named id_user: , while compiling: INSERT INTO login(regid,id_user,nama,dibuat_at,email) VALUES (?,?,?,?,?) 

를 실행합니다 사람에 대한 어떤 생각을 가지고 생각 위의 구문에서 잘못 되었습니까? 당신이

전체 코드 DatabaseHandler.java 당신이 적절한 onUpgrade 기능을 사용하지 않고 시간

String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "(" 
    + KEY_ID + " INTEGER PRIMARY KEY," 
    + KEY_ID_USER + " TEXT," 
    + KEY_NAMA + " TEXT," 
    + KEY_EMAIL + " TEXT UNIQUE," 
    + KEY_REGID + " TEXT," 
    + KEY_DIBUAT_AT + " TEXT" + ")"; 
db.execSQL(CREATE_LOGIN_TABLE); 

때때로 코드의이 부분을 편집하는 경우이 문제가 발생

package net.drieanto.lagidimana.library; 

import java.util.HashMap; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

public class DatabaseHandler extends SQLiteOpenHelper { 

    // All Static variables 
    // Database Version 
    private static final int DATABASE_VERSION = 1; 

    // Database Name 
    private static final String DATABASE_NAME = "android_api"; 

    // Login table name 
    private static final String TABLE_LOGIN = "login"; 

    // Login Table Columns names 
    private static final String KEY_ID = "id"; 
    private static final String KEY_ID_USER = "id_user"; 
    private static final String KEY_NAMA = "nama"; 
    private static final String KEY_EMAIL = "email"; 
    private static final String KEY_REGID = "regid"; 
    private static final String KEY_DIBUAT_AT = "dibuat_at"; 

    public DatabaseHandler(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    // Creating Tables 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "(" 
       + KEY_ID + " INTEGER PRIMARY KEY," 
       + KEY_ID_USER + " TEXT," 
       + KEY_NAMA + " TEXT," 
       + KEY_EMAIL + " TEXT UNIQUE," 
       + KEY_REGID + " TEXT," 
       + KEY_DIBUAT_AT + " TEXT" + ")"; 
     db.execSQL(CREATE_LOGIN_TABLE); 
    } 

    // Upgrading database 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // Drop older table if existed 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_LOGIN); 

     // Create tables again 
     onCreate(db); 
    } 

    /** 
    * Storing user details in database 
    * */ 
    public void addUser(String id_user, String name, String email, String regid, String created_at) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_NAMA, name); // Name 
     values.put(KEY_ID_USER, id_user); 
     values.put(KEY_EMAIL, email); // Email 
     values.put(KEY_REGID, regid); // Email 
     values.put(KEY_DIBUAT_AT, created_at); // Created At 

     // Inserting Row 
     db.insert(TABLE_LOGIN, null, values); 
     db.close(); // Closing database connection 
    } 

    /** 
    * Getting user data from database 
    * */ 
    public HashMap<String, String> getUserDetails(){ 
     HashMap<String,String> user = new HashMap<String,String>(); 
     String selectQuery = "SELECT * FROM " + TABLE_LOGIN; 

     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 
     // Move to first row 
     cursor.moveToFirst(); 
     if(cursor.getCount() > 0){ 
      user.put("id_user", cursor.getString(1)); 
      user.put("name", cursor.getString(2)); 
      user.put("email", cursor.getString(3)); 
      user.put("regid", cursor.getString(4)); 
      user.put("dibuat_at", cursor.getString(5)); 
     } 
     cursor.close(); 
     db.close(); 
     // return user 
     return user; 
    } 

    /** 
    * Getting user login status 
    * return true if rows are there in table 
    * */ 
    public int getRowCount() { 
     String countQuery = "SELECT * FROM " + TABLE_LOGIN; 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cursor = db.rawQuery(countQuery, null); 
     int rowCount = cursor.getCount(); 
     db.close(); 
     cursor.close(); 

     // return row count 
     return rowCount; 
    } 

    /** 
    * Re crate database 
    * Delete all tables and create them again 
    * */ 
    public void resetTables(){ 
     SQLiteDatabase db = this.getWritableDatabase(); 
     // Delete All Rows 
     db.delete(TABLE_LOGIN, null, null); 
     db.close(); 
    } 

} 
+1

** 테이블 로그인에는 id_user **라는 열이 없습니다 ** 모든 것을 말합니다 – Pragnani

+0

KEY_ID_USER의 값을 설정하는 위치는 어디입니까? 거기에 당신의 문제가 있는지보십시오. – MarsAtomic

+0

은 key_id_user이고 id_user는 같은가요? – Akhil

답변

1

감사드립니다. 간단한 데이터를 삭제하거나 다시 설치하면 문제가 해결 될 수 있지만 더 깨끗하고 적절한 해결 방법은 다음을 참조하십시오. SQLite onUpgrade()

유니콘이없는 세계에서는 사용자가 이전처럼 사용자가 다시 설치하지 않을 것임을 이해하십시오. 재설치는 실제로 해결책으로 제안하지 말아야합니다.

0

오류 메시지 table login has no column named id_user에 이미 이유가 설명되어 있습니다.

첫째, 문제를 확인하기 위해, 당신이해야/데이터베이스 스키마 확인 sqlite3을 사용할 수 id_user라는 그런 열의가 없었다 경우,

sqlite3 /data/data/your.package/databases/xxx.db 
>.schema YOUR_TABLE_NAME 

를 단순히 데이터베이스를 삭제하고 응용 프로그램이 문제를 해결해야 다시 설치 발행물.

관련 문제