【问题标题】:Android: Inserting/Updating multiple records to SQL databaseAndroid:将多条记录插入/更新到 SQL 数据库
【发布时间】: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


【解决方案1】:

更新并插入回 数据库需要处理 个人?

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

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

但如果我想将更新应用到 游标中的每条记录,我只能 查看如何单独执行此操作,使用 ContentValues 和 Update(),然后 光标需要重新加载??

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

我可以不创建列表和批量吗 插入?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-06
    • 2019-04-19
    • 2019-02-21
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    相关资源
    最近更新 更多