Android 无法将数据插入SQlite表

Android 无法将数据插入SQlite表,android,sqlite,Android,Sqlite,我是android的初学者,在将数据插入表中时遇到了问题。这个问题已经被问了很多次,但我无法理解问题的根源及其解决方案 public long insertRegisterData(RegisterData data) throws SQLException { ContentValues cv = new ContentValues(); cv.put("u_name", data.getU_name()); cv.put("u_address", data.getU

我是android的初学者,在将数据插入表中时遇到了问题。这个问题已经被问了很多次,但我无法理解问题的根源及其解决方案

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)
02-18 02:08:35.362:E/数据库(3622):插入docName=H membarcounfelfare=Download prof_tax=D drivingpolicy no=X docAddress=sachin tel_req=Dd blood=G tel_resi=D dateSanad=D tel_office=pan=null drivingpolicy due=dddsdfdsd 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:无此类表格:注册1:,编译时:插入注册1(docName、membarcounfelfare、prof_tax、drivingPolicyNo、docAddress、tel_req、blood、tel_resi、dateSanad、tel office、pan、drivingPolicyDue、tel_传真、u address、bankAcc、docPhone、passport、u name)数值(?、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、);
02-18 02:08:35.362:E/Database(3622):在android.Database.sqlite.SQLiteCompiledSql.native_compiled(native方法)
02-18 02:08:35.362:E/Database(3622):在android.Database.sqlite.SQLiteCompiledSql.compiled(SQLiteCompiledSql.java:92)
02-18 02:08:35.362:E/Database(3622):在android.Database.sqlite.SQLiteCompiledSql.(SQLiteCompiledSql.java:65)
02-18 02:08:35.362:E/Database(3622):位于android.Database.sqlite.SQLiteProgram.(SQLiteProgram.java:83)
02-18 02:08:35.362:E/Database(3622):位于android.Database.sqlite.SQLiteStatement.(SQLiteStatement.java:41)
02-18 02:08:35.362:E/Database(3622):位于android.Database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1149)
02-18 02:08:35.362:E/Database(3622):在android.Database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1569)
02-18 02:08:35.362:E/Database(3622):位于android.Database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)
02-18 02:08:35.362:E/Database(3622):位于com.Database.SQLiteAdapter.insertRegisterData(SQLiteAdapter.java:116)
02-18 02:08:35.362:E/Database(3622):在com.diary.OneTimePassword$1.onClick(OneTimePassword.java:107)
02-18 02:08:35.362:E/数据库(3622):在android.view.view.performClick(view.java:2485)
02-18 02:08:35.362:E/数据库(3622):在android.view.view$PerformClick.run(view.java:9080)
02-18 02:08:35.362:E/数据库(3622):位于android.os.Handler.handleCallback(Handler.java:587)
02-18 02:08:35.362:E/数据库(3622):位于android.os.Handler.dispatchMessage(Handler.java:92)
02-18 02:08:35.362:E/数据库(3622):在android.os.Looper.loop(Looper.java:123)
02-18 02:08:35.362:E/数据库(3622):位于android.app.ActivityThread.main(ActivityThread.java:3683)
02-18 02:08:35.362:E/数据库(3622):位于java.lang.reflect.Method.invokenactive(本机方法)
02-18 02:08:35.362:E/Database(3622):位于java.lang.reflect.Method.invoke(Method.java:507)
02-18 02:08:35.362:E/Database(3622):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-18 02:08:35.362:E/Database(3622):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-18 02:08:35.362:E/数据库(3622):在dalvik.system.NativeStart.main(本机方法)

可在此处找到错误的根本原因:

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(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);

您的
注册1
创建表
语句失败或未被调用。您可以尝试在
onCreate()
中设置断点或插入日志语句,并确保达到目的。您还可以使用
try/catch(SQLException e)
包围
execSQL()
调用,查看是否抛出了
SQLException

问题在于表注册1不存在。如果数据库不存在,则调用方法
onCreate
,这意味着您的数据库是在第一次运行程序时创建的,但如果以后添加了第二个表注册1,则不会创建该表

您需要重写数据库帮助器类中的
onUpgrade
(您可以简单地删除表并调用onCreate()),并且下次运行您的程序时,您还需要增加SQLiteOpenHelper构造函数中的版本号。 运行程序时,运行时会将指定的版本与存储中已存在的版本进行比较,如果两者不同,则运行时会调用
onUpgrade

编辑:
这里有两个例子,第一个改变了现有的表。第二个示例重新创建表(删除所有以前的数据)

@覆盖
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion)
{

如果(旧版本“无此类表格:注册1”,请先创建表格您能建议如何在onupgrade()中创建表格吗?@SupriyoBhattacherjee我添加了两个示例。您的意思不是说
删除表格
?@Merlevede我想创建另一个表格…您在这个问题上是对的。我需要在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);
}