gpt4 book ai didi

Android:将多条记录插入/更新到 SQL 数据库

转载 作者:太空狗 更新时间:2023-10-29 13:43:19 28 4
gpt4 key购买 nike

好吧,也许我在这里完全遗漏了一些东西,但我刚刚开始使用 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();
}
}

提前致谢,不要指望任何人重写我在这里所做的一切,但非常感谢指出正确的方向和指向示例的链接。

最佳答案

updates and inserts back to the database need to be handled individually?

INSERT 语句“需要单独处理”在我能想到的每个 SQL 数据库上,在我能想到的每个平台上。任何支持批量插入模式的东西都是 SQL 之上的包装器。异常(exception)是 INSERT 从另一个表的子 SELECT 获取数据,我认为这不是您所指的。

UPDATE 语句将更新您在 WHERE 子句中指定的任何行,可以是零、一或多行。同样,这就是 SQL 的工作方式。

but if I wanted to apply an update to each record in the cursor, I can only see how to do this individually, using ContentValues and Update(), and then the cursor requires reloading??

如果更改相同,则使用单个 UPDATE 语句和适当的 WHERE 子句(通过 update() 方法,如果适合您的更新模式,或通过 execSQL())。您需要 requery() Cursor,因为 Cursor 保存您修改之前上一个查询的结果集。

Can I not create a List and bulk insert?

欢迎您编写随心所欲的 Java 代码。但是,您的约束是 SQL/SQLite。

关于Android:将多条记录插入/更新到 SQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3107327/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com