所以目前在添加到我的数据库时,我执行这个select语句获取结果并将其添加到我的数据库中的一个单独的列中,它看起来如下:
public void addGasLog(GasLog gasLog){
// Get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
// Create ContentValues to add key "column"/value
ContentValues values = new ContentValues();
//...
Cursor cursor = getWritableDatabase().rawQuery("select (" + gasLog.getOdometer() + " - y.odometer) / " + gasLog.getGallons() + " as mpg from gasLog x, gasLog y where y.odometer = (select max(z.odometer) from gasLog z where z.odometer < " + gasLog.getOdometer() + ")", null);
try {
if (cursor.moveToFirst()) {
mpg = cursor.getString(0);
}
} finally {
cursor.close();
}
values.put(KEY_MPG, mpg);
Log.d("MySQLiteHelper", KEY_MPG);
// Insert
long gasLog_id = db.insert(TABLE_GASLOG, //table
null, //nullColumnHack
values); // key/value -> keys = column names/ values =
db.close();
}
所以这很好,它在select语句中执行我需要的计算,并在该行的mpg列中插入正确的值。
我需要的是能够使用这个类似的功能,并在数据库中的每一行上执行它...所以在每一行上运行该select语句,并将值传递给它命中的每一行的mpg列
我知道有些值会发生变化,例如gasLog.getOdometer()
需要获取该行的“里程表”列的值,gasLog.getGallons()
需要是“加仑”的值该行的列。
任何帮助将不胜感激。
编辑:我希望将这个问题的结果放入一个我可以单独运行的新方法中,该方法将遍历数据库中的每一行并更新它们。
EDIT2:
这是我创建的方法,现在正在创建空白列
public void updateMPG(){
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = getWritableDatabase().rawQuery("select ('odometer' - y.odometer) / 'gallons' as mpg from gasLog x, gasLog y where y.odometer = (select max(z.odometer) from gasLog z where z.odometer < 'odometer')", null);
ContentValues values = new ContentValues();
try {
cursor.moveToFirst();
while (true) {
mpg = cursor.getString(0);
values.put(KEY_MPG, mpg);
long gasLog_id = db.insert(TABLE_GASLOG, null, values);
if (cursor.isLast())
break;
cursor.moveToNext();
}
} finally {
cursor.close();
}
db.close();
}
EDIT3:
答案 0 :(得分:1)
以下是如何遍历数据库中的所有行并修改TABLE_GASLOG表中的mpg列值。
Cursor cursor = getWritableDatabase().rawQuery("select (" + gasLog.getOdometer() + " - y.odometer) / " + gasLog.getGallons() + " as mpg from gasLog x, gasLog y where y.odometer = (select max(z.odometer) from gasLog z where z.odometer < " + gasLog.getOdometer() + ")", null);
try {
cursor.moveToFirst();
int key = 1;
while (true) {
mpg = cursor.getString(0);
values.put(KEY_MPG, mpg);
db.update(TABLE_GASLOG, values, "_id=?", new String[]{String.valueOf(key)});
if (cursor.isLast())
break;
cursor.moveToNext();
key++;
}
} finally {
cursor.close();
}
db.close();
此代码将基本遍历整个结果集,然后在每行中提取mpg值并将其插入TABLE_GASLOG数据库。
编辑:这将向TABLE_GASLOG添加更多行。从您发表评论,我了解您需要更新您的行。在这种情况下,请使用:
而不是db.insert()方法update(String table, ContentValues values, String whereClause, String[] whereArgs)
你的where子句将取决于你的条件。