class SQLiteDataBase的insertOrThrow()是否自动提交数据?

时间:2017-08-04 14:09:40

标签: java android sqlite android-sqlite commit

我的插入代码如下所示

public void insertInTable(float x, float y, float z, int timestamp){

    try {
        ContentValues values = new ContentValues();
        values.put("x_val", x);
        values.put("y_val", y);
        values.put("z_val", z);
        values.put("timestamp", timestamp);

        db.insertOrThrow(DBHelper.tableName, null, values);
        Log.d(Constants.CUSTOM_LOG_TYPE, "Inserted successfully");

    }
    catch (SQLiteException e) {
        Log.d(Constants.CUSTOM_LOG_TYPE, e.getMessage());
        e.printStackTrace();
    }
}

从以下代码中调用它:

@Override
public void onSensorChanged(SensorEvent event) {

     ...values retrieved from event ....
     ...the inserted into db

    if (conditions met) {
        //****here the data is inserted****
        dbHelper.insertInTable(x, y, z, (int) timeInMillis);
    }
}

此代码在数据库中正确插入数据,并在导出db文件时,插入的数据存在。

我的问题是如果没有提交交易,数据如何导出?

我试着查看[insertOrThrow](https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#insertOrThrow(java.lang.String,java.lang.String,android.content.ContentValues))的文档,但它没有提到任何关于自动提交的内容。

autocommit设置为false,我知道因为当我尝试使用execSQL()插入时,如果没有显式提交事务,则不会导出数据。

没有使用transaction,commit甚至setAutocommit(true)。 代码是如何工作的?我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:0)

SQLite documentation说:

  

除了在事务中,不能对数据库进行任何更改。更改数据库的任何命令(基本上,除SELECT之外的任何SQL命令)将自动启动事务(如果尚未生效)。最后一个查询完成后,将提交自动启动的事务。