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