Java SQL。插入带有两个主键的表

时间:2017-04-15 17:48:05

标签: java android sqlite android-sqlite

我对这些代码块有疑问。我认为这是我遇到的一个SQL问题。这段代码应该创建一个student表,并将我的android应用程序中的数据插入到student表中。我收到一个错误,说该courseid列不存在。我认为问题与在课程表中被声明为主键的courseid有关。

创建课程表:

  public static String createTable(){
    return "CREATE TABLE " + DbSchema.TABLE_Course  + "("
            + DbSchema.KEY_CourseId  + " PRIMARY KEY    ,"
            + DbSchema.KEY_Name_Course + " TEXT )";
}

创建学生表:

public static String createTable(){
    return "CREATE TABLE " + DbSchema.TABLE_Student  + "("
            + DbSchema.KEY_StudID  + " PRIMARY KEY  ,"
            + DbSchema.KEY_Name_Student + " TEXT, "
            + DbSchema.KEY_Year_Student + " TEXT, "
            + DbSchema.KEY_Email_Student+ " TEXT,"
            + DbSchema.KEY_CourseId+" TEXT )";
}

插入表格:

public void insert(Student student) {


    SQLiteDatabase db = DatabaseManager.getInstance().openDatabase();
    ContentValues values = new ContentValues();
    values.put(DbSchema.KEY_StudID, student.getid());
    values.put(DbSchema.KEY_Name_Student, student.getname());
    values.put(DbSchema.KEY_Year_Student, student.getYear());
    values.put(DbSchema.KEY_Email_Student, student.getEmail());
    values.put(DbSchema.KEY_CourseId, student.getCourseid());




    db.insert(DbSchema.TABLE_Student, null, values);
    DatabaseManager.getInstance().closeDatabase();

创建表格命令:

   public DBHelper( ) {
    super(App.getContext(), DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    //All necessary tables you like to create will create here
    db.execSQL(CourseDbCommands.createTable());
    db.execSQL(StudentDbCommands.createTable());

4 个答案:

答案 0 :(得分:0)

DbSchema.TABLE_Course + "("DbSchema.KEY_CourseId + "PRIMARY KEY

之间没有空格

学生表也有相同的间距问题。

DbSchema.TABLE_Student  + "("

检查课程表中是否已存在学生课程ID

答案 1 :(得分:0)

我在学生表创建命令中看不到任何外键引用。 作为参考,您可以查看此enter link description here

我还假设你已经在课程表中有一些条目用学生表来映射。即在您将具有特定课程的学生插入学生表之前,该课程应该出现在课程表中。

答案 2 :(得分:0)

我想出来我必须手动更改数据库的版本。我以为自动发生了变化。

答案 3 :(得分:0)

我认为您在声明中错过了INTEGER

   public static String createTable(){
        return "CREATE TABLE " + DbSchema.TABLE_Student  + "("
                + DbSchema.KEY_StudID  + " INTEGER PRIMARY KEY  ,"
                + DbSchema.KEY_Name_Student + " TEXT, "
                + DbSchema.KEY_Year_Student + " TEXT, "
                + DbSchema.KEY_Email_Student+ " TEXT,"
                + DbSchema.KEY_CourseId+" TEXT )";
    }