Android数据库问题

Android数据库问题,android,android-sqlite,Android,Android Sqlite,我正在创建一个应用程序,在这个应用程序中,我从一个不同的活动调用我的数据库,但我不断从数据库方面得到各种各样的错误。起初,我得到了一份工作 “SQLiteException无此类数据” 当我删除我的应用程序并重新安装时,它现在 “android.database.sqlite.SQLiteConstraintException:错误代码19: 约束失败“ 我不知道该怎么办了。在创建数据库的过程中,我经历了很多不同的例子,但我不知道我是否遗漏了什么?。。以下是我的数据库端代码: import an

我正在创建一个应用程序,在这个应用程序中,我从一个不同的活动调用我的数据库,但我不断从数据库方面得到各种各样的错误。起初,我得到了一份工作

“SQLiteException无此类数据”

当我删除我的应用程序并重新安装时,它现在

“android.database.sqlite.SQLiteConstraintException:错误代码19: 约束失败“

我不知道该怎么办了。在创建数据库的过程中,我经历了很多不同的例子,但我不知道我是否遗漏了什么?。。以下是我的数据库端代码:

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;


public class DBAdapter {

    private static final String DATABASE_NAME = "MemoData.db";
    private static final int DATABASE_VERSION = 1;
    public static final String DATABASE_TABLE = "Memo";

    public static final String KEY_ID = "_id";
    public static final String NAME = "Title";
    public static final String START_DATE = "start_date";
    public static final String END_DATE = "end_date";
    public static final String NOTES = "notes";

    private static final String TAG = "DBAdapter";

    private static final String DATABASE_CREATE = "create table Memo (_id integer primary key autoincrement,"   
        + "Title text not null, start_date text not null,"
        + "end_date text not null, "
        + "notes text not null);";

    private final Context context;   
    private DBHelper dbhelper;
    private SQLiteDatabase db;

    public DBAdapter(Context context) {
        this.context = context;
        dbhelper = new DBHelper(context);
    }

    private static class DBHelper extends SQLiteOpenHelper {

        DBHelper(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 oold data will be lost");
            db.execSQL("DROP TABLE IF EXITS Memo");
            onCreate(db);
        }
    }

    public DBAdapter open()throws SQLException {
        db = dbhelper.getWritableDatabase();
        return this;
    }

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

  public long createItem(String Title, String start_date,String end_date,String notes){
             open();
            ContentValues initialValues = new ContentValues();
            initialValues.put(NAME, Title);
            initialValues.put(START_DATE, start_date);
            initialValues.put(END_DATE, end_date);
            initialValues.put(NOTES, notes);

            return db.insert(DATABASE_TABLE, null, initialValues);
            }

      public Cursor retrieveItems(){
            SQLiteDatabase db = dbhelper.getWritableDatabase();
            String[] resultColumns = new String[] {NAME,START_DATE,END_DATE,NOTES };     
     Cursor cursor = db.query(DATABASE_TABLE, resultColumns, null, null, null, null, null);

            Integer cindex = cursor.getColumnIndex("Title");
            String result = "Result = ";

            if(cursor.moveToFirst()){
                do {
                    result += cursor.getString(cindex)+ "-";
                }while(cursor.moveToNext());
            }
            return cursor;
        }
}
以下是主要的错误输出:

08-23 22:38:17.104: ERROR/Database(775): Error inserting notes=Notes: end_date=Due Date: Title=Name of Item: start_date=Start Date:
08-23 22:38:17.104:ERROR/Database(775): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed

08-23 22:38:17.104: ERROR/Database(775):at android.database.sqlite.SQLiteStatement.native_execute(Native Method)

08-23 22:38:17.104: ERROR/Database(775):at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:66)

08-23 22:38:17.104: ERROR/Database(775):at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1313)

08-23 22:38:17.104: ERROR/Database(775):at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1173)

08-23 22:38:17.104: ERROR/Database(775):at com.Memo.DBAdapter.createItem(DBAdapter.java:94)

08-23 22:38:17.104: ERROR/Database(775):at com.Memo.NewItem.save(NewItem.java:365)

在onUpgrade事件中,您正在删除表DATABASE\u名称,但这不应该是DATABASE\u table吗


没有什么(除此之外)让我吃惊,当您实例化DBAdapter对象时,是否遇到了这个错误?错误发生在onCreate事件中还是其他地方?

请修复此代码块中的双空格。这是不可读的。谢谢你指出,我已经改正了。错误来自createItem()方法。它在值上给出了一个“错误插入”。对不起,我已经清理了代码并添加了主要错误消息。这就是我得到的,我不知道为什么。我能看到的唯一限制是所有东西都是“非空的”。虽然错误消息使它看起来像所有东西都有一个值,但我会再次检查它。此外,我还了解到,如果有一些锁,有时会发生这种情况。查看您的代码,它与打开数据库的方式不一致,有时使用局部变量,有时使用成员变量,您需要确保在完成时调用close()。我不认为这是个问题,但这是有可能的,这取决于其他类如何使用它。