【问题标题】:Record in the database记录在数据库中
【发布时间】:2013-12-14 22:33:25
【问题描述】:

尝试站点 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) 在 com.parse.FindCallback.internalDone(FindCallback.java:48) 在 com.parse.FindCallback.internalDone(FindCallback.java:33) 在 com.parse.BackgroundTask.onPostExecute(BackgroundTask.java:50) 在 com.parse.BackgroundTask.onPostExecute(BackgroundTask.java:16) 在 android.os.AsyncTask.finish(AsyncTask.java:631) 在 android.os.AsyncTask.access$600(AsyncTask.java:177) 在 android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:5103) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:525) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 在 dalvik.system.NativeStart.main(Native Method)

在真实设备上

致命异常:main 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) 在 com.parse.FindCallback.internalDone(FindCallback.java:48) 在 com.parse.FindCallback.internalDone(FindCallback.java:33) 在 com.parse.BackgroundTask.onPostExecute(BackgroundTask.java:50) 在 com.parse.BackgroundTask.onPostExecute(BackgroundTask.java:16) 在 android.os.AsyncTask.finish(AsyncTask.java:417) 在 android.os.AsyncTask.access$300(AsyncTask.java:127) 在 android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:130) 在 android.app.ActivityThread.main(ActivityThread.java:3687) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:507) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 在 dalvik.system.NativeStart.main(Native Method)

long rowID = db.insert("mytable", null, cv); // MainActivity.java:347

有什么问题?

【问题讨论】:

    标签: android database parse-platform


    【解决方案1】:

    去掉这行试试不要关闭数据库:

    dbHelper.close();
    

    正如in this post 所说,您不必在 SQLite 中关闭数据库。 实际上,我认为您不应该关闭。

    在我的情况下,我只为DatabaseHelper 使用一个实例,它工作正常,即使有多个线程访问数据库。当应用程序退出时,数据库连接被操作系统关闭。 只是提醒关闭游标。

    这是另一个可能有帮助的参考资料:What are the best practices for SQLite on Android?

    【讨论】:

      【解决方案2】:

      我认为您在使用之前错过了打开您的DataBase,或者您试图在没有open 的情况下再次打开关闭的DataBase

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-18
        • 1970-01-01
        • 2015-11-14
        • 2015-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多