Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android execSQL(查询)-onCreate()方法中的多个SQL命令不起作用_Android_Sqlite_Android Sqlite_Sqliteopenhelper - Fatal编程技术网

Android execSQL(查询)-onCreate()方法中的多个SQL命令不起作用

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', '₹')"

我是android新手。我以前从未使用过SQLite DBs。
我认为这是一个非常基本的问题,但我找不到解决办法

代码在这里(假设声明)


前三个命令执行成功,而通过执行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();
}