2014-12-01 36 views
6

我正在使用SQLite作为本地存储的Android应用程序。我需要在SQL查询中使用参数,但我发现所有的例子包含unamed参数,就像这样:Android SQLite - 命名参数

INSERT INTO SomeTable(ColA, ColB, ColC) VALUES (?,?,?); 

我想知道 - 支持Android SQLite支持命名的参数?像这样的事情,而不是问号..

INSERT INTO SomeTable(ColA, ColB, ColC) VALUES (@paramA, @paramB, @paramC); 

的SQLite本身支持这(根据文档https://www.sqlite.org/lang_expr.html)。

在此先感谢

+2

如果您看一下SQL相关类的文档,据我所知,查询绑定方法都是基于索引的。 – njzk2 2014-12-01 17:22:59

回答

5

Android数据库API只允许通过索引进行参数绑定。

这并不妨碍您在SQL中使用命名参数,但仍需使用正确的索引来绑定它们。 这是几乎无用的,除了文档,或重复使用参数:

db.rawQuery("SELECT * FROM Tab WHERE A = @search OR B = @search", 
      new String[]{ search }); 
+2

坦率地说,我有点惊讶,因为即使SQLite文档不鼓励使用索引绑定参数。无论如何,谢谢你的答案。 – 2014-12-01 20:10:33

+2

Android数据库API包含许多奇怪的怪癖。 (最糟糕的是,除* execSQL以外,所有函数都只支持String参数)。 – 2014-12-01 20:36:02

1

一个更多的Android SQLite的具体方法是使用一个ContentValues为SQL INSERT。在下面的例子中。值是一个ContentValues,它包含列名和列的值。不在ContentValues中的列在插入时设置为其默认值。

  id = sqlDB.insertOrThrow(RidesDatabaseHandler.TABLE_RIDES, 
        null, values);