试用网站parse.com将数据加载到数据库中
@Override
public void onClick(View v) {
cv = new ContentValues();
db = dbHelper.getWritableDatabase();
switch (v.getId()) {
case R.id.btnAdd:
query = new ParseQuery("mens");
query.setLimit(50);
query.findInBackground(new FindCallback() {
public void done(List<ParseObject> mens, ParseException e) {
if (e == null) {
for ( int i = 0; i < 50; i++) {
stGet = mens.get(i).getString("Str");
cv.put("email", stGet);
long rowID = db.insert("mytable", null, cv);
}
}
}
});
break;
dbHelper.close();
}
类DBHelper扩展了SQLiteOpenHelper {
public DBHelper(Context context) {
super(context, "myDB", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table mytable ("
+ "id integer primary key autoincrement,"
+ "email text" + ");");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
在模拟器上获取
java.lang.IllegalStateException:尝试重新打开已经关闭的 对象:SQLiteDatabase:/data/data/com.project.test/databases/myDB at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55) 在 android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java: 1437)在 android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339) 在com.project.test.MainActivity $ 1.done(MainActivity.java:347)at com.parse.FindCallback.internalDone(FindCallback.java:48)at com.parse.FindCallback.internalDone(FindCallback.java:33)at com.parse.BackgroundTask.onPostExecute(BackgroundTask.java:50)at com.parse.BackgroundTask.onPostExecute(BackgroundTask.java:16)at android.os.AsyncTask.finish(AsyncTask.java:631)at android.os.AsyncTask.access $ 600(AsyncTask.java:177)at android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:644) 在android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:137)at android.app.ActivityThread.main(ActivityThread.java:5103)at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke(Method.java:525)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)at dalvik.system.NativeStart.main(原生方法)
在真实设备上
FATAL EXCEPTION:主java.lang.IllegalStateException:数据库不是 打开 android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java: 1671)在 android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1571) 在com.project.test.MainActivity $ 1.done(MainActivity.java:347)at com.parse.FindCallback.internalDone(FindCallback.java:48)at com.parse.FindCallback.internalDone(FindCallback.java:33)at com.parse.BackgroundTask.onPostExecute(BackgroundTask.java:50)at com.parse.BackgroundTask.onPostExecute(BackgroundTask.java:16)at android.os.AsyncTask.finish(AsyncTask.java:417)at android.os.AsyncTask.access $ 300(AsyncTask.java:127)at android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:429) 在android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:130)at android.app.ActivityThread.main(ActivityThread.java:3687)at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke(Method.java:507)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:867) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)at dalvik.system.NativeStart.main(原生方法)
long rowID = db.insert(“mytable”,null,cv); // MainActivity.java:347
有什么问题?
答案 0 :(得分:1)
我认为您在使用之前错过了打开DataBase
,或者您试图在没有DataBase
的情况下再次打开关闭open
答案 1 :(得分:0)
尝试不删除此行来关闭数据库:
dbHelper.close();
如上所述in this post,您不必在SQLite中关闭数据库。 实际上,我认为你不应该关闭。
在我的情况下,我只使用DatabaseHelper
的单个实例,它工作正常,即使有多个线程访问数据库。当应用程序退出时,操作系统将关闭数据库连接。
只需提醒关闭游标即可。
以下是另一个可能有用的参考资料:What are the best practices for SQLite on Android?