【问题标题】:Android SQLiteStatement Insert, nothing happenAndroid SQLiteStatement 插入,没有任何反应
【发布时间】:2020-11-06 01:36:59
【问题描述】:

我有一些来自 SoapObject 的数据,我想插入到 sqlite,为了获得更好的性能,我使用以下代码:

public void testInsert(String sql, SoapObject rs, int index) {
        try {
            sql = "INSERT INTO NSPMasterHarga (KdBarang, Wilayah, HargaJual1, HargaJual2) VALUES (?, ?, ?, ?)";
            theDatabase = getWritableDatabase();
            theDatabase.beginTransaction();

            String drop = "DROP TABLE IF EXISTS NSPMasterHarga";
            SQLiteStatement stmtDrop = theDatabase.compileStatement(drop);
            stmtDrop.execute();

            String create = "CREATE TABLE NSPMasterHarga (KdBarang TEXT PRIMARY KEY, Wilayah TEXT, HargaJual1 TEXT, HargaJual2 TEXT)";
            SQLiteStatement stmtCreate = theDatabase.compileStatement(create);
            stmtCreate.execute();

            SQLiteStatement stmt = theDatabase.compileStatement(sql);

            int count = rs.getPropertyCount();

            for (int i = 0; i < count; i++) {
                SoapObject row = (SoapObject) rs.getProperty(i);

                for (int j = 1; j <= index; j++) {
                    stmt.bindString(j, row.getProperty(j - 1).toString().replace("anyType{}", ""));
                }

                long entryID = stmt.executeInsert();
                stmt.clearBindings();
            }
        /*for (int i = 0; i < NUMBER_OF_ROWS; i++) {
            //generate some values

            stmt.bindString(1, randomName);
            stmt.bindString(2, randomDescription);
            stmt.bindDouble(3, randomPrice);
            stmt.bindLong(4, randomNumber);

            long entryID = stmt.executeInsert();
            stmt.clearBindings();
        }*/

            theDatabase.setTransactionSuccessful();
            theDatabase.endTransaction();

            theDatabase.close();
        }
        catch (Exception ex)
        {
            String err = ex.getMessage();
        }
    }

调试时,我没有任何错误,但数据没有插入到我的 sqlite。 有什么想法或线索吗?

谢谢

【问题讨论】:

  • 这段代码是否在扩展 SQLiteOpenHelper 的类中?
  • 里面..@Tobi

标签: android soap insert android-sqlite


【解决方案1】:

为了更好的性能

我不太确定您指的是代码的哪一部分。每次交互后打开和关闭数据库对于性能来说很糟糕。 SQLiteOpenHelper 负责所有这些,因此您无需手动执行任何操作。

尝试以下替代方法来插入条目:

public boolean addEntry(){
    db = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    values.put("column1", "value1");  // make sure the type corresponds to your sql column type
    values.put("column2", "value2");
    values.put("column3", "value3");
    values.put("column4Int", 1);

    long newRowId = db.insert(TABLE_NAME, null, values);
    Log.d("DBHelper", "Added row " + newRowId + " to DB.");

    return newRowId != -1;  // -1 means it failed
}

【讨论】:

  • 这个函数是我放在循环 SoapObject 中的吗?我在哪里放置表名? :/ 看起来像这个唯一的列名。谢谢
  • 您的表名为“NSPMasterHarga”。在 ContentValues 中,每列有一个条目。如示例values.put("column1", "value1")。是的,您将其放置在外部 for 循环内。而且您不需要内部 for 循环。但在尝试解决肥皂之前先测试一个样本
猜你喜欢
  • 2014-04-05
  • 1970-01-01
  • 2023-04-10
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多