create table如何在事务中表现?

时间:2013-03-28 20:32:12

标签: android sqlite

我开了两笔交易。

在第一个事务中创建表测试, 但后来我说这次交易会回滚。

我认为应该创建或不创建表测试, 但不是介于两者之间的东西。

然后我运行另一个事务来测试发生了什么:

我在表测试中插入一行。 这似乎在程序中工作,但当我去sqlite提示, 当我说命令“.schema”时,我没有看到那里的表测试。

有人能说出发生了什么吗?

我的代码输出是: “插入确定。”

    try
    {
      db.beginTransaction();

      String s =
      "CREATE TABLE test(id INTEGER PRIMARY KEY AUTOINCREMENT ,age INTEGER)";
      db.execSQL(s);
    }
    catch (Exception e)
    {
      System.out.println("Exception 1:"+e);
    }
    finally
    {
      db.endTransaction();
    }


    try
    {
      db.beginTransaction();
      db.execSQL("INSERT INTO test VALUES(NULL,22)");
      db.setTransactionSuccessful();
      System.out.println("Insert ok.");
    }
    catch (Exception e)
    {
      System.out.println("Exception 2:"+e);
    }
    finally
    {
      db.endTransaction();
    }

1 个答案:

答案 0 :(得分:0)

  

有人能说出发生了什么吗?

这是正常行为。您的表未创建,因为您未提交TRANSACTION以及未执行插入操作。您获得结果的原因

System.out.println("Insert ok.");

只有在查询字符串无效/损坏的情况下,execSQL()方法才会抛出SQLException。而且你也不能使用execSQL()进行插入。您只能将其用于更改表格。

  

执行一个不是的SQL语句   SELECT / INSERT /更新/删除。

解决方案:

由于execSQL()为无效类型,因此您需要使用API方法insert()来测试结果。

long rowId = db.insert("test", <nullColumnHack>, values);
if (rowId < 0) {
    // error
}