2011-04-22 25 views
0

這是我的數據庫類表格仍然無法創建。問題是什麼?

public class ProgramDbAdapter{ 

public static final String KEY_ROWID = "_id"; 
public static final String KEY_PROGRAM_TITLE = "ProgramTitle"; 
public static final String KEY_PROGRAM_DATE = "ProgramDate"; 
public static final String KEY_PROGRAM_TIME = "ProgramTime"; 
public static final String KEY_PROGRAM_CHANNEL = "ProgramChannel"; 
private static final String DATABASE_CREATE = 
    "CREATE TABLE " + DATABASE_TABLE + " (" + "_id integer primary key autoincrement, " 
    + "ProgramTitle text, " + "ProgramDate varchar(20), " 
    + "ProgramTime varchar(20), " + "ProgramChannel text)"; 
private static final String DATABASE_UPGRADE = "DROP TABLE IF EXISTS " + DATABASE_TABLE; 

private static class DatabaseHelper extends SQLiteOpenHelper { 
    DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db){ 
     db.execSQL(DATABASE_CREATE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
       + newVersion + ", which will destroy all old data"); 
     db.execSQL(DATABASE_UPGRADE); 
     onCreate(db); 
    } 
} 
public ProgramDbAdapter open() throws SQLException{ 
    mDbHelper = new DatabaseHelper(mcontext); 
    mDb = mDbHelper.getWritableDatabase(); 
    return this; 
} 
public long CreateData(String ProgramTitle, String ProgramDate, String ProgramTime, String ProgramChannel){ 
    ContentValues initialvalues = new ContentValues(); 
    initialvalues.put(KEY_PROGRAM_TITLE, ProgramTitle); 
    initialvalues.put(KEY_PROGRAM_DATE, ProgramDate); 
    initialvalues.put(KEY_PROGRAM_TIME, ProgramTime); 
    initialvalues.put(KEY_PROGRAM_CHANNEL, ProgramChannel); 
    return mDb.insert(DATABASE_TABLE, null, initialvalues); 
} 
} 

這是我的主類

public class Program extends ExpandableListActivity{ 
    public void onCreate(Bundle savedInstanceState) { 
     mDbHelper = new ProgramDbAdapter(this); 
     mDbHelper.open(); 
     mDbHelper.CreateData("a","a","a","a"); 
    } 
} 

當我調用open()和createdata功能,logcat的告訴我no such table:Program。問題在哪裏?

+0

的可能重複[爲什麼不能創建該表?](http://stackoverflow.com/questions/5752694/why-i-cannot-create-this-table) – trashgod 2011-04-22 12:14:23

+0

那一個我解決了問題是重複列,現在這是我解決重複列後的問題但仍然無法創建表格 – alan 2011-04-24 13:14:58

回答

3

sqlite中沒有varchar類型,請參閱here。改爲使用文字。

+0

你不是不得不使用文本......看我的回答 – Selvin 2011-04-22 10:28:27

0

我看不到'DATABASE_TABLE'來自哪裏。

此外,你應該使用「rawQuery()」,「查詢()」 - 方法或「SQLiteStatement」將參數綁定到你的SQL語句。

最後但並非最不重要,SQLite不知道任何「varchar」。弗拉基米爾鏈接Link

+0

SQLite確實知道varchar ... se e我的回答 – Selvin 2011-04-22 10:27:22

+0

'private static final String DATABASE_TABLE =「Program」;' – alan 2011-04-23 12:43:16

0

VARCHAR轉換爲文字... :

如果列 聲明的類型包含字符串的「CHAR」, 「這裏檢查所有數據類型CLOB「或」TEXT「,那麼該列有 TEXT親和力。請注意,類型 VARCHAR包含字符串「CHAR」,因此 被分配了TEXT關聯。

問題,就是你在第一次運行時創建數據庫,並有不同的創建statment ...

刪除應用程序從Android設置數據或更改DATABASE_VERSION

+0

不過,我寧願直接在創建查詢中使用'TEXT'-Data類型。 – 2011-04-22 10:34:06

+0

所以表不能創建,因爲varchar? 但是,DATABASE_VERSION也會影響結果嗎? – alan 2011-04-23 12:42:09

+0

不,你可以使用varchar,我說你在添加db.execSQL(DATABASE_CREATE)之前運行了你的應用程序;到onCreate實現(或更改DATABASE_CREATE中的表名)...更改DATABASE_VERSION將重新創建數據庫...僅當數據庫不存在時才調用onCreate ...您需要通過changeng db版本強制重新創建數據或刪除數據 – Selvin 2011-04-23 21:51:37

相關問題