public void execSqlFromAssets(String path) {
InputStream input;
String text;
try {
input = mCtx.getAssets().open(path + ".txt");
int size = input.available();
byte[] buffer = new byte[size];
input.read(buffer);
input.close();
text = new String(buffer);
String[] inserts = text.split(";");
// SQLiteDatabase db = mDb;
for (String insert : inserts) {
insert = insert;
Log.w(TAG, insert);
try {
mDb.execSQL(insert);
} catch (Exception e) {
String err = (e.getMessage() == null) ? "Cant execute sql"
+ insert : e.getMessage();
Log.w(TAG, err);
}
}
} catch (IOException e) {
Log.w(TAG, "execSqlFromAssets: " + path + " file not found");
}
}
这是我的代码问题在线,包含 mDb.execSQL(插入)。它抛出异常,我无法读取值为null。我只是没有得到它的错误消息之一是: 无法执行sqlINSERT INTO food(name,cals)VALUES(“kolac”,270)。 任何帮助表示赞赏
答案 0 :(得分:0)
好的,因为@Preet Sangha要求我发布解决方案。 我的问题是我在onCreate方法中的SQLiteOpenHelper实例中调用了这个函数 mDb实例尚未创建,因此我将功能更改为此
public void execSqlFromAssets(String path, SQLiteDatabase db) {
if(db == null){
db = mDb;
}
InputStream input;
String text;
try {
input = mCtx.getAssets().open(path + ".txt");
int size = input.available();
byte[] buffer = new byte[size];
input.read(buffer);
input.close();
text = new String(buffer);
String[] inserts = text.split(";");
for (String insert : inserts) {
try {
db.execSQL(insert);
} catch (Exception e) {
String err = (e.getMessage() == null) ? "Cant execute sql"
+ insert : e.getMessage();
Log.w(TAG, err);
}
}
} catch (IOException e) {
Log.w(TAG, "execSqlFromAssets: " + path + " file not found");
}
}
所以现在如果我从onCreate调用此函数,我将发送db作为第二个参数,如果我从应用程序的其他组件调用它,我将发送null作为第二个参数