2013-05-05 31 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这样的列,只需删除该数据库并重新安装应用程序应修复问题。