【问题标题】:add large amount of data in SQLite android在 SQLite android 中添加大量数据
【发布时间】:2014-11-30 15:57:29
【问题描述】:

我是 android 新手,也许这是一个愚蠢的问题,但我不明白。看我正在设计一个游戏,我们给一些人打分。所以我想在安装时将人员的姓名存储在数据库中,然后他们的分数最初设置为 0,这将根据用户选择的内容进行更新。在这里,我无法弄清楚我应该如何输入数据,因为它将大约有 100 个名字和他们的分数。使用 INSERT INTO() 语句将使其像 100 条语句。那么是否有任何简短的方法,例如我们可以通过字符串或其他东西来做到这一点。不过只是猜测。任何帮助将不胜感激。

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    您不会将名称或分数硬编码到 SQL 语句中。相反,您使用参数。

    var command = new SQLiteCommand()
    command.CommandText = "INSERT INTO Scores (name, score) VALUES(@name, @score)";
    command.CommandType = CommandType.Text;
    
    foreach (var item in data)
    {
       command.Parameters.Add(new SQLiteParameter("@name", item.Name));
       command.Parameters.Add(new SQLiteParameter("@score", item.Score));
       command.ExecuteNonQuery();
    }
    

    然后循环遍历所有的名字和分数。

    【讨论】:

    • 感谢您的回复。我不完全了解这将如何工作,因为我不知道参数的概念。您能否提供一些示例代码或类似内容的文档链接。
    • 在 Google 上搜索“SQLite 绑定参数”。上述代码使用 System.Data.SQLite 和 C#;在 C 中,你做这件事的方式有些不同。
    【解决方案2】:

    我建议您使用交易。 您可以归档此声明,说明您想使用beginTransaction() 的事务,使用循环在makeAllInserts() 上执行所有插入操作,如果一切正常,则调用setTransactionSuccessful() 在批处理操作中执行此操作。如果出现问题,在 finally 部分您将调用 endTransaction() 而不设置成功,这将执行回滚。

    db.beginTransaction();
    try {
        makeAllInserts();
        db.setTransactionSuccessful();
    }catch {
        //Error in between database transaction 
    }finally {
        db.endTransaction();
    }
    

    对于 makeAllInserts 函数,可以执行以下操作:

    public void makeAllInserts() {
        for(int i = 0; i < myData.size(); i++) {
            myDataBase = openDatabase();
            ContentValues values = new ContentValues();
                values.put("name", myData.get(i).getName());
                values.put("score", myData.get(i).getScore());
            myDataBase.insert("MYTABLE", nullColumnHack, values);
        }
    }
    

    如果您还想了解这里的 nullColumnHack,您有一个很好的链接 -> https://stackoverflow.com/a/2663620/709671

    希望对你有帮助。

    【讨论】:

    • 谢谢伙计。喜欢这个想法。它对我有用。但现在我有一个不同的问题。请检查:stackoverflow.com/questions/27259658/…
    • 我很高兴听到@Decoder 回答了您的其他问题。看看:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多