2011-06-14 86 views
0

我想把SQL數據庫放在一起,但不知道如何使它工作。意圖是有多個列,一些是整數,一些是在單元格中有字符串。對於這個應用程序,我希望重複是一個整數,並鍛鍊成一個字符串。這裏是代碼的相關部分:SQL數據庫類型問題

public static final String KEY_ROWID = "_id"; 
public static final String KEY_DATE = "date"; 
public static final String KEY_EXERCISE = "exercise"; 
public static final String KEY_REPS = "repetitions"; 

private static final String DATABASE_CREATE = "create table " + DATABASE_TABLE + " (" 
    + KEY_ROWID + " integer primary key autoincrement, " 
    + KEY_DATE + " text not null, " 
    + KEY_EXERCISE + " text not null, " 
    + KEY_REPS + " int not null, " 

public long createExercise(String exercise, int reps) { 
    ContentValues initialValues = new ContentValues(); 
    initialValues.put(KEY_DATE, date); 
    initialValues.put(KEY_EXERCISE, exercise); 
    initialValues.put(KEY_REPS, reps); 

return mDb.insert(DATABASE_TABLE, null, initialValues); 
} 

我把數據放在這個表中使用測試字符串。然後我嘗試用以下查詢來提取數據:

public Cursor graphQuery(String exercise, String workout) { 
    return mDb.query(DATABASE_TABLE, new String[] {KEY_DATE, KEY_REPS}, null, null,  
     null, null, null); 

從那裏我嘗試將數據放入數組中,但它給了我一個錯誤。它告訴我在我宣佈它時將KEY_REPS作爲一個數字。但是,如果我將KEY_REPS聲明爲數字,它不會讓我構建數據集。

Cursor cursor = mDbHelper.graphQuery(currentexercise, currentworkout); 
startManagingCursor(cursor); 
Number[] reps = new Number[]{workoutDbAdapter.KEY_REPS}; //error here 

我覺得我缺少如何創建我的數據庫的關鍵部分。誰能幫忙?

從書中我試圖按照代碼(除使用整數)(從第一個答案評論)話雖這麼說,如果有人知道一個很好的網站,教的SQLite的,因爲它適用於Android的

private void fillData() { 
    Cursor remindersCursor = mDbHelper.fetchAllReminders(); 
    startManagingCursor(remindersCursor); 
// Create an array to specify the fields we want (only the TITLE) 
    String[] from = new String[]{RemindersDbAdapter.KEY_TITLE}; 

那將是真棒。我唯一能找到的是通用SQL站點,它們並不是非常有用。

+0

對於這一點,你問任何問題:請複製並粘貼錯誤消息的準確* *,因爲他們出現了。簡單地描述錯誤信息並不像粘貼它有用。與代碼類似 - 我不確定是否按照您定義的方式顯示「createExercise」,因爲「date」未定義。 – 2011-06-14 17:11:23

回答

2
Cursor cursor = mDbHelper.graphQuery(currentexercise, currentworkout); 
startManagingCursor(cursor); 
Number[] reps = new Number[]{WorkoutDbAdapter.KEY_REPS}; //error here 

這裏的代碼不會做你想要的東西(我想)。你需要遍歷遊標並從那裏獲取數據。我很確定,如果你遵循Android示例代碼來使用數據庫,那麼WorkoutDbAdapter.KEY_REPS是一個包含代表列名稱的字符串常量。

嘗試做這樣的事情:

List<Number> allReps = new ArrayList<Number>(); 
Cursor cursor = mDbHelper.graphQuery(currentexercise, currentworkout); 
while (cursor.moveToNext()) { 
    int reps = cursor.getInt(cursor.getColumnIndexOrThrow(mDbHelper.KEY_REPS)); 
    allReps.add(reps); 
} 
Number[] repsArray = allReps.toArray(new Number[]{}); 
// do stuff with repsArray and don't forget to close cursor 
+0

我正在關注一本我建立的書的例子。他們的代碼工作,但它使用字符串,我試圖使用整數。 新代碼粘貼在問題底部 – easycheese 2011-06-14 16:48:26

+0

沒有本書或代碼的其餘部分,我猜他們正在構建一個字符串數組的列名傳遞到另一個查詢。繼續保持以下示例,但替換:'Number [] reps = new Number [] {KEY_REPS};'用'String [] repsCol = new String [] {KEY_REPS};' – Pedantic 2011-06-14 16:55:21

+0

問題是我需要一個Number數組在我的下一個方法調用中使用。我找不到一個簡單的方法將字符串數組轉換爲數字數組,所以我試圖讓數據庫列爲整數,但在這方面也失敗了。 (我原來有字符串,它的工作)。 Oooh .... SQL數據庫是否將所有內容存儲爲字符串? – easycheese 2011-06-14 16:58:42