2014-02-17 125 views
0

我是一個在Android的初學者,我面臨着插入數據到表中的問題。問題已被問了很多次,但我無法理解問題的根源及其解決方案。無法插入數據到SQlite表

public long insertRegisterData(RegisterData data) throws SQLException { 
    ContentValues cv = new ContentValues(); 

    cv.put("u_name", data.getU_name()); 
    cv.put("u_address", data.getU_address()); 
    cv.put("tel_office", data.getTel_office()); 
    cv.put("tel_resi", data.getTel_resi()); 
    cv.put("tel_req", data.getTel_req()); 
    cv.put("tel_fax", data.getTel_fax()); 
    cv.put("dateSanad", data.getDateSanad()); 
    cv.put("memBarCounWelfare", data.getMemBarCounWelfare()); 
    cv.put("prof_tax", data.getProf_tax()); 
    cv.put("pan", data.getPan()); 
    cv.put("drivingPolicyNo", data.getDrivingPolicyNo()); 
    cv.put("drivingPolicyDue", data.getDrivingPolicyDue()); 
    cv.put("bankAcc", data.getBankAcc()); 
    cv.put("passport", data.getPassport()); 
    cv.put("blood", data.getBlood()); 
    cv.put("docName", data.getDocName()); 
    cv.put("docPhone", data.getDocPhone()); 
    cv.put("docAddress", data.getDocAddress()); 

    System.out.println("Comntent vlaues  " + cv.get("u_name")); 
    return sqLiteDatabase.insert("Registration1", null, cv); 

} 



public void onCreate(SQLiteDatabase db) { 
    db.execSQL("Create table newRecord(prev_date text,CaseName text,caseNo         Text,forParty text,againstParty text,stages text)"); 
    db.execSQL("Create table Registration1(u_name text,u_address text,tel_office text,tel_resi text,tel_req text,tel_fax text,dateSanad text,memBarCounWelfare text,prof_tax text,pan text,drivingPolicyNo text,drivingPolicyDue text,bankAcc text,passport text,blood text,docName text,docPhone text,docAddress text)"); 
} 

在的printStackTrace

02-18 02:08:35.362: E/Database(3622): Error inserting docName=H memBarCounWelfare=Download prof_tax=D drivingPolicyNo=X docAddress=sachin tel_req=Dd blood=G tel_resi=D dateSanad=D tel_office= pan=null drivingPolicyDue=Dddsdfdssd dfg d tel_fax=D u_address=s bankAcc=D docPhone=99 passport=D u_name=S 
02-18 02:08:35.362: E/Database(3622): android.database.sqlite.SQLiteException: no such table: Registration1: , while compiling: INSERT INTO Registration1(docName, memBarCounWelfare, prof_tax, drivingPolicyNo, docAddress, tel_req, blood, tel_resi, dateSanad, tel_office, pan, drivingPolicyDue, tel_fax, u_address, bankAcc, docPhone, passport, u_name) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?); 
02-18 02:08:35.362: E/Database(3622): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 
02-18 02:08:35.362: E/Database(3622): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92) 
02-18 02:08:35.362: E/Database(3622): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65) 
02-18 02:08:35.362: E/Database(3622): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83) 
02-18 02:08:35.362: E/Database(3622): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41) 
02-18 02:08:35.362: E/Database(3622): at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1149) 
02-18 02:08:35.362: E/Database(3622): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1569) 
02-18 02:08:35.362: E/Database(3622): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426) 
02-18 02:08:35.362: E/Database(3622): at com.database.SQLiteAdapter.insertRegisterData(SQLiteAdapter.java:116) 
02-18 02:08:35.362: E/Database(3622): at com.diary.OneTimePassword$1.onClick(OneTimePassword.java:107) 
02-18 02:08:35.362: E/Database(3622): at android.view.View.performClick(View.java:2485) 
02-18 02:08:35.362: E/Database(3622): at android.view.View$PerformClick.run(View.java:9080) 
02-18 02:08:35.362: E/Database(3622): at android.os.Handler.handleCallback(Handler.java:587) 
02-18 02:08:35.362: E/Database(3622): at android.os.Handler.dispatchMessage(Handler.java:92) 
02-18 02:08:35.362: E/Database(3622): at android.os.Looper.loop(Looper.java:123) 
02-18 02:08:35.362: E/Database(3622): at android.app.ActivityThread.main(ActivityThread.java:3683) 
02-18 02:08:35.362: E/Database(3622): at java.lang.reflect.Method.invokeNative(Native Method) 
02-18 02:08:35.362: E/Database(3622): at java.lang.reflect.Method.invoke(Method.java:507) 
02-18 02:08:35.362: E/Database(3622): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
02-18 02:08:35.362: E/Database(3622): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
02-18 02:08:35.362: E/Database(3622): at dalvik.system.NativeStart.main(Native Method) 
+3

「沒有這樣的表:Registration1」,創建該表第一 –

回答

0

問題是您的表註冊1不存在。如果數據庫不存在,則調用方法onCreate,這意味着您的數據庫是在您第一次運行程序時創建的,但如果稍後添加了第二個表Registration1,則不會創建該表。

你需要在你的數據庫的Helper類重寫onUpgrade(你可以簡單地刪除該表並調用的onCreate()),並在下一次運行您的時間是你需要增加在SQLiteOpenHelper的構造函數的版本號方案。 運行程序時,運行時將您指定的版本與已存儲的版本進行比較,如果它們不同,則運行時會調用onUpgrade

編輯:
這裏有兩個例子,第一個例子改變現有的表。第二個示例重新創建表(刪除所有以前的數據)。

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{ 
    if (oldVersion<2) 
    { 
     // Example of altering the table 
     db.execSQL("ALTER TABLE " + myTable + " ADD COLUMN " + newColumn + " int;"); 
    } 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{ 
    // Delete and create table 
    db.execSQL("DROP TABLE " + myTable + " ;"); 
    onCreate(db); 
} 
+0

ü可以建議如何在onupgrade創建表()? –

+0

@SupriyoBhattacherjee我加了兩個例子 – Merlevede

+0

你不是指'drop table'嗎? – njzk2

0

錯誤的根本原因可以在這裏找到:

android.database.sqlite.SQLiteException: **no such table: Registration1**: , while compiling: INSERT INTO Registration1(docName, memBarCounWelfare, prof_tax, drivingPolicyNo, docAddress, tel_req, blood, tel_resi, dateSanad, tel_office, pan, drivingPolicyDue, tel_fax, u_address, bankAcc, docPhone, passport, u_name) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?); 

CREATE TABLE語句Registration1要麼失敗或不會被調用。您可以嘗試在onCreate()中設置斷點或插入日誌語句,並確保您到達那裏。您也可以使用try/catch (SQLException e)圍繞execSQL()來電,並查看是否有SQLException被引發。