好吧,也許我完全錯過了一些東西,但我剛剛開始使用SQL和Android,並且從我所看到的更新和插入到數據庫需要單獨處理?我可以檢索包含多個記錄的遊標,但是如果我想將更新應用於遊標中的每個記錄,我只能看到如何單獨使用ContentValues和Update(),然後光標需要重裝?Android:插入/更新多個記錄到SQL數據庫
同樣如果我想創建多個新記錄,這些似乎需要單獨插入?我可以不創建列表和批量插入嗎?
對我來說,這似乎是緩慢和繁瑣,而且必須有,我還沒有意識到的東西(尋找答案失敗我......可能是由於使用了不正確的術語是新到Android/JAVA)
下面是我基本上想實現的一個非常簡單的例子,但是必須有更好的方法來實現這個功能。 (我知道在這裏其他一些不好的做法,只是創造一個快速eample)提前
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();
}
}
謝謝,不希望任何人重新寫在右邊的一切,我已經在這裏做了,但是的aPoint方向和鏈接到樣本將不勝感激。
CommonsWare是100%正確的...你可以編寫任何吐出SQL語句的代碼,然後使用SQLiteDatabase.compileStatement('你的語句'),它返回一個SQLiteStatement,然後在其上運行execute()。 – 2010-06-24 17:59:15