さて、おそらく私はここで何かを完全に見逃していますが、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();
}
}
事前のおかげで、私がここで行ったすべてを誰かが書き直すことを期待しないでください。しかし、正しい方向に向けて、サンプルへのリンクをいただければ幸いです。