SQLite 数据插入错误 Android studio

SQLite Data insertion error Android studio

这是我的 activity class.when 每次 "Not inserted" 出现

我按下数据按钮数据应该插入 database.But
 my = new DatabaseHandler(this);
        data=(Button)findViewById(R.id.data);

        data.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                time=clockTimeTextView.getText().toString();
                repeat=Repeat_optionTextview.getText().toString();
                ringtone=Ringtone_optionTextview.getText().toString();
                if(chkBox.isChecked()){
                    vibrate="true";
                }else{
                    vibrate="false";
                }
                method=Method_optionTextview.getText().toString();

                //Toast.makeText(getApplicationContext(),method + ringtone ,Toast.LENGTH_LONG).show();

                boolean checkers = my.addtotable(et.getText().toString(),time,repeat,ringtone,vibrate,method);
                if (checkers == true) {
                    Toast.makeText(AddAlarmActivity.this, "Successfully Inserted", Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(AddAlarmActivity.this, "Not Inserted", Toast.LENGTH_LONG).show();
                }

            }
        });

这是数据库处理程序class

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


public class DatabaseHandler extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "database5.db";
    private static final String TABLE_NAME = "mytable10";
    private static final String COLUMN1 = "ID";
    private static final String COLUMN2 = "TIME";
    private static final String COLUMN3 = "REPEAT";
    private static final String COLUMN4 = "RINGTONE";
    private static final String COLUMN5 = "VIBRATE";
    private static final String COLUMN6 = "METHOD";



    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, 2);
    }


    @Override
    public void onCreate(SQLiteDatabase db) {

        String query;
        query = "CREATE TABLE " + TABLE_NAME + "(" + COLUMN1 + "  INTEGER PRIMARY KEY , "
                                                   + COLUMN2 + " TEXT , "
                                                   + COLUMN3 + " TEXT , "
                                                   + COLUMN4 + " TEXT , "
                                                   + COLUMN5 + " TEXT , "
                                                   + COLUMN6 + "TEXT " + ")";
        db.execSQL(query);

    }

    @Override


    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL(" DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }


    public boolean addtotable(String id, String time, String repeat, String ringtone,String vibrate,String method) {

        SQLiteDatabase sqLiteDatabase = getWritableDatabase();

        ContentValues contentValues = new ContentValues();
        contentValues.put(COLUMN1, id);
        contentValues.put(COLUMN2, time);
        contentValues.put(COLUMN3, repeat);
        contentValues.put(COLUMN4, ringtone);
        contentValues.put(COLUMN5, vibrate);
        contentValues.put(COLUMN6, method);

        long checker = sqLiteDatabase.insert(TABLE_NAME, null, contentValues);
        if (checker == -1) {
            return false;
        } else {
            return true;
        }
    }

    public Cursor display() {

        SQLiteDatabase sqLiteDatabase = getReadableDatabase();
        Cursor res;
        res = sqLiteDatabase.rawQuery("SELECT * FROM " + TABLE_NAME, null);
        return res;
    }
}

当我制作两栏时​​(column_1 & column_2)它有效 fine.But 当我制作多于两栏时 "Not Inserted" 消息 comes.i 可以找不到哪里出错了is.help请

猜测原因是通过 et.getText().toString() 检索到的传递给 addtotable 方法的文本不是有效整数,因此不符合 rowid 值的特殊约束: -

In SQLite, a column with type INTEGER PRIMARY KEY is an alias for the ROWID (except in WITHOUT ROWID tables) which is always a 64-bit signed integer. SQLite Autoincrement

  • 注意一个有效的整数,如果该值是一个字符串则无关紧要,例如1,2,3......9223372036854775807 因为 SQLite 会相应地转换它。

我建议最简单的解决方法是注释掉或删除以下行:-

    contentValues.put(COLUMN1, id);

另一种解决方案是确保从看似 EditText 的内容中检索到的值是一个整数。但是我不认为这对用户界面有好处。

另一种方法是更改​​列,使其不是 rowid 的别名,可能通过将 TEXT 指定为列类型或什至是 INT PRIMARY KEY(请注意,您必须删除 table 并重新定义增加数据库版本号就可以了,也可以删除App的数据或者卸载App,后两者是删除数据库所以onCreate方法是运行).

您或许应该查看您对 id 列的要求。通常,id 列用于唯一标识行,并且通常对用户来说价值很小(如果有的话)。