Java Can';t使用(Begin Transaction)方法删除SQLite列

Java Can';t使用(Begin Transaction)方法删除SQLite列,java,android,sqlite,Java,Android,Sqlite,在androidstudiosqlite数据库中,我有一个带有两列(name,id)的表“title”。我想删除id列,我使用了事务处理方法,但它不起作用。 将name列复制到新表后,我希望新表本身应该有id列 try { SQLiteDatabase sqLiteDatabase = this.openOrCreateDatabase("db", MODE_PRIVATE, null); sqLiteDatabase.execSQ

在androidstudiosqlite数据库中,我有一个带有两列(name,id)的表“title”。我想删除id列,我使用了事务处理方法,但它不起作用。 将name列复制到新表后,我希望新表本身应该有id列

     try {
            SQLiteDatabase sqLiteDatabase = this.openOrCreateDatabase("db", MODE_PRIVATE, null);

    sqLiteDatabase.execSQL("BEGIN TRANSACTION");
            sqLiteDatabase.execSQL("CREATE TEMPORARY TABLE t1(name VARCHAR)");
            sqLiteDatabase.execSQL("INSERT INTO t1 SELECT name FROM title");
            sqLiteDatabase.execSQL("DROP TABLE title");
            sqLiteDatabase.execSQL("CREATE TABLE title (name VARCHAR, id INTEGER PRIMARY KEY)");
            sqLiteDatabase.execSQL("INSERT INTO title SELECT name FROM t1");
            sqLiteDatabase.execSQL("DROP TABLE t1");
    sqLiteDatabase.execSQL("COMMIT");

           } catch (Exception e) {

        }
我也试过这个

 try {
            SQLiteDatabase sqLiteDatabase = this.openOrCreateDatabase("db", MODE_PRIVATE, null);

    sqLiteDatabase.execSQL("BEGIN TRANSACTION");
            sqLiteDatabase.execSQL("CREATE TEMPORARY TABLE t1(name VARCHAR,id INTEGER PRIMARY KEY)");
            sqLiteDatabase.execSQL("INSERT INTO t1 SELECT name FROM title");
            sqLiteDatabase.execSQL("DROP TABLE title");
            sqLiteDatabase.execSQL("CREATE TABLE title (name VARCHAR, id INTEGER PRIMARY KEY)");
            sqLiteDatabase.execSQL("INSERT INTO title SELECT name,id FROM t1");
            sqLiteDatabase.execSQL("DROP TABLE t1");
    sqLiteDatabase.execSQL("COMMIT");

           } catch (Exception e) {

        }

您的问题是由于捕获的异常:-

SQLiteException: table title has 2 columns but 1 values were supplied (code 1 SQLITE_ERROR): , while compiling: INSERT INTO title SELECT name FROM t1
i、 e您没有为id列提供值

改用

sqLiteDatabase.execSQL("INSERT INTO title SELECT name, null FROM t1");


有一些错误消息?没有任何事情发生,只是当我关闭应用程序并再次打开它时,它不会显示数据库记录,因为它会锁定数据库,这是您得到的
异常e
printStackTrace()
在logcat上显示了什么?您知道为什么要使用
try{}catch{}
表单吗?你知道
catch(异常e)
用于什么吗?是的,我知道,如果你不能回答我的问题,请不要问usless问题。@HabibMhamadi P.S.通常最好不要在try/catch中包装SQLite操作。
sqLiteDatabase.execSQL("INSERT INTO title (name) SELECT name FROM t1");