我正在 Android Studio 中做一个小项目,我正在使用 SQLite。插入操作附近有一个错误

I am doing a small project in Android Studio and i am using SQLite .There is an error near the insert operation

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION=1;
    private static final String DATABASE_NAME="Original";
    private static final String TABLE_NAME="Register";
    private static final String COLUMN_ID="id";
    private static final String COLUMN_UNAME="name";
    //private static final String COLUMN_EMAIL="email";
    private static final String COLUMN_PHONENUMBER="number";
    private static final String COLUMN_PASSWORD="password";


    public DatabaseHelper(Context mcontext)
    {
        super(mcontext , DATABASE_NAME , null , DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db)
    {
        String CREATE_REGISTER_TABLE = " CREATE TABLE " + TABLE_NAME + " ( "
                + COLUMN_ID + " INTEGER PRIMARY KEY, "
                + COLUMN_UNAME + " TEXT, "
                + COLUMN_PHONENUMBER + " TEXT, "
                + COLUMN_PASSWORD + " TEXT " + " ) ";

        db.execSQL(CREATE_REGISTER_TABLE);
    }

    public void insertContact(Original c)
    {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();

        //String query="SELECT * FROM "+TABLE_NAME;
        //Cursor cursor = db.rawQuery(query,null);
       // int count=cursor.getCount();

        values.put(COLUMN_ID,c.getID());
        values.put(COLUMN_UNAME,c.getName());
        //values.put(COLUMN_EMAIL,c.getEmail());
        values.put(COLUMN_PASSWORD,c.getPassw());
        values.put(COLUMN_PHONENUMBER,c.getNumber());

        db.insert(TABLE_NAME , null , values);
        db.close();
    }



    public String searchPass(String name)
    {
        SQLiteDatabase db = this.getReadableDatabase();
        String query="SELECT "+COLUMN_UNAME + "AND " +COLUMN_PASSWORD +"FROM "+TABLE_NAME;
        Cursor mCursor=db.rawQuery(query , null);

        String a,b;
        b="not found";
        if(mCursor.moveToFirst())
        {
            do
            {
                a=mCursor.getString(0);

                if(a.equals(name))
                {
                    b=mCursor.getString(1);
                    break;
                }
            }
            while(mCursor.moveToNext());
        }
        return b;
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i1)
    {
        String query="DROP TABLE IF EXITS"+TABLE_NAME;
        db.execSQL(query);
        onCreate(db);
    }
}

错误显示在 db.insert() 操作中。 主要目的是将详细信息添加到数据库名称 Original with the table name register

上面的代码还可以,我用过一次 运行(两次使用单个 Original 实例故意生成 UNIQUE constraint 错误)。但是,如果原始对象的 ID 不是唯一的,它将失败。您会收到如下错误:-

07-18 06:32:46.208 2819-2819/? E/SQLiteLog: (1555) abort at 11 in [INSERT INTO Register(number,name,password,id) VALUES (?,?,?,?)]: UNIQUE constraint failed: Register.id
07-18 06:32:46.208 2819-2819/? E/SQLiteDatabase: Error inserting number=0312341234 name=Fred password=password id=10 

如果这不是错误,那么可能是因为您在未删除数据库(删除应用程序的数据或卸载应用程序)。这是人们常犯的错误,因为他们没有意识到 onCreate 方法只会在创建数据库时自动调用。

我怀疑是后者,因为有迹象表明您已根据注释掉的行 //values.put(COLUMN_EMAIL,c.getEmail());

更改了 table 结构

P.S。你应该在返回之前关闭 searchPass 方法中的游标,例如代码 mCursor.close();

如果以上都不是问题,那么您应该编辑您的问题并包含详细说明错误的 log/stacktrace 以及调用 activity 的代码,例如(我使用的代码):-

            Original ori = new Original(10l,"Fred","password","fred@email.com","0312341234");
            DatabaseHelper dbhlp = new DatabaseHelper(this);
            dbhlp.insertContact(ori);