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 列用于唯一标识行,并且通常对用户来说价值很小(如果有的话)。
这是我的 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 列用于唯一标识行,并且通常对用户来说价值很小(如果有的话)。