2013-05-05 35 views
0

我試圖做一個查詢到android 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

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 2013-05-05 05:37:47

+0

在哪裏位在其中設置KEY_ID_USER的價值?在那裏尋找你的問題。 – MarsAtomic 2013-05-05 05:38:08

+0

是key_id_user和id_user是一樣的嗎? – Akhil 2013-05-05 05:40:15

回答

1

如果從時間編輯這部分代碼時間

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); 

不使用正確的onUpgrade功能發生此問題。一個簡單清晰的數據或重新安裝可以解決這個問題,但對於一個更清潔,妥善的解決辦法,請參考: SQLite onUpgrade()

請明白,在世界上沒有獨角獸您的用戶將不太可能做了重新安裝像你這樣。重新安裝應該停止建議作爲解決方案。

0

錯誤消息table login has no column named id_user已經說明原因。

首先要確認這個問題,你應該/可以使用sqlite3檢查數據庫架構:

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

如果沒有所謂的id_user這樣的列,只需刪除該數據庫並重新安裝應用程序應修復問題。