2012-07-09 4 views
1

나는 단지 내 테이블을 읽고 있지만 그 오류를 제공하기 때문에 응용 프로그램을 시작할 수 없습니다 :Sqlite 데이터베이스 안드로이드 커서/잠금

여기에 te 클래스가 dbclass에 연결합니다. DBclass의 id 메소드를 호출 한 다음 db를 닫습니다.

public int return_id_phone(Context contxt) { 
    Database db = new Database(contxt); 
    db.open(); 
    int id_phone = db.id(2); 
    db.close(); 
    return id_phone; 
} 

다음은 추출 할 코드입니다. 단지 그것이 단순한 번호를 반환하고 나는 그것이 왜 충돌하는지 모르겠다. 아래 오류에서 커서를 닫지 않고 db도 잠겨 있다고 말합니다.

내 데이터베이스 클래스는 다음과 같습니다. 예 스타디는 완벽하게 작동하고 있었고 현재는 작동하지 않습니다 ...

패키지 com.background;

공용 클래스 데이터베이스 내가 잘못 뭘하는지 모르는 {

public static final String KEY_ROWID = "id"; 
public static final String KEY_NAME = "sync"; 

public static final String ID_ROW = "_ids"; 
public static final String VALUE_ROW = "_value"; 

public static final String ID = "id"; 
public static final String STATE = "state"; 

public static final String ID_CONTACTS = "idcontacts"; 
public static final String NAME = "name"; 
public static final String NUMBER = "phone"; 

private static final String DATABASE_NAME = "faraway"; 
private static final String DATABASE_TABLE = "sync"; 
private static final String DATABASE_TABLE_2 = "user"; 
private static final String DATABASE_TABLE_3 = "service"; 
private static final String DATABASE_TABLE_4 = "contacts"; 
private static final int DATABASE_VERSION = 1; 

private DbHelper ourHelper; 
private final Context ourContext; 
private SQLiteDatabase ourDatabase; 
ArrayList<String> list = new ArrayList<String>(); 
String proba = ""; 

private static class DbHelper extends SQLiteOpenHelper { 

    public DbHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 

     db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID 
       + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_NAME 
       + " INTEGER NOT NULL);"); 

     db.execSQL("CREATE TABLE " + DATABASE_TABLE_2 + " (" + ID_ROW 
       + " INTEGER PRIMARY KEY AUTOINCREMENT, " + VALUE_ROW 
       + " INTEGER NOT NULL);"); 

     db.execSQL("CREATE TABLE " + DATABASE_TABLE_3 + " (" + ID 
       + " INTEGER PRIMARY KEY AUTOINCREMENT, " + STATE 
       + " INTEGER NOT NULL);"); 

     db.execSQL("CREATE TABLE " + DATABASE_TABLE_4 + " (" + ID_CONTACTS 
       + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NAME 
       + " TEXT NOT NULL, " + NUMBER + " TEXT NOT NULL);"); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

     db.execSQL("DROP TABLE IF EXIST " + DATABASE_TABLE); 
     onCreate(db); 

    } 

} 

public Database(Context c) { 
    ourContext = c; 

} 

public Database open() throws SQLException { 

    ourHelper = new DbHelper(ourContext); 
    ourDatabase = ourHelper.getWritableDatabase(); 
    return this; 
} 

public void close() { 
    ourHelper.close(); 

} 

public long primerCop() { 

    ContentValues cv = new ContentValues(); 
    cv.put(KEY_NAME, 1); 
    return ourDatabase.insert(DATABASE_TABLE, null, cv); 

} 

public long updateSync(int ids, int value) { 

    ContentValues cv = new ContentValues(); 
    cv.put(KEY_NAME, value); 
    return ourDatabase.update(DATABASE_TABLE, cv, KEY_ROWID + "=" + ids, 
      null); 

} 

public long zeroAll(int ids) { 

    ContentValues cv = new ContentValues(); 
    cv.put(KEY_NAME, 0); 
    return ourDatabase.update(DATABASE_TABLE, cv, KEY_ROWID + "=" + ids, 
      null); 

} 

public List<String> check() { 

    String[] columns = new String[] { KEY_ROWID, KEY_NAME }; 
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_NAME + "=1", 
      null, null, null, null); 

    if (c != null) { 
     for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
      list.add(c.getString(0)); 
     } 

     return list; 

    } else { 
     return null; 
    } 
} 

public long personaldata(Integer id) { 
    ContentValues cv = new ContentValues(); 
    cv.put(VALUE_ROW, id); 
    return ourDatabase.insert(DATABASE_TABLE_2, null, cv); 
} 

public int id(int row) { 
    String[] columns = new String[] { ID_ROW, VALUE_ROW }; 
    Cursor c = ourDatabase.query(DATABASE_TABLE_2, columns, ID_ROW + "='" 
      + row+"'", null, null, null, null); 
    if (c != null) { 
     c.moveToFirst(); 
     int id= c.getInt(1); 
     c.close(); 
     return id; 
    } else { 
     return 0; 
    } 
} 

public long prepare_service() { 
    ContentValues cv = new ContentValues(); 
    cv.put(STATE, 0); 
    return ourDatabase.insert(DATABASE_TABLE_3, null, cv); 
} 

public int chech_state(int id) { 
    String[] columns = new String[] { ID, STATE }; 
    Cursor c = ourDatabase.query(DATABASE_TABLE_3, columns, ID + "=" + id, 
      null, null, null, null); 

    if (c != null) { 
     c.moveToFirst(); 
     int a = c.getInt(1); 
     c.close(); 
     return a; 
    } else { 
     return 2; 
    } 
} 

public long update_s(int value, int id) { 
    ContentValues cv = new ContentValues(); 
    cv.put(STATE, value); 
    return ourDatabase.update(DATABASE_TABLE_3, cv, KEY_ROWID + "=" + id, 
      null); 
} 

public boolean Preferences(int id) { 
    String[] columns = new String[] { KEY_ROWID, KEY_NAME }; 
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" 
      + id, null, null, null, null); 

    if (c != null) { 
     c.moveToFirst(); 
     int number = c.getInt(1); 
     if (number == 1) { 
      c.close(); 
      return true; 
     } else { 
      c.close(); 
      return false; 
     } 
    } else { 
     c.close(); 
     return false; 
    } 
} 

public long contact_table(String name, String number) { 
    ContentValues cv = new ContentValues(); 
    cv.put(NAME, name); 
    cv.put(NUMBER, number); 
    return ourDatabase.insert(DATABASE_TABLE_4, null, cv); 

} 

public long update_name(String name, String number) { 
    ContentValues cv = new ContentValues(); 
    cv.put(NAME, name); 
    return ourDatabase.update(DATABASE_TABLE_4, cv, NUMBER + "='" + number 
      + "'", null); 
} 

public long update_phone(String name, String number) { 
    ContentValues cv = new ContentValues(); 
    cv.put(NUMBER, number); 
    return ourDatabase.update(DATABASE_TABLE_4, cv, NAME + "='" + name 
      + "'", null); 
} 

public JSONObject select_contact(String name, String number) { 

    String queryf = "select * from " + DATABASE_TABLE_4 + " where " + NAME 
      + "='" + name + "' or " + NUMBER + "='" + number + "'"; 
    Cursor c = ourDatabase.rawQuery(queryf, null); 
    JSONObject json = new JSONObject(); 

    if (c.getCount() == 0) { 
     // No hay usuario y lo insertamos en la db 
     c.close(); 
     try { 
      json.put("type", "upload"); 
      json.put("name", name); 
      json.put("phone", number); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
     return json; 

    } else { 
     c.close(); 
     String queryf2 = "select * from " + DATABASE_TABLE_4 + " where " 
       + NAME + "='" + name + "' and " + NUMBER + "='" + number 
       + "'"; 
     Cursor c2 = ourDatabase.rawQuery(queryf2, null); 

     if (c2.getCount() != 0) { 
      c2.close(); 
      try { 
       json.put("type", "exists"); 
      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } 
      return json; 

     } else { 

      c2.close(); 
      String queryf3 = "select * from " + DATABASE_TABLE_4 
        + " where " + NAME + "='" + name + "'"; 
      Cursor c3 = ourDatabase.rawQuery(queryf3, null); 

      if (c3.getCount() != 0) { 
       c3.close(); 
       try { 
        json.put("type", "change_phone"); 
       } catch (Exception ex) { 
        ex.printStackTrace(); 
       } 
       return json; 

      } else { 
       String queryf4 = "select * from " + DATABASE_TABLE_4 
         + " where " + NUMBER + "='" + number + "'"; 
       Cursor c4 = ourDatabase.rawQuery(queryf4, null); 

       if (c4.getCount() != 0) { 
        c4.close(); 
        try { 
         json.put("type", "change_name"); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
        return json; 
       } 
      } 

     } 
     return null; 
    } 
} 

}

...

> 07-09 11:54:05.460: E/SQLiteDatabase(6938): close() was never explicitly called on database '/data/data/com.anonyme.app/databases/faraway' 
07-09 11:54:05.460: E/SQLiteDatabase(6938): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:2069) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1123) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1081) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1167) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:833) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:157) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at com.background.Database.open(Database.java:89) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at com.extract.Contacts.phoneandname(Contacts.java:124) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at com.anonyme.app.IntroActivity.uploadall(IntroActivity.java:85) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at com.anonyme.app.IntroActivity.onCreate(IntroActivity.java:76) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at android.app.Activity.performCreate(Activity.java:4465) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at android.app.ActivityThread.access$600(ActivityThread.java:127) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at android.os.Looper.loop(Looper.java:137) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at android.app.ActivityThread.main(ActivityThread.java:4507) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
07-09 11:54:05.460: E/SQLiteDatabase(6938):  at dalvik.system.NativeStart.main(Native Method) 
07-09 11:54:05.460: E/System(6938): Uncaught exception thrown by finalizer 
07-09 11:54:05.465: E/System(6938): java.lang.IllegalStateException: Don't have database lock! 
07-09 11:54:05.465: E/System(6938):  at android.database.sqlite.SQLiteDatabase.verifyLockOwner(SQLiteDatabase.java:2227) 
07-09 11:54:05.465: E/System(6938):  at android.database.sqlite.SQLiteDatabase$1.entryRemoved(SQLiteDatabase.java:2319) 
07-09 11:54:05.465: E/System(6938):  at android.database.sqlite.SQLiteDatabase$1.entryRemoved(SQLiteDatabase.java:2315) 
07-09 11:54:05.465: E/System(6938):  at android.util.LruCache.trimToSize(LruCache.java:197) 
07-09 11:54:05.465: E/System(6938):  at android.util.LruCache.evictAll(LruCache.java:285) 
07-09 11:54:05.465: E/System(6938):  at android.database.sqlite.SQLiteDatabase.deallocCachedSqlStatements(SQLiteDatabase.java:2280) 
07-09 11:54:05.465: E/System(6938):  at android.database.sqlite.SQLiteDatabase.closeClosable(SQLiteDatabase.java:1252) 
07-09 11:54:05.465: E/System(6938):  at android.database.sqlite.SQLiteDatabase.finalize(SQLiteDatabase.java:2040) 
07-09 11:54:05.465: E/System(6938):  at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:182) 
07-09 11:54:05.465: E/System(6938):  at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:168) 
07-09 11:54:05.465: E/System(6938):  at java.lang.Thread.run(Thread.java:856) 
+1

일부 코드는 도움이 될 것입니다. 어떻게 열어서 특히 데이터베이스를 닫고 있습니까? – RvdK

답변

0

문제는에서 onCreate에() 귀하의 로그는 궁극적으로 오직 거기를 가리키고 있습니다. 당신이 당신의 클래스를 확장하는 코드를 확인하십시오 : 당신이 당신의 테이블이나 로그가 가리키는 코드를 작성하는 코드를 제공하시기 바랍니다 해결할 수없는 경우

extends SQLiteOpenHelper 

합니다. 왜냐하면 그것의 단지 맹목적인 추측.

+0

아래 내 코드 : –

+0

ourDatabase.close()가 없습니다. 당신이 그것을 결코 닫지 않았기 때문에 그것이 문제입니다. 확인하고 알려주십시오. – iabhi

+0

또한 정확한 질문을 삭제하십시오. "Android Sqlite 추출 데이터가 없습니다"누군가 부정적인 투표를하기 전에 – iabhi

관련 문제