2012-08-30 3 views
0

sqlite db가 null 값을 받고 있으며 이유를 모르겠습니다. 내 테이블을 "기본 키"로, 내 ​​열을 "텍스트 Null"로 설정했습니다. DB는 널 (null)이 아닌 고유 한 값을 적용하고 1null 값을 허용하지 않으려면 sqlite db가 필요합니다.

DB 행보다 큰 삽입해서는 안 :

public void onCreate(SQLiteDatabase db) { 

     String sqlDataStore = "create table if not exists " + 
     TABLE_NAME_CREDENTIALS + " ("+ BaseColumns._ID + " integer primary key ," 

        + COLUMN_NAME_USERNAME + " text not null unique," 
        + COLUMN_NAME_PASSWORD + " text not null unique);"; 


     db.execSQL(sqlDataStore); 
    } 


    public static boolean Login(String username, String password) { 

     Boolean Login = true; 
     Cursor c = db.rawQuery(
       "SELECT * FROM " + TABLE_NAME_CREDENTIALS + " WHERE " 
         + COLUMN_NAME_USERNAME + " = '" + username +"' AND "+ COLUMN_NAME_PASSWORD +" = '"+ password +"'" , null); 
     if (c.getCount() > 0) { 
       Login = false; 
      } 
      c.close(); 
      return Login; 
    } 

삽입 방법 :

그것은 사실에서 오는
  private void insertCredentials(RegDetails regDetails){ 

     LoginDB androidOpenDBHelper = new LoginDB(this); 
     SQLiteDatabase sqliteDB = androidOpenDBHelper.getWritableDatabase(); 

     ContentValues contentValues = new ContentValues(); 
     contentValues.put(LoginDB.COLUMN_NAME_USERNAME, rUsername); 
     contentValues.put(LoginDB.COLUMN_NAME_PASSWORD, rPasscode); 

     long affectedColumnid = sqliteDB.insert(LoginDB.TABLE_NAME_CREDENTIALS, null, contentValues); 

     if(affectedColumnid > 1){ 
     Toast.makeText(getApplicationContext(), "Account Already Exist! Please login" + affectedColumnid, Toast.LENGTH_SHORT).show(); 
     finish(); 
     }else { 
      Toast.makeText(getApplicationContext(), "Credentials Saved! Please login" + affectedColumnid, Toast.LENGTH_SHORT).show(); 
     } 
     sqliteDB.close(); 
     finish(); 
    } 

    } 
+0

'rUsername'과'rPassword'는 어디에서 유래 되었습니까? 이것들이 EditText (또는 이와 유사한 것)에서 읽혀지면 공백 값은'null'이 아니라 빈 문자열 ('''')입니다. – Sam

+1

'if (affectedColumnid <0) {''sqliteDB.insert()'는 삽입 할 수없는 경우'-1'을 반환합니다. – zapl

답변

0

당신은하지 않는 것이 SQLite 웹 사이트에 설명 된대로 ON CONFLICT FAIL을 사용하십시오. http://www.sqlite.org/lang_conflict.html

쿼리의 예를 보려면 다음 질문을 참조하십시오. NOT NULL columns in SQLite and error catching

희망이 도움이 될 것입니다.

사이드 노트 : 긴 String을 구현하려면 StringBuilder를 사용하는 것이 좋습니다.

+0

나는 동의하지 않는다. 'NOT CONFICT '를 사용하면'not null' 제약 조건을 활성화 할 필요가 없으며 단지 오류가 발생한 후에 다른 방법으로 처리 할뿐입니다. – Sam

관련 문제