2013-03-30 2 views
1

내 애플 리케이션에서 SQLite - DB를 생성/읽기와 함께 몇 가지 어려움을 실행했습니다.안드로이드 애플 리케이션에서 SQLite - DB를 동결

나를 옆에있는 here으로 만들었습니다. 데이터베이스를 (예, 웃어) 내 지뢰밭 앱에 구현하여 폭, 높이 및 광산 개수를 놀이터에 저장하고 싶었습니다.

내가 같은 테이블의 생각 : 나는이 코드를 가지고이를 위해

+-----------+--------+-----+ 
| Field  | Type | Key | 
+-----------+--------+-----+ 
| _bez  | text | pri | 
| _x  | int |  | 
| _y  | int |  | 
| _a  | int |  | 
+-----------+--------+-----+ 

, 내 생각이 지금까지 모두 잘해야한다 :

public class SettingsDB extends SQLiteOpenHelper { 
//DB-Info 
private static final int DATENBANK_VERSION = 1; 
private static final String DATENBANK_NAME = "minesweeper.db"; 
private static final String TABLE_SETTINGS = "settings"; 
//Spalten der Settings-Tabelle 
private static final String KEY_BEZ = "bez"; 
private static final String KEY_X = "x"; 
private static final String KEY_Y = "y"; 
private static final String KEY_A = "a"; 

public SettingsDB(Context context) { 
    super(context, DATENBANK_NAME, null, DATENBANK_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    String createDB; 
    createDB = "CREATE TABLE " + TABLE_SETTINGS + "(" 
      + KEY_BEZ + " TEXT PRIMARY KEY, " 
      + KEY_X + " INTEGER, " 
      + KEY_Y + " INTEGER, " 
      + KEY_A + " INTEGER)"; 
    db.execSQL(createDB); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_SETTINGS); 
    onCreate(db); 
} 
} 

내가 원하는이 테이블을 보통, 네 가지 표준 행, 쉬운 값, 중간 값, 있었음 모드 및 현재 값 (레이아웃의 세 EditText 필드를 통해 사용자가 변경할 수 있음) 값으로 채 웁니다.

따라서 이러한 기본 값을 (db를 작성한 직후에) 추가하고, 사용자에게 현재 값을 표시하고, 설정 값이 저장 될 때 현재 값으로 행을 갱신하는 메소드가 필요합니다.

다음

가 - 다시 혀를 기반으로 -이 있습니다

public void set_stdValues() { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues val_easy = new ContentValues(); 
     val_easy.put(KEY_BEZ, "Easy"); 
     val_easy.put(KEY_X, 10); 
     val_easy.put(KEY_Y, 10); 
     val_easy.put(KEY_A, 10); 
     db.insert(TABLE_SETTINGS, null, val_easy); 

     ContentValues val_curr = new ContentValues(); 
     val_curr.put(KEY_BEZ, "Curr"); 
     val_curr.put(KEY_X, 10); 
     val_curr.put(KEY_Y, 10); 
     val_curr.put(KEY_A, 10); 
     db.insert(TABLE_SETTINGS, null, val_curr); 

     ContentValues val_med = new ContentValues(); 
     val_med.put(KEY_BEZ, "Med"); 
     val_med.put(KEY_X, 12); 
     val_med.put(KEY_Y, 12); 
     val_med.put(KEY_A, 20); 
     db.insert(TABLE_SETTINGS, null, val_med); 

     ContentValues val_hard = new ContentValues(); 
     val_hard.put(KEY_BEZ, "Hard"); 
     val_hard.put(KEY_X, 15); 
     val_hard.put(KEY_Y, 15); 
     val_hard.put(KEY_A, 40); 
     db.insert(TABLE_SETTINGS, null, val_hard); 

     db.close(); 
    } 

    public Settings getValues(String diff) { 
     SQLiteDatabase db = this.getReadableDatabase(); 

     String[] cols = new String[] { KEY_BEZ, KEY_X, KEY_Y, KEY_A }; 
     Cursor cursor = db.query(TABLE_SETTINGS, cols, KEY_BEZ + "=?", new String[] { diff }, null, null, null, null); 
     if (cursor != null) { 
      cursor.moveToFirst(); 
     } 
     Settings settings = new Settings(cursor.getString(0), cursor.getInt(1), cursor.getInt(2), cursor.getInt(3)); 
     cursor.close(); 
     db.close(); 
     return settings; 
    } 

    // public Settings(String bez, int x, int y, int a) 
    public void setValues(Settings s) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_X, s.get_x()); 
     values.put(KEY_Y, s.get_y()); 
     values.put(KEY_A, s.get_a()); 

     db.update(TABLE_SETTINGS, values, KEY_BEZ + "=?", new String[] { "Curr" }); 
     db.close(); 
    } 

이 데이터를 DB에서 읽을 수 있어야 지점에서 정지 앱을 실행.

나는이 정보가 누군가 내가 실수 한 것을 알아낼 수 있기를 바랍니다.

미리 감사드립니다.

+0

set_stdValues ​​()가 어떤 클래스를 속하는가? –

+0

이것과 다음 두 가지는 SettingsDB –

답변

2

제거 SQLiteDatabase db = this.getWritableDatabase();db.close();set_stdValues()에서와

@Override 
public void onCreate(SQLiteDatabase db) { 
String createDB; 
createDB = "CREATE TABLE " + TABLE_SETTINGS + "(" 
     + KEY_BEZ + " TEXT PRIMARY KEY, " 
     + KEY_X + " INTEGER, " 
     + KEY_Y + " INTEGER, " 
     + KEY_A + " INTEGER)"; 
db.execSQL(createDB); 

set_stdValues() 
} 
+0

의 일부입니다. 시도해 보겠습니다.하지만 db.insert (TABLE_SETTINGS, null, val_easy); 그렇다면 문장? –

+0

무엇을 의미합니까? 그것은 set_stdValues ​​메소드에있는 것입니다. 테이블은 db.execSQL (createDB) 라인에 생성되었습니다. 그 후에 당신은 삽입 할 수 있습니다. –

+0

아, 미안, 내 편이 잘못 됐어. 트릭을 했어, 고마워! =) –

관련 문제