从the documentation和this post我知道execSQL()
执行一个不是SELECT
的SQL语句或任何其他返回数据的SQL语句。还提到execSQL()
不应该用于插入。
但我正在使用execSQL()
进行插入,如:
db.execSQL("INSERT INTO LIST VALUES('খবর');"); //where LIST is a table
这对我来说非常合适(此SELECT
没有INSERT
声明),但我被告知不要使用此here。
所以,我的问题是: INSERT
语句是否会返回一个值,即使没有附加SELECT
语句?
答案 0 :(得分:4)
您可以使用它,因为您不会收到任何可能由DB生成的信息,所以不推荐使用它。您应该使用返回代码/光标/其他信息的方法让您知道发生了什么,以便在出现问题时可以处理它们。
关键是execSQL
文档中的这一行:
It has no means to return any data (such as the number of affected rows). Instead, you're encouraged to use insert...
重要的一句是鼓励"。你可以使用execSQL
来获取任何SQL命令,但是你没有得到关于这个过程的反馈,这使得你应该获得反馈的东西相当危险(除非你不要这样做)。 t care比插入失败,或者5个记录中只有2个得到更新)。
答案 1 :(得分:0)
INSERT
语句不返回结果集,至少不在Sqlite中。
Android文档说明execSQL
:
执行一个非SELECT或任何其他SQL的SQL语句 返回数据的语句。它无法返回任何数据(例如 作为受影响的行数)。相反,您鼓励使用 insert(String,String,ContentValues),update(String,ContentValues, String,String [])等,如果可能的话。
我不是Android程序员,但我肯定不会鼓励使用insert
函数而不是execSQL
,除了,如果我想要检索{{ 3}}插入的记录。此外,引用的解释充其量是混乱的,因为它意味着插入可以返回一些数据。
请注意,有些副作用可能会使insert
成为比execSQL
更好的选择,或者“最佳做法”要求您使用insert
。
答案 2 :(得分:0)
插入操作可以按照以下方式完成
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, contact.getName()); // Contact Name
values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone
// Inserting Row
db.insert(TABLE_CONTACTS, null, values);
//2nd argument is String containing nullColumnHack
db.close(); // Closing database connection
有关更多信息,请参阅链接和代码 http://www.blazin.in/2016/02/understanding-sqlite-database-in-android.html