在sqlite中,DROP TABLE命令无法正常工作。

4

我尝试以编程方式删除表格,但日志中没有显示任何错误,但没有任何结果:

这是我的数据库助手类:

public class database1 extends SQLiteOpenHelper
{
    private static final String DB_Name="database";
    private static final int DB_Version=1;
    private static final String tbl_arrival1="arrival1";
    private static final String STRING_CREATE1 = "CREATE TABLE IF NOT EXISTS "+tbl_arrival1
            +" (_f_id INTEGER PRIMARY KEY AUTOINCREMENT, "
            +"f_date TEXT,"
            +"o_rder NUMERIC,"
            +"rem_com TEXT);";
    public database1 (Context ctx)
    {
        super(ctx,DB_Name,null,DB_Version);
    }
    @Override
    public void onCreate(SQLiteDatabase database) {
        databaseQuery.onCreate(database);
      }
    public static class databaseQuery 
    {
        public static void onCreate(SQLiteDatabase database)
        {   
            database.execSQL("DROP TABLE IF EXISTS "+tbl_arrival1);
            database.execSQL(STRING_CREATE1);
        }
    }
}

我在内容提供者中使用这个数据库助手:

database1 DBHelper ;
public Uri insert(Uri uri, ContentValues values) 
    {
        long row_id;
        SQLiteDatabase sqlDB = DBHelper.getWritableDatabase();
        row_id=sqlDB.insert(tbl_arrival1, null, values);
        if(row_id>0)
        {
            Uri _uri = ContentUris.withAppendedId(CONTENT_URI, row_id);
            getContext().getContentResolver().notifyChange(_uri, null);
            return _uri;
        }
        throw new SQLException("Failed to insert into "+uri);
    }

问题在于,删除表的查询语句无法工作!非常感谢您提供的所有建议和答案。谢谢。

你尝试在OnUpdate方法中调用drop table了吗? - Yahor10
3个回答

3

我知道我有点晚了,但这个问题对我来说仍然相关。在我的情况下,我尝试在单个查询中删除多个表,即:

drop table if exists table_name1;
drop table if exists table_name2;
drop table if exists table_name3;

安卓的execSQL()实现只能执行单个SQL语句。


我的英雄!我一直在寻找查询无法执行的原因,终于有人给了答案。你会认为他们会让execSQL抛出异常或其他什么东西来处理多个查询。 - JJ Du Plessis

2

请问您能否给我关于如何使用onUpgrade()的教程链接呢?我从未尝试过。。谢谢。 - Edward Sullen
对我没用,我试图在onUpgrade()中删除表,但没有结果,表保留了旧数据。我通过在sqlExec()方法之后放置断点来检查它,然后将数据库文件复制到我的计算机上并在sqlite viewer程序中打开它。最重要的是,我尝试在同一数据库上执行相同的SQL查询,并且它起作用了! - theroom101

1

你的代码看起来没问题。你调用了DROP TABLE,然后随后又创建了一个新表。你怎么检查DROP TABLE是否有效?


3
表格仍然存在旧数据。 - Edward Sullen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接