-3

DB接続と操作のための次のコードがあります:

public class DBMessagesHandler 
{

    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "Logindata";

    // Contacts table name


    private static final String TABLE_MESSAGES = "Messages";

    // Contacts Table Columns names
    private static final String KEY_ID = "id";
    private static final String KEY_MID = "mid";
    private static final String KEY_UID = "uid";
    private static final String KEY_MESSAGE = "message";
    private static final String KEY_NAME = "name";



    private DBHelper  ourHelper;
    private final Context ourContext;
    private SQLiteDatabase ourDB;

private static class DBHelper extends SQLiteOpenHelper{


        public DBHelper(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

            db.execSQL( "create table "+TABLE_MESSAGES+ " ( "+
                    KEY_MID+" integer primary key autoincrement,"  +           
                    KEY_UID+" integer NOT NULL, "+
                    KEY_MESSAGE+" TEXT NOT NULL, "+
                    ");");

        }


        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int arg2) {
            // TODO Auto-generated method stub

            db.execSQL("drop table if exists"+ TABLE_MESSAGES );
            onCreate(db);
        }



    }


    public DBMessagesHandler (Context c)
    {
        ourContext=c;

    }

    public DBMessagesHandler open() throws SQLException
    {
        ourHelper=new DBHelper(ourContext);
        ourDB=ourHelper.getWritableDatabase();
        return this;    
    }

    public void close()
    {
        ourHelper.close();
    }

     // Add Messages
    public long addMessage(int uid,String message)
    {
        ContentValues cv=new ContentValues();
        cv.put(KEY_UID, uid);
        cv.put(KEY_MESSAGE, message);

        return ourDB.insert(TABLE_MESSAGES, null, cv);
    }


    public int getCount(int uid)
    {
        String query = "select count(*) from "+TABLE_MESSAGES+ " WHERE uid=?";

        Cursor c = ourDB.rawQuery(query,null);

        return c.getCount(); 
    }


    // Add Messages
    public void deleteMessage(int uid)
    {

        String ALTER_TBL ="delete from " + TABLE_MESSAGES +
                 " where "+KEY_ID+" in (select "+ KEY_ID +" from "+ TABLE_MESSAGES+" order by _id LIMIT 5) and "+KEY_UID+" = "+uid+";";

        ourDB.execSQL(ALTER_TBL);
    }

}

私は次の方法でこのコードを呼び出しています。

 DBMessagesHandler messageEntry=new DBMessagesHandler(Message.this);
                    messageEntry.open();
                    int cnt=messageEntry.getCount(Integer.parseInt(uid));
                    messageEntry.deleteMessage(Integer.parseInt(uid));
messageEntry.close();

しかし、コードが到達していないことがわかりました:

@Override
            public void onCreate(SQLiteDatabase db) {
                // TODO Auto-generated method stub

                db.execSQL( "create table "+TABLE_MESSAGES+ " ( "+
                        KEY_MID+" integer primary key autoincrement,"  +           
                        KEY_UID+" integer NOT NULL, "+
                        KEY_MESSAGE+" TEXT NOT NULL, "+
                        ");");

したがって、logcat を見ると、そのようなテーブルが存在しないというエラー メッセージが表示されます。

私を助けてください。

最初に呼び出します: public DBMessagesHandler (コンテキスト c)

次に: public DBMessagesHandler open() が SQLException をスローします。

次に: public DBHelper(Context context)

次に: public int getCount(int uid)

ログキャット:

08-31 15:43:14.634: I/Database(380): sqlite が返されました: エラー コード = 1、msg = そのようなテーブルはありません: メッセージ

4

2 に答える 2

1

DATABSE_VERSIONを 3 に更新するだけです...

于 2013-08-31T10:19:46.803 に答える
1

あなたのコード oncreate には若干の変更が必要だと思います。私のコードを投稿し、必要に応じて編集します。

@Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        String DATABASE_CREATE_PROJ = "CREATE TABLE " +  DATABASE_TABLE_PROJ + "( "
                + CATEGORY_COLUMN_ID + " integer primary key, "
                + CATEGORY_COLUMN_TITLE + " text not null, " + CATEGORY_COLUMN_CONTENT + " text not null, " + CATEGORY_COLUMN_COUNT + " integer, " + CATEGORY_COLUMN_DATE + " integer );" ;
                db.execSQL(DATABASE_CREATE_PROJ); 
}

テーブルを追加するとデータベースが更新されないため、必要に応じてデータベース名を変更します。その場合、データベース名を変更し、バージョンも確認する必要があります

于 2013-08-31T10:10:42.643 に答える