2017-09-21 14 views
0

有錯誤,同時將數據插入到源碼這裏是堆棧跟蹤列sqlite的錯誤SQLiteException:表用戶沒有命名

E/SQLiteDatabase: Error inserting addhar_number=test profile_pic=null token=null name=Nikhil Patil [email protected] phone= profile_pic_bg=null gender=test birthday=test 
                        android.database.sqlite.SQLiteException: table user has no column named addhar_number (code 1): , while compiling: INSERT INTO user(addhar_number,profile_pic,token,name,email,phone,profile_pic_bg,gender,birthday) VALUES (?,?,?,?,?,?,?,?,?) 
                         at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
                         at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) 
                         at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) 
                         at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
                         at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
                         at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 
                         at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1472) 
                         at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1343) 
                         at com.wowoni.bikesharing.bicyclesharing.Helper.SQliteHandler.addUser(SQliteHandler.java:88) 
                         at com.wowoni.bikesharing.bicyclesharing.activity.HomeActivity.loadNavHeader(HomeActivity.java:227) 
                         at com.wowoni.bikesharing.bicyclesharing.activity.HomeActivity.onCreate(HomeActivity.java:129) 
                         at android.app.Activity.performCreate(Activity.java:6684) 
                         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2652) 
                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2766) 
                         at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1507) 
                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                         at android.os.Looper.loop(Looper.java:154) 
                         at android.app.ActivityThread.main(ActivityThread.java:6229) 
                         at java.lang.reflect.Method.invoke(Native Method) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781) 

,這裏是我的SQLite處理類

public class SQliteHandler extends SQLiteOpenHelper { 
private static final String TAG = SQliteHandler.class.getSimpleName(); 

// All Static variables 
// Database Version 
private static final int DATABASE_VERSION = 4; 
// Database Name 
private static final String DATABASE_NAME="bicycle_user"; 
// Contacts table name 
private static final String TABLE_USER="user"; 

// user Table Columns names 
private static final String KEY_ID = "id"; 
private static final String KEY_NAME = "name"; 
private static final String KEY_EMAIL = "email"; 
private static final String KEY_PHONE="phone"; 
private static final String KEY_ADDHAR_NUMBER="addhar_number"; 
private static final String KEY_GENDER="gender"; 
private static final String KEY_PROFILE_PIC="profile_pic"; 
private static final String KEY_PROFILE_PIC_BG="profile_pic_bg"; 
private static final String KEY_BIRTHDAY="birthday"; 
private static final String KEY_Token="token"; 
private static final String KEY_CREATED_AT = "created_at"; 

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

@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_User_TABLE = "CREATE TABLE " + TABLE_USER + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," 
      + KEY_EMAIL + " TEXT UNIQUE,"+ KEY_PHONE + "TEXT UNIQUE," 
      + KEY_ADDHAR_NUMBER + "TEXT UNIQUE,"+ KEY_GENDER + "TEXT," 
      + KEY_PROFILE_PIC + "BLOB,"+ KEY_PROFILE_PIC_BG + "BLOB," 
      + KEY_BIRTHDAY + "TEXT," + KEY_Token + "TEXT UNIQUE," + KEY_CREATED_AT + "TIMESTAMP" + ")"; 
    db.execSQL(CREATE_User_TABLE); 

    Log.d(TAG, "Database tables created"); 
} 

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

    // Create tables again 
    onCreate(db); 
} 

/** 
* Storing user details in database 
* */ 
public void addUser(String name, String email, String phone, String addhar_number, String gender, byte[] profile_pic, byte[] profile_pic_bg, String birthday, String token) 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values= new ContentValues(); 
    values.put(KEY_NAME,name); 
    values.put(KEY_EMAIL,email); 
    values.put(KEY_PHONE,phone); 
    values.put(KEY_ADDHAR_NUMBER,addhar_number); 
    values.put(KEY_GENDER,gender); 
    values.put(KEY_PROFILE_PIC,profile_pic); 
    values.put(KEY_PROFILE_PIC_BG,profile_pic_bg); 
    values.put(KEY_BIRTHDAY,birthday); 
    values.put(KEY_Token,token); 

    // Inserting Row 
    long id = db.insert(TABLE_USER, null, values); 
    db.close(); // Closing database connection 

    Log.d(TAG, "New user inserted into sqlite: " + id); 
} 

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

    SQLiteDatabase db= this.getReadableDatabase(); 
    Cursor cursor= db.rawQuery(selectQuery,null); 

    cursor.moveToFirst(); 
    if(cursor.getCount() > 0) { 
     user.put("name", cursor.getString(1)); 
     user.put("email", cursor.getString(2)); 
     user.put("phone", cursor.getString(3)); 
     user.put("addhar_number", cursor.getString(4)); 
     user.put("gender", cursor.getString(5)); 
     user.put("profile_pic", String.valueOf(cursor.getBlob(6))); 
     user.put("profile_pic_bg", String.valueOf(cursor.getBlob(7))); 
     user.put("birthday", cursor.getString(8)); 
     user.put("token", cursor.getString(9)); 
     user.put("created_at", cursor.getString(10)); 
    } 

    cursor.close(); 
    db.close(); 
    // return user 
    Log.d(TAG, "Fetching user from Sqlite: " + user.toString()); 

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

    Log.d(TAG, "Deleted all user info from sqlite"); 
} 

public void updateUser(String name, String email, String phone, String addhar_number, String gender, 
         byte[] profile_pic, byte[] profile_pic_bg, String birthday, String token){ 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME,name); 
    values.put(KEY_EMAIL,email); 
    values.put(KEY_PHONE,phone); 
    values.put(KEY_ADDHAR_NUMBER,addhar_number); 
    values.put(KEY_GENDER,gender); 
    values.put(KEY_PROFILE_PIC,profile_pic); 
    values.put(KEY_PROFILE_PIC_BG,profile_pic_bg); 
    values.put(KEY_BIRTHDAY,birthday); 
    values.put(KEY_Token,token); 

    int id = db.update(TABLE_USER,values,KEY_EMAIL + " = ?",new String[]{email}); 
    db.close(); 
    Log.d(TAG, "Table is updated : " + id); 
} 

}

和在我的活動中,我稱它爲

db.addUser(name, user_email, phone, addhar_number, gender, profile_pic_array, profile_pic_bg_array, birthday, token); 

我確實改變了版本號,數據庫的名稱但沒有幫助,因爲我想把用戶的詳細信息作進一步的使用bt不能將數據插入到數據庫中。請幫助我作爲重要的事情來完成。

+1

您是否刪除了設備上的應用程序?數據庫更改將僅在需要創建數據庫時進行部署(即安裝應用程序時) –

+0

將您的表創建查詢更新爲(爲主鍵添加AUTOINCREMENT), 字符串CREATE_User_TABLE =「CREATE TABLE」+ TABLE_USER +「(」 + KEY_ID +「INTEGER PRIMARY KEY AUTOINCREMENT」+ KEY_NAME +「TEXT」+ KEY_EMAIL +「TEXT UNIQUE」+ KEY_PHONE +「TEXT UNIQUE」 + KEY_ADDHAR_NUMBER +「TEXT UNIQUE」+ KEY_GENDER +「TEXT」 + KEY_PROFILE_PIC +「BLOB」+ KEY_PROFILE_PIC_BG +「BLOB」 + KEY_BIRTHDAY +「TEXT」+ KEY_Token +「TEXT UNIQUE」+ KEY_CREATED_AT +「TIMESTAMP」+「)」; 或插入時傳遞KEY_ID(id)的值。 –

+0

@ SHIDHIN.TS更新我的表的創建語句按照你的建議的感謝,並請看看我的UpdateUser兩個()在sqlitehandler類方法是正確,或有任何錯誤也請 –

回答

2

在您的CREATE TABLE SQL中,在列名稱(如addhar_number)和類型(如TEXT)之間添加空格。

卸載您的應用程序,以便再次調用onCreate()

相關問題