创建数据库后,当我尝试插入值时,我发现Exception如下..
android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
我不知道为什么会这样。 有人请帮帮我.. 提前完成了... 主类和助手类在下面给出..
public class Database extends Activity{
public static final String MYDATABASE_NAMEEE = "MY_DATABASE_RESTAURANT";
public static final int MYDATABASE_VERSION = 4;
public static final String MYDATABASE_TABLE = "Restaurant";
public static final String KEY_ID = "_id";
public static final String KEY_CONTENT1 = "Restaurant_name";
public static final String KEY_CONTENT2 = "Ac_or_nonac";
public static final String KEY_CONTENT3 = "Total_chairs";
public static final String KEY_CONTENT4 = "Reserved_chairs";
public static final String KEY_CONTENT5 = "Date";
public static final String KEY_CONTENT6 = "fromTime";
public static final String KEY_CONTENT7 = "toTime";
public static final String KEY_CONTENT8 = "Name";
public static final String KEY_CONTENT9 = "Contact_Number";
public static final String KEY_CONTENT10 = "Table_id";
private Helper helper;
private SQLiteDatabase database;
Button button_submit;
ListView listView;
EditText editText_name,editText_number,editText_seats,editText_date,editText_fromtime,editText_totime;
SimpleCursorAdapter cursorAdapter;
Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.databaselist);
listView = (ListView) findViewById(R.id.listView1);
button_submit = (Button) findViewById(R.id.button_submit);
editText_date = (EditText) findViewById(R.id.editText_date);
editText_fromtime = (EditText) findViewById(R.id.editText_fromtime);
editText_name = (EditText) findViewById(R.id.editText_name);
editText_number = (EditText) findViewById(R.id.editText_contactnumber);
editText_seats = (EditText) findViewById(R.id.editText_seatsneeded);
editText_totime = (EditText) findViewById(R.id.editText_totime);
helper = new Helper(this, MYDATABASE_NAMEEE, null, MYDATABASE_VERSION);
database = helper.getWritableDatabase();
cursor = database.query(MYDATABASE_TABLE, null,null, null, null, null, null);
String[] from=new String[]{KEY_ID,KEY_CONTENT3,KEY_CONTENT4,KEY_CONTENT5
,KEY_CONTENT6,KEY_CONTENT7,KEY_CONTENT8,KEY_CONTENT9,KEY_CONTENT10};
int[] to=new int[]{R.id.textView_id,R.id.textView_totalno_ofseats,R.id.textView_no_ofseatsreserved,R.id.textView_date
,R.id.textView_timefrom,R.id.textView_totime,R.id.textView_name,R.id.textView_contactnumber,R.id.textView_tableid};
cursorAdapter=new SimpleCursorAdapter(getApplicationContext(), R.layout.databasetext, cursor, from, to);
listView.setAdapter(cursorAdapter);
button_submit.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
String date = editText_date.getText().toString();
String fromtime = editText_fromtime.getText().toString();
String name = editText_name.getText().toString();
String number = editText_number.getText().toString();
String seats = editText_seats.getText().toString();
String totime = editText_totime.getText().toString();
ContentValues cv1 = new ContentValues();
cv1.put(KEY_CONTENT5, date);
cv1.put(KEY_CONTENT6, fromtime);
cv1.put(KEY_CONTENT8, name);
cv1.put(KEY_CONTENT9, number);
cv1.put(KEY_CONTENT4, seats);
database.insert(MYDATABASE_TABLE, null, cv1);
//cursor.requery();
editText_date.setText("");
editText_fromtime.setText("");
editText_name.setText("");
editText_number.setText("");
editText_seats.setText("");
editText_totime.setText("");
filldata();
}
});
}
private void filldata() {
// TODO Auto-generated method stub
Cursor cursor = database.query(MYDATABASE_TABLE, null,
null, null, null, null,null);
String[] from=new String[]{KEY_ID,KEY_CONTENT3,KEY_CONTENT4,KEY_CONTENT5
,KEY_CONTENT6,KEY_CONTENT7,KEY_CONTENT8,KEY_CONTENT9,KEY_CONTENT10};
int[] to=new int[]{R.id.textView_id,R.id.textView_totalno_ofseats,R.id.textView_no_ofseatsreserved,R.id.textView_date
,R.id.textView_timefrom,R.id.textView_totime,R.id.textView_name,R.id.textView_contactnumber,R.id.textView_tableid};
cursorAdapter=new SimpleCursorAdapter(getApplicationContext(), R.layout.databasetext, cursor, from, to);
listView.setAdapter(cursorAdapter);
}
}
public class Helper extends SQLiteOpenHelper{
public static final String MYDATABASE_TABLE = "Restaurant";
public static final String KEY_ID = "_id";
public static final String KEY_CONTENT1 = "Restaurant_name";
public static final String KEY_CONTENT2 = "Ac_or_nonac";
public static final String KEY_CONTENT3 = "Total_chairs";
public static final String KEY_CONTENT4 = "Reserved_chairs";
public static final String KEY_CONTENT5 = "Date";
public static final String KEY_CONTENT6 = "fromTime";
public static final String KEY_CONTENT7 = "toTime";
public static final String KEY_CONTENT8 = "Name";
public static final String KEY_CONTENT9 = "Contact_Number";
public static final String KEY_CONTENT10 = "Table_id";
private static final String SCRIPT_CREATE_DATABASE =
"create table " + MYDATABASE_TABLE + " ("
+ KEY_ID + " integer primary key, "
+ KEY_CONTENT1 + " text not null, "
+ KEY_CONTENT2 + " text not null, "
+ KEY_CONTENT3 + " integer not null, "
+ KEY_CONTENT4 + " integer not null, "
+ KEY_CONTENT5 + " text not null, "
+ KEY_CONTENT6 + " text not null, "
+ KEY_CONTENT7 + " text not null, "
+ KEY_CONTENT8 + " text not null, "
+ KEY_CONTENT9 + " text not null, "
+ KEY_CONTENT10 + " text not null) ";
public Helper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(SCRIPT_CREATE_DATABASE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
答案 0 :(得分:2)
请确保您在有效主键中插入一行,即在表格中将其设为唯一(我认为您之所以这样做是因为您'重新尝试插入已在同一数据库表中定义主键的行。)
答案 1 :(得分:1)
在数据库模式中,您将所有内容声明为NOT NULL,但在插入中,您的每个字段都没有值。 SQLite抛出异常,因为它不知道要在字段中插入什么。删除NOT NULL约束,以便SQlite可以将null值作为默认值插入,或者为每个字段添加一个值。
答案 2 :(得分:1)
更正数据库的定义。因为将字段声明为 not null ..您必须向每个字段发送一些数据..所以从不需要的数据字段中删除不是nul1 < / p>
答案 3 :(得分:0)
确保您没有尝试在那里插入一些不唯一的值。 确保您没有尝试跳过插入中的任何“非空”值。提供非空列的值或定义默认值。
另一方面,您在两个具有相同值的不同类中定义KEY_CONTENT1等。不要重复。您正在为它们使用静态上下文,因此在一个类中定义它们并使用静态上下文在其中检索它们。