【发布时间】:2010-06-24 04:56:46
【问题描述】:
好吧,也许我在这里完全遗漏了一些东西,但我刚刚开始使用 SQL 和 Android,据我所见,更新和插入回数据库需要单独处理?
我可以检索包含多条记录的游标,但如果我想对游标中的每条记录应用更新,我只能看到如何单独执行此操作,使用 ContentValues 和 Update(),然后游标需要重新加载??
如果我想创建多个新记录,这些似乎需要单独插入?我不能创建列表和批量插入吗?
对我来说,这似乎很慢而且很麻烦,而且肯定有一些我还不知道的事情(搜索答案让我失败了......可能是因为使用了不正确的术语,这对于 android/java 来说是新的)
这是一个非常简单的示例,说明了我基本上想要实现的目标,但是必须有更好的方法来实现此功能。 (我知道这里还有其他一些不好的做法,只是创建一个快速示例)
public class HelloSQL extends Activity {
SQLiteDatabase myDB = null;
String TableName = "myTable";
ContentValues myVals = new ContentValues();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String Data = "";
// Create a Database.
try {
myDB = this.openOrCreateDatabase("myTestDB", MODE_PRIVATE, null);
// Create a Table in the Database.
myDB.execSQL("CREATE TABLE IF NOT EXISTS " + TableName
+ " ( id INTEGER PRIMARY KEY AUTOINCREMENT,"
+ " Value1 INTEGER, Value2 INTEGER);");
myDB.execSQL("DELETE FROM " + TableName);
// insert value1
for (int i = 0; i < 100; i++) {
myVals.put("Value1", i);
myDB.insert(TableName, null, myVals);
}
// retrieve data from database
Cursor c = myDB.rawQuery("SELECT * FROM " + TableName, null);
int colId = c.getColumnIndex("id");
int col1 = c.getColumnIndex("Value1");
int col2 = c.getColumnIndex("Value2");
Random generator = new Random();
// Loop through all values and update value2
c.moveToFirst();
if (c != null) {
do {
long id = c.getLong(colId);
int val1 = c.getInt(col1);
int randomVal = generator.nextInt(99);
myVals.put("Value1", val1);
myVals.put("Value2", randomVal);
myDB.insert(TableName, null, myVals);
myDB.update(TableName, myVals, "id=?",new String[] {Long.toString(id)});
} while (c.moveToNext());
}
// requery data
c = myDB.rawQuery("SELECT * FROM " + TableName, null);
// display all values
c.moveToFirst();
if (c != null) {
do {
int val1 = c.getInt(col1);
int val2 = c.getInt(col2);
Data = Data + Integer.toString(val1) + " " + Integer.toString(val2) + "\n";
} while (c.moveToNext());
}
TextView tv = new TextView(this);
tv.setText(Data);
setContentView(tv);
} catch (Exception e) {
Log.e("Error", "Error", e);
} finally {
if (myDB != null)
myDB.close();
}
}
在此先感谢,不要指望任何人重写我在这里所做的一切,但如果指出正确的方向和指向示例的链接,将不胜感激。
【问题讨论】:
-
CommonsWare 是 100% 正确的...您可以编写任何会吐出 SQL 语句的代码,然后使用返回 SQLiteStatement 的 SQLiteDatabase.compileStatement('your statment'),然后运行 execute()它。
标签: android sql sql-update sql-insert