SQLiteDatabase.execSQL(query) - onCreate() 方法中的多个 SQL 命令不起作用
SQLiteDatabase.execSQL(query) - Multiple SQL commands inside the onCreate() method not working
我是 android 的新手。我以前没有使用过 SQLite 数据库。
我认为这是一个非常基本的问题,但我找不到解决方案。
代码在这里(假设声明)
public void onCreate(SQLiteDatabase db) {
String CREATE_CATEGORIES_TABLE = "CREATE TABLE " + FORMULA + "("
+ CAT_CD + " TEXT ," + S_CAT_CD + " TEXT, PRIMARY
KEY(CAT_CD,S_CAT_CD))";
db.execSQL(CREATE_CATEGORIES_TABLE);
String CREATE_CAT_DESC_TABLE="CREATE TABLE "+ FORMULA_CAT_DESC + "
("+CAT_CD+" TEXT PRIMARY KEY, "+ DESC +" TEXT ) ";
db.execSQL(CREATE_CAT_DESC_TABLE);
String CREATE_CURRENCY_TABLE="CREATE TABLE "+ VI_CURRENCY + "("+
CURRENCY_CD +" TEXT PRIMARY KEY, "+ CURRENCY_SIGN +" TEXT ) ";
db.execSQL(CREATE_CURRENCY_TABLE);
String query= "INSERT INTO "+ VI_CURRENCY +" ("+CURRENCY_CD +",
"+CURRENCY_SIGN+ ") VALUES " +
"('INR', '₹'), " +
" ('USD','$') " +
"('JPY','¥') ";
db.execSQL(query);
}
前三个命令执行成功,而执行插入命令时,SQLite 抛出异常。
您可以为每条记录创建一个 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);
或者在一个语句中插入多个值,使用正确的语法应该是这样的:
String query = "INSERT INTO " + VI_CURRENCY + " (" + CURRENCY_CD + ", " + CURRENCY_SIGN + ") VALUES " +
"('INR', '₹'), " +
"('USD','$'), " +
"('JPY','¥')";
db.execSQL(query);
有关详细信息,请访问 SqlLite
如果要插入多条记录,那么应该以键值对的方式取hashmap对象中的数据。使用迭代器并在 table.
中插入数据
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
}
在Android中,写入操作很慢,所以在你的情况下,如果你有数百条数据,你可以在SQLite数据库中使用事务。
db.beginTransaction();
try {
for(/*your loop*/) {
String query = /*your query*/
db.execSQL(query);
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
更多细节,请参考this,官方文档
我是 android 的新手。我以前没有使用过 SQLite 数据库。
我认为这是一个非常基本的问题,但我找不到解决方案。
代码在这里(假设声明)
public void onCreate(SQLiteDatabase db) {
String CREATE_CATEGORIES_TABLE = "CREATE TABLE " + FORMULA + "("
+ CAT_CD + " TEXT ," + S_CAT_CD + " TEXT, PRIMARY
KEY(CAT_CD,S_CAT_CD))";
db.execSQL(CREATE_CATEGORIES_TABLE);
String CREATE_CAT_DESC_TABLE="CREATE TABLE "+ FORMULA_CAT_DESC + "
("+CAT_CD+" TEXT PRIMARY KEY, "+ DESC +" TEXT ) ";
db.execSQL(CREATE_CAT_DESC_TABLE);
String CREATE_CURRENCY_TABLE="CREATE TABLE "+ VI_CURRENCY + "("+
CURRENCY_CD +" TEXT PRIMARY KEY, "+ CURRENCY_SIGN +" TEXT ) ";
db.execSQL(CREATE_CURRENCY_TABLE);
String query= "INSERT INTO "+ VI_CURRENCY +" ("+CURRENCY_CD +",
"+CURRENCY_SIGN+ ") VALUES " +
"('INR', '₹'), " +
" ('USD','$') " +
"('JPY','¥') ";
db.execSQL(query);
}
前三个命令执行成功,而执行插入命令时,SQLite 抛出异常。
您可以为每条记录创建一个 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);
或者在一个语句中插入多个值,使用正确的语法应该是这样的:
String query = "INSERT INTO " + VI_CURRENCY + " (" + CURRENCY_CD + ", " + CURRENCY_SIGN + ") VALUES " +
"('INR', '₹'), " +
"('USD','$'), " +
"('JPY','¥')";
db.execSQL(query);
有关详细信息,请访问 SqlLite
如果要插入多条记录,那么应该以键值对的方式取hashmap对象中的数据。使用迭代器并在 table.
中插入数据 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
}
在Android中,写入操作很慢,所以在你的情况下,如果你有数百条数据,你可以在SQLite数据库中使用事务。
db.beginTransaction();
try {
for(/*your loop*/) {
String query = /*your query*/
db.execSQL(query);
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
更多细节,请参考this,官方文档