在SQLite android中添加大量数据

时间:2014-11-30 15:57:30

标签: android sqlite

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

2 个答案:

答案 0 :(得分: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();
}

然后循环浏览所有的名字和分数。

答案 1 :(得分:0)

我建议您使用交易。 您可以将此状态归档为要使用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,你有一个很好的链接 - &gt; https://stackoverflow.com/a/2663620/709671

希望它有所帮助。