Java 具有相同字段的多个表,约束错误失败
我正在创建包含以下字段的3个表 问题是在表2和表3中插入数据时存在约束失败错误Java 具有相同字段的多个表,约束错误失败,java,android,database,sqlite,Java,Android,Database,Sqlite,我正在创建包含以下字段的3个表 问题是在表2和表3中插入数据时存在约束失败错误 TABLE 1 TABLE 2 |_id| name | class | sec | roll| |_id| class | sec | doa | TABLE 3 |_id | class| sec | roll | aop | doa | 下面是生成表的代
TABLE 1 TABLE 2
|_id| name | class | sec | roll| |_id| class | sec | doa |
TABLE 3
|_id | class| sec | roll | aop | doa |
下面是生成表的代码
public static final String KEY_RID = "row_id";
public static final String KEY_NAME = "student_name";
public static final String KEY_ROLL = "student_roll";
public static final String KEY_SEC = "student_sect";
public static final String KEY_CLASS = "student_class";
public static final String KEY_DOA = "dayofattend";
public static final String KEY_AOP = "student_status";
private static final String DATABASE_NAME = "StudendtAttend";
private static final String DATABASE_TABLE = "AttendTable";
private static final String DATABASE_TABLE2 = "AttendDate";
private static final String DATABASE_TABLE3 = "AttendAop";
private static final int DATABASE_VERSION = 1;
private DbHelper ourHelper;
private final Context ourContext;
private SQLiteDatabase ourDatabase;
private static class DbHelper extends SQLiteOpenHelper {
public DbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
// Create Database
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_RID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_ROLL
+ " TEXT NOT NULL, " + KEY_NAME + " TEXT NOT NULL, "
+ KEY_CLASS + " TEXT NOT NULL, " + KEY_SEC
+ " TEXT NOT NULL);");
db.execSQL("CREATE TABLE " + DATABASE_TABLE2 + " (" + KEY_RID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_CLASS
+ " TEXT NOT NULL, " + KEY_SEC + " TEXT NOT NULL, "
+ KEY_DOA + " TEXT NOT NULL);");
db.execSQL("CREATE TABLE " + DATABASE_TABLE3 + " (" + KEY_RID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_CLASS
+ " TEXT NOT NULL, " + KEY_SEC + " TEXT NOT NULL, "
+ KEY_ROLL + " TEXT NOT NULL, " + KEY_DOA
+ " TEXT NOT NULL, " + KEY_AOP + " TEXT NOT NULL);");
}
// Insert Values into DB
public long populateDB(String roll, String name, String sec, String clas) {
// TODO Auto-generated method stub
ContentValues cv = new ContentValues();
cv.put(KEY_ROLL, roll);
cv.put(KEY_NAME, name);
cv.put(KEY_CLASS, clas);
cv.put(KEY_SEC, sec);
ourDatabase.insert(DATABASE_TABLE, null, cv);
populateDB2(roll, name, sec, clas );
return (0);
}
public long populateDB2(String roll, String name, String sec, String clas) {
ContentValues cv1 = new ContentValues();
cv1.put(KEY_CLASS, clas);
cv1.put(KEY_SEC, sec);
ourDatabase.insert(DATABASE_TABLE2, null, cv1);
populateDB3(roll, name, sec, clas );
return 0;
}
public long populateDB3(String roll, String name, String sec, String clas) {
ContentValues cv2 = new ContentValues();
cv2.put(KEY_ROLL, roll);
cv2.put(KEY_CLASS, clas);
cv2.put(KEY_SEC, sec);
ourDatabase.insert(DATABASE_TABLE3, null, cv2);
return(0);
}
显然我做错了什么,我不太明白。
请提供帮助。您声明所有列均不为空,并且当您在
populateDB2
中插入值时,仅在两列中插入值,其他列则为空,因此约束失败。还有为什么是3个表,如果这些都是您的列,那么1个表就可以了。您如何插入数据?logcat到底说了什么?我用来插入的代码是
code public long populateDB2(字符串滚动,字符串名称,字符串秒,字符串类){ContentValues cv1=new ContentValues();cv1.put(KEY_CLASS,clas);cv1.put(KEY_sec,sec);ourDatabase.insert(DATABASE_TABLE2,null,cv1);populateDB3(roll,name,sec,clas);返回0;
04-13 08:47:39.585:E/数据库(333):android.database.sqlite.sqliteconstraintextException:错误代码19:约束失败基本上是使用相同的方法将值插入所有表发布插入代码,很难从comment.code inserted中读取,是因为我使用相同的变量名吗?Sec、Class和Roll组合在一起构成我的主键谢谢,我感觉很傻t now:D无论如何,这个论坛真的很有帮助,我已经使用过这个论坛很多次了,谢谢!好吧,有时候你只是错过了最明显的。为了减少冗余,我可能会删除表2,但我想表1和表3是3NF。(考虑到这个表中的主要属性是Class Section和Roll的组合)您可以将类、节和卷一起声明为唯一的。表3包含表1和表2中的所有列,因此我认为您不需要前两个表。