多个插入语句的Android SQLite。

6
我从网络上下载了800个格式如下的insert语句: insert into mytable(col1,..,coln) values(val1,..valn);insert into mytable col... 我听说过事务,ContentValue和使用union,但我无法确定哪一个更适合这种情况。
在清空mytable之后,最佳的方法是将它们插入到sqlite数据库中是什么?

首先,这不是从服务器下载数据更新表的好方法。为什么要下载插入语句? - Simon
@Simon 这是一个本地服务器,没有连接到互联网。我正在尝试将mysql表的值(用作备份表)插入到sqlite表中(插入语句是使用php脚本创建的)。 - AllOutOfSalt
2个回答

19

如果需要运行多个查询,为了提高数据完整性和性能,您应该使用事务。以下是一个示例代码,以便让你了解如何做到这一点:

在需要运行多个查询的情况下,为了提高数据完整性和性能,应使用事务。以下代码提供了一个示例,可以帮助您了解如何实现:

    SQLiteDatabase db = sqlHelper.getWritableDatabase(); // get a writable database here
    db.beginTransaction();

    try {
        for (int insertQuery : listOfQueries) {  // loop through your records 
            db.insert(...);
        }

        db.setTransactionSuccessful();
    }
    finally {
        db.endTransaction();
    }

    db.close();

1
它能够处理800个插入语句吗? - AllOutOfSalt
1
是的,在我的应用程序中,我大约有7000个,而且运行良好。您应该在单独的线程上执行它,最好使用AsyncTask以避免阻塞UI线程。 - Szymon
3
您无需每次调用“insert”,可以将多个“values”传递给一个插入语句。请参阅此处:https://dev59.com/w3I-5IYBdhLWcg3w6tJR#1609688 - Ricardo
@Ricardo 那就更好了! - Szymon
使用db.insertOrThrow而不是仅仅使用db.insert!这段代码永远不会抛出异常,因此如果您的插入操作失败,您将插入不完整的数据。 - Janeks Bergs

0

我使用以下代码,仅运行一次查询。

 public void addListRecord(List<Province> list) {
    SQLiteDatabase db = DatabaseManager.getInstance().openDatabase();
    try {
        String sql = " INSERT INTO " + TABLE_PROVINCE + " ("
                + COL_PROVINCE_ID + ","
                + COL_PROVINCE_NAME + ","
                + COL_PROVINCE_STATUS + ") VALUES ";
        String value = "";
        for (Province item : list) {
            value += "('" + item.getId() + "',"
                    + "'" + item.getName() + "',"
                    + "'" + item.getStatus() + "')";
            value += ",";
        }
        value = Utils.removeLastChar(value);
        value += ";";
        String mQuery = sql + value;
        Logger.debug("mQuery: " + mQuery);
        SQLiteStatement statement = db.compileStatement(mQuery);
        statement.execute();
    } catch (SQLException e) {
        Logger.debug("SQLException Error: " + e);
    } finally {
        DatabaseManager.getInstance().closeDatabase();
    }
}
public static String removeLastChar(String s) {
    if (s == null || s.length() == 0) {
        return s;
    }
    return s.substring(0, s.length() - 1);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接