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。問題はどこですか?

4

3 に答える 3

3

sqlite には varchar 型はありません。こちらを参照してください。代わりにテキストを使用してください。

于 2011-04-22T10:15:30.717 に答える
0

varchar はテキストに変換されます... vladimir リンクから:

列の宣言された型に文字列「CHAR」、「CLOB」、または「TEXT」が含まれている場合、その列には TEXT アフィニティがあります。VARCHAR 型には文字列 "CHAR" が含まれているため、TEXT アフィニティが割り当てられていることに注意してください。

問題は、最初の実行でデータベースを作成し、異なるCreateステートメントがあったことです...

Android の設定からアプリ データを削除するか、DATABASE_VERSION を変更します

于 2011-04-22T10:22:02.420 に答える
0

I don't see where 'DATABASE_TABLE' is coming from.

Also, you should use the "rawQuery()", "query()"-Methods or a "SQLiteStatement" to bind parameters into your SQL-Statement.

And last but not least, SQLite doesn't know any 'varchar'. Check here for all Data types: Link

于 2011-04-22T10:18:41.393 に答える