복붙노트

[SQL] 어떻게 sqlite가 테이블 안에 데이터가 있는지 확인할 수 있습니까?

SQL

어떻게 sqlite가 테이블 안에 데이터가 있는지 확인할 수 있습니까?

편집하다, 보다 약간 아래에 답변을 기반으로 코드를 변경,하지만 여전히 작동 없어요. 또한 getCount 0> 반환 있다면 말해 로그 메시지를 추가하고, 내가 supect 뭔가를해야만 내 쿼리 잘못 될 수 있도록이었다? 또는 커서 내 사용 ..

나는 테이블을 만들었습니다, 그리고 내가 (배열에 저장되어있는) 일부 삽입 문을 실행하려면 비어 있다면 난 그 비어있는 경우 여부를 확인하시기 바랍니다.

내가 오류가없는 동안 내가이 일을하지 않는 것을 볼 수 있습니다 밖으로 .DB 파일을 풀 때 다음은 내 코드입니다. 어떻게이 문제를 접근하는 것?

public void onCreate(SQLiteDatabase db) {
        Log.i("DB onCreate", "Creating the database...");//log message
        db.execSQL(createCATBUDTAB);
        db.execSQL(createTWOWEETAB);
        try{
            Cursor cur = db.rawQuery("SELECT COUNT(*) FROM CAT_BUD_TAB", null);
        if (cur.getCount() > 0){
            Log.i("DB getCount", " getcount greater than 0");//log message
            //do nothing everything's as it should be
        }
        else{//put in these insert statements contained in the array
            Log.i("DB getCount", " getcount less than 0, should read array");//log message
            for(int i=0; i<13; i++){
                db.execSQL(catInsertArray[i]);
            }
        }
        }catch(SQLiteException e){System.err.println("Exception @ rawQuery: " + e.getMessage());}
    }

이 꽤 바보 같은 질문이나 접근 방식 인 경우 죄송합니다, 나는이 모든 새로운입니다. 모든 답변은 많이 감사합니다!

해결법

  1. ==============================

    1.기존 테이블에 쿼리 SELECT COUNT (*)는 NULL을 반환해서는 안됩니다. 행이 테이블에 존재하지 않는 경우,이 값 제로를 포함하는 하나 개의 행을 반환해야합니다.

    기존 테이블에 쿼리 SELECT COUNT (*)는 NULL을 반환해서는 안됩니다. 행이 테이블에 존재하지 않는 경우,이 값 제로를 포함하는 하나 개의 행을 반환해야합니다.

    반대로, 아닌 값을 가진 행은 비어 있지 있음을 나타냅니다.

    두 경우 모두, 한 행은 항상 통과 것을 의미 반환해야

    //do nothing everything's as it should be
    

    부분.

    있는 그대로를 해결하려면, (당신이 불필요한 가능성이 조금 비효율적 간단하기 때문에 선택 COLUMN_NAME 싶지 않아) 쿼리를 둡니다. (그래서 조심 단지 내 머리에서 테스트)는 항상 하나 개의 행을 반환합니다 SELECT COUNT (*)로두고, 다음과 같은 코드를 사용 :

    Cursor cur = db.rawQuery("SELECT COUNT(*) FROM CAT_BUD_TAB", null);
    if (cur != null) {
        cur.moveToFirst();                       // Always one row returned.
        if (cur.getInt (0) == 0) {               // Zero count means empty table.
            for (int i = 0; i < 13; i++) {
                db.execSQL (catInsertArray[i]);
            }
        }
    }
    
  2. ==============================

    2.rawQuery는 첫 번째 항목 앞에 위치하는 커서 객체를 반환 (여기에 대한 추가 정보를 참조하십시오) SELECT COUNT (*)는 항상 결과를 반환합니다 (테이블을 고려하는 것은 존재)

    rawQuery는 첫 번째 항목 앞에 위치하는 커서 객체를 반환 (여기에 대한 추가 정보를 참조하십시오) SELECT COUNT (*)는 항상 결과를 반환합니다 (테이블을 고려하는 것은 존재)

    내가 할 것입니다 그래서 :

    if (cur != null){
        cur.moveToFirst();
        if (cur.getInt(0) == 0) {
          // Empty 
        }
    
    }
    
  3. ==============================

    3.paxdiablo 말했듯이, 커서는 null이되지 않습니다. 당신이 할 수있는 것은이 같은 시도이다 :

    paxdiablo 말했듯이, 커서는 null이되지 않습니다. 당신이 할 수있는 것은이 같은 시도이다 :

    if (cur != null && cur.getCount() > 0){
         // do nothing, everything's as it should be
    }
    

    편집하다

    사실 나는 db.query을 사용했다 () 그리고 그것은 나를 위해 일했습니다. 나는 이걸했다.

    cursor = db.query(TABLE_NAME, new String[] { KEY_TYPE }, null, null, null, null, null);
    if (cursor != null && cursor.getCount() > 0)
    {
       retVal = true;
    }
    

    TABLE_NAME 내 테이블과 KEY_TYPE 내 럼 이름이었다

  4. ==============================

    4.이 기록 권리를 가지고 있다면 당신은 의미합니까? 나는이를 시도하고 날 위해 일입니다

    이 기록 권리를 가지고 있다면 당신은 의미합니까? 나는이를 시도하고 날 위해 일입니다

        dbCur = db.rawQuery("select * from player", null);
        Log.e("a", ""+dbCur.getCount());
    

    이 테이블의 합계를 표시합니다, 테이블에 기록이없는 경우, 그것은 0을 표시합니다.

  5. ==============================

    5.당신은 수동으로 확인할 수 있습니다 :

    당신은 수동으로 확인할 수 있습니다 :

    sqlite> Select * from table name
    

    모든 데이터는 해당 테이블이 표시됩니다 존재합니다.

    더 이상의 쿼리에 대한 의견을 주시기 바랍니다.

  6. ==============================

    6.검사의 나의 방법은 다음과 같이했다 :

    검사의 나의 방법은 다음과 같이했다 :

    Cursor cursor = db.query(DbHelper.DB_NAME,DbHelper.DB_C_ID_ONLY,null,null,null,null,null);
    if(cursor.isAfterLast())
    

    나는 내 경우에는 자동 증가되는 _id 항목을 얻을. DB를 사실 확인 반환을위한 isAfterLast, 비어있는 경우.

  7. ==============================

    7.이 쿼리에 대해 무엇?

    이 쿼리에 대해 무엇?

    SELECT CASE WHEN EXISTS (SELECT * FROM CAT_BUD_TAB) THEN 1 ELSE 0 END
    

    그것은 빠른 약간의 그 SELECT COUNT (*).

    추신 900 만 개 행이있는 테이블에 검사하였습니다.

  8. ==============================

    8.이미 언급 한 또 다른 대안은 기능을 사용하는 것입니다  드 클래스 DatabaseUtils에서 queryNumEntries.

    이미 언급 한 또 다른 대안은 기능을 사용하는 것입니다  드 클래스 DatabaseUtils에서 queryNumEntries.

    다음 예는 수있다 :

    public boolean checkEmpty(SQLiteDatabase db, String table){
            return DatabaseUtils.queryNumEntries(db, table) == 0;
    }
    
  9. ==============================

    9.자바 프로그램이 나를 위해 일한 :

    자바 프로그램이 나를 위해 일한 :

        ResultSet rst = stm.executeQuery("SELECT * from Login");
               int i = 0;
               while(rst.next()){
                   ++i;
                   System.out.println(i);
               }
               System.out.println(i);
               if(i<1){
                   //No data in the table
               }
               else{
                   //data exists
               }
    
  10. ==============================

    10.여기에 내가 무슨 짓을했는지 ...

    여기에 내가 무슨 짓을했는지 ...

    Cursor cur = db.rawQuery("SELECT count(*) FROM " + SQLHelper.TABLE_CART, null);
    if (cur != null && cur.moveToFirst() && cur.getInt(0) > 0) {
        Log.i(getClass().getName(), "table not empty");
    } 
    else {
        Log.i(getClass().getName(), "table is empty");
    }
    
  11. ==============================

    11.내가 이런 짓을 수 있도록 내 애플, 위의 코드를 시도하고 충돌 된 지금은 완벽하게 작동하고!

    내가 이런 짓을 수 있도록 내 애플, 위의 코드를 시도하고 충돌 된 지금은 완벽하게 작동하고!

    public boolean checkIfEmpty()
    {
        Cursor cursor = getDatabase().query(DatabaseHelper.Products.TABLE,
                DatabaseHelper.Products.COLUMNS, null, null, null, null, null);
    
        if (cursor != null)
        {
            try
            {
                //if it is empty, returns true.
                cursor.moveToFirst();
                if (cursor.getInt(0) == 0)
                    return true;
                else
                    return false;
            }
    
            //this error usually occurs when it is empty. So i return true as well. :)
            catch(CursorIndexOutOfBoundsException e)
            {
                return true;
            }
    
        }
        return false;
    }
    
  12. ==============================

    12.이 옵션을 사용합니다 :

    이 옵션을 사용합니다 :

    public Boolean doesRecordExist(String TableName, String ColumnName, String ColumnData) {
        String q = "Select * FROM "+TableName+" WHERE "+ColumnName+"='"+ColumnData+"';";
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(q, null);
        if (cursor.moveToFirst()) {
            return true;
        } else {
            return false;
        }
    }
    

    if (doesRecordExist("student", "name", "John") == true)
     {
     //Do Something
     } else { //Do something
     }
    

    사용자의 용도에 따라이 수정 :

    String q = "Select * FROM "+TableName+" WHERE "+ColumnName+"='"+ColumnData+"';";
    
  13. ==============================

    13.

    public boolean isEmpty(String TableName){
    
    SQLiteDatabase database = this.getReadableDatabase();
    return (int) DatabaseUtils.queryNumEntries(database,TableName) == 0;
    }
    
  14. from https://stackoverflow.com/questions/4397757/how-can-i-check-to-see-if-my-sqlite-table-has-data-in-it by cc-by-sa and MIT license