-3

クラッド操作を実行するという点で、Androidでアプリケーションを作成しました。アプリではデータベースファイルは正常に作成されましたが、テーブルの作成中のエラーとそれに続くのはLogcatエラーとデータベースアダプタクラスです。

Logcatエラー

01-17 13:03:59.139: E/SQLiteLog(1036): (1) table timerecordsnew1 has no column named note
01-17 13:03:59.309: E/SQLiteDatabase(1036): Error inserting note=asdfsdfadf
01-17 13:03:59.309: E/SQLiteDatabase(1036): android.database.sqlite.SQLiteException: table timerecordsnew1 has no column named note (code 1): , while compiling: INSERT INTO timerecordsnew1(note) VALUES (?)
01-17 13:03:59.309: E/SQLiteDatabase(1036):     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)

以下は私のデータベースアダプタクラスです

public class TimeTrackerAdapter {

    private static final int DATABASE_VERSION = 4;
    private static final String DATABASE_NAME = "timetrackernew1.db";
    //Table
    private static final String TABLE_NAME = "timerecordsnew1";

    //Table Column Variable
    public static final String TIMERECORDS_COLUMN_ID = "id";
    public static final String TIMERECORDS_COLUMN_TIME = "time";
    public static final String TIMERECORDS_COLUMN_NOTE = "note";

    private TimeTrackerOpenHelper openHelper;
    private SQLiteDatabase sqlDb;

    //Database creation sql statement
    private static final String SQL_CREATE_ENTRIES = "CREATE TABLE " +  
            TABLE_NAME + "(" + TIMERECORDS_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
            TIMERECORDS_COLUMN_TIME + " TEXT " + TIMERECORDS_COLUMN_NOTE + " TEXT);";

    public TimeTrackerAdapter(Context context) {
        openHelper = new TimeTrackerOpenHelper(context);
        sqlDb = openHelper.getWritableDatabase();
    }

    //to insert data into database
    public void saveRecords(String t, String n) {

        ContentValues contentValues = new ContentValues();
        contentValues.put(TIMERECORDS_COLUMN_NOTE,t);
        contentValues.put(TIMERECORDS_COLUMN_NOTE, n);

        sqlDb.insert(TABLE_NAME, null, contentValues);
    }
    //get fetch the all data
    public Cursor getAllRecords() {

        return sqlDb.rawQuery("select * from " + TABLE_NAME, null);

    }

    // inner class
    private class TimeTrackerOpenHelper extends SQLiteOpenHelper {

        public TimeTrackerOpenHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            // TODO Auto-generated constructor stub

        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            System.out.println("create statement"+SQL_CREATE_ENTRIES);
            try
            {
                db.execSQL(SQL_CREATE_ENTRIES);

            }catch(SQLiteException sql)
            {
                sql.printStackTrace();
            }
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
            onCreate(db);
        }
    }

}

誰かが私がこのエラーを解決するのを手伝ってください。

ありがとうございます

4

4 に答える 4

1

SQL で 2 つの列の間にコンマがありませんでした:

private static final String SQL_CREATE_ENTRIES = "CREATE TABLE " +  
        TABLE_NAME + "(" + TIMERECORDS_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        TIMERECORDS_COLUMN_TIME + " TEXT **,%Comma goes here%** " + TIMERECORDS_COLUMN_NOTE + " TEXT);";
于 2013-01-17T13:09:24.463 に答える
0

create tableDDLにカンマがないようです。(TIMERECORDS_COLUMN_TIME列に。。

から:

   private static final String SQL_CREATE_ENTRIES = 
        "CREATE TABLE " + TABLE_NAME + "(" + 
           TIMERECORDS_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
           TIMERECORDS_COLUMN_TIME + " TEXT " + 
           TIMERECORDS_COLUMN_NOTE + " TEXT);";

   private static final String SQL_CREATE_ENTRIES = 
         "CREATE TABLE " + TABLE_NAME + "(" + 
            TIMERECORDS_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
            TIMERECORDS_COLUMN_TIME + " TEXT, " + 
            TIMERECORDS_COLUMN_NOTE + " TEXT);";
于 2013-01-17T13:13:01.840 に答える
0

TIMERECORDS_COLUMN_TIME + " TEXT " == TIMERECORDS_COLUMN_TIME + " TEXT, "

「、」文字を忘れています。

次回は例外を読み取り、コードをより正確に調べます。

于 2013-01-17T13:09:46.653 に答える
0

ここ:

        TIMERECORDS_COLUMN_TIME + " TEXT " + TIMERECORDS_COLUMN_NOTE + " TEXT);";

それらを区切るコンマなしで「time TEXT note TEXT」が得られます。

Sqlite はそれを構文エラーとして検出しません。「型指定されていない」データベースとして開始し、次に型アフィニティのサポートを追加しましたが、列の型指定にあらゆる種類のジャンクを許可し続けました。

于 2013-01-17T13:13:36.270 に答える