Android execSQL(查询)-onCreate()方法中的多个SQL命令不起作用
我是android新手。我以前从未使用过SQLite DBs。Android execSQL(查询)-onCreate()方法中的多个SQL命令不起作用,android,sqlite,android-sqlite,sqliteopenhelper,Android,Sqlite,Android Sqlite,Sqliteopenhelper,我是android新手。我以前从未使用过SQLite DBs。 我认为这是一个非常基本的问题,但我找不到解决办法 代码在这里(假设声明) 前三个命令执行成功,而通过执行insert命令,SQLite抛出一个exeption。您可以为每个记录创建一个sql语句 String query1 = "INSERT INTO " + VI_CURRENCY + " (" + CURRENCY_CD + ", " + CURRENCY_SIGN + ") VALUES " + "('INR', '₹')"
我认为这是一个非常基本的问题,但我找不到解决办法 代码在这里(假设声明)
前三个命令执行成功,而通过执行insert命令,SQLite抛出一个exeption。您可以为每个记录创建一个sql语句
String query1 = "INSERT INTO " + VI_CURRENCY + " (" + CURRENCY_CD + ", " + CURRENCY_SIGN + ") VALUES " + "('INR', '₹')" ;
String query2 = "INSERT INTO " + VI_CURRENCY + " (" + CURRENCY_CD + ", " + CURRENCY_SIGN + ") VALUES " + "('USD','$')" ;
String query3 = "INSERT INTO " + VI_CURRENCY + " (" + CURRENCY_CD + ", " + CURRENCY_SIGN + ") VALUES " + "('JPY','¥')" ;
db.execSQL(query1);
db.execSQL(query2);
db.execSQL(query3);
或者在一条语句中插入多个值,使用正确的sintax,如下所示:
String query = "INSERT INTO " + VI_CURRENCY + " (" + CURRENCY_CD + ", " + CURRENCY_SIGN + ") VALUES " +
"('INR', '₹'), " +
"('USD','$'), " +
"('JPY','¥')";
db.execSQL(query);
有关更多信息,请访问如果要插入多条记录,则应在键值对中的hashmap对象中获取数据。对同一个表使用迭代器并在表中插入数据
Map<String,String> myMap = new HashMap<>();
myMap.put("INR","₹");
myMap.put("USD","$");
myMap.put("JPY","¥");
Iterator it = myMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
String query1 = "INSERT INTO " + VI_CURRENCY + " (" + CURRENCY_CD + ", " + CURRENCY_SIGN + ") VALUES " + "("+ pair.getKey()+ "," + pair.getvalue()+)" ;
db.execSQL(query1);
it.remove(); // avoids a ConcurrentModificationException
}
Map myMap=newhashmap();
myMap.put(“INR”₹");
myMap.put(“美元”、“美元”);
myMap.put(“日元”,“日元”);
迭代器it=myMap.entrySet().Iterator();
while(it.hasNext()){
Map.Entry对=(Map.Entry)it.next();
字符串query1=“插入“+VI_CURRENCY+”(“+CURRENCY_CD+”,“+CURRENCY_SIGN+”)值“+”(“+pair.getKey()+”,“+pair.getvalue()+)”;
db.execSQL(查询1);
it.remove();//避免ConcurrentModificationException
}
在Android中,写入操作很慢,所以在您的情况下,如果您有数百个数据,您可以使用SQLite数据库中的事务
db.beginTransaction();
try {
for(/*your loop*/) {
String query = /*your query*/
db.execSQL(query);
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
有关更多详细信息,请参阅官方文档。使用LogCat检查与崩溃相关的Java堆栈跟踪:您正试图通过运行一个SQL命令插入多行。我想插入数百条记录,所以我应该编写数百条查询吗?我认为这不是一个好的解决方案。我更新了答案,您有一个语法错误谢谢。现在查询成功了。
db.beginTransaction();
try {
for(/*your loop*/) {
String query = /*your query*/
db.execSQL(query);
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}