2011-03-13 50 views
0

我正在處理使用三列數據庫的應用程序。以下是我創建語句:列不存在錯誤

public static final String KEY_ID = "_id"; 
public static final String KEY_NAME = "name"; 
public static final String KEY_GAMES = "games"; 
public static final String KEY_WINS = "wins"; 
private static final String DATABASE_CREATE = "create table " 
     + DATABASE_TABLE + " (" 
     + KEY_ID + " integer primary key autoincrement, " 
     + KEY_NAME + " text not null, " 
     + KEY_GAMES + " integer, " 
     + KEY_WINS + " integer);"; 

現在,我通過執行以下操作在數據庫中的數據映射到ListView:

Cursor notesCursor = mDbHelper.getAllEntriesCursor(); 
    startManagingCursor(notesCursor); 
String[] from = new String[]{DbAdapter.KEY_NAME, DbAdapter.KEY_WINS, DbAdapter.KEY_GAMES}; 
int[] to = new int[]{R.id.names, R.id.wins, R.id.games}; 
SimpleCursorAdapter notes = new SimpleCursorAdapter(this, R.layout.win_games, notesCursor, from, to); 
setListAdapter(notes); 

當我運行,下面的錯誤是給我:

java.lang.IllegalArgumentException: column 'wins' does not exist 

當我通過命令行shell到仿真器並顯示數據庫的模式,則顯示以下內容:

CREATE TABLE namesTable (_id integer primary key autoincrement, name text not null, games integer, wins integer); 

所以,根據這一點,看起來'勝利'列在那裏,但我仍然收到錯誤。任何想法爲什麼這是怎麼回事?

+0

請添加您用於創建'notesCursor'的代碼。也許你使用了錯誤的表格。 – ccheneson

+0

我按照要求添加了代碼。 – ariets

+0

有趣的部分是'getAllEntriesCursor()'內部的東西 - 檢查這是否是正確的數據庫,右表和右列(在拼寫錯誤的情況下) – ccheneson

回答

0

您提供的代碼看起來不錯。所以我懷疑你在之前錯過了,所以你的DB真的沒有wins列。檢查你如何創建你的數據庫。

+0

請您詳細說明一下嗎?謝謝。 – ariets

+0

隨着你的應用工具的外部,你可以檢查你的數據庫真的有'勝利'列?我猜你正在使用Eclipse,然後可以從模擬器中提取db文件,並通過某些桌面SQLime查看器查看其內容。還有一個命令行工具,可以查看你的數據庫 - http://developer.android.com/intl/zh-CN/guide/developing/tools/adb.html#sqlite。 –

+0

另一個想法 - 你有你的應用程序中唯一的桌子?您可以確定在創建列表適配器之前創建了數據庫嗎? –

0

創建數據庫這樣

private static final String DATABASE_CREATE = "create table " 
    + DATABASE_TABLE + " (" 
    + KEY_ID + " integer primary key autoincrement," 
    + KEY_NAME + " text not null," 
    + KEY_GAMES + " integer," 
    + KEY_WINS + " integer)"; 

注列名之間的空間分隔和注意到分號(;)已被刪除。