Java SQLite 1:M关系
作为项目的一部分,我正在制作一款android应用程序,用于跟踪用户在健身房的锻炼情况。通过各种设置、重量和重复的训练和练习。这将建立一个1:M的关系,其中训练id是外键。我还不熟悉android和sqlite,所以我只想在继续之前检查一下下面的代码是否正确 如有任何建议,将不胜感激 数据库助手Java SQLite 1:M关系,java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,作为项目的一部分,我正在制作一款android应用程序,用于跟踪用户在健身房的锻炼情况。通过各种设置、重量和重复的训练和练习。这将建立一个1:M的关系,其中训练id是外键。我还不熟悉android和sqlite,所以我只想在继续之前检查一下下面的代码是否正确 如有任何建议,将不胜感激 数据库助手 public class DBHelper extends SQLiteOpenHelper { public static String DATABASE_NAME = "gym_db"; priv
public class DBHelper extends SQLiteOpenHelper {
public static String DATABASE_NAME = "gym_db";
private static final int DATABASE_VERSION = 1;
public static final String TABLE_WORKOUT = "workout_table";
public static final String WORKOUT_ID = "_id";
public static final String WORKOUT_NAME = "workout_name";
public static final String TABLE_EXERCISE = "exercise_table";
public static final String EXERCISE_ID = "exercise_id";
public static final String EXERCISE_NAME = "exercise_name";
public static final String EXERCISE_SET = "exercise_set";
public static final String EXERCISE_WEIGHT = "exercise_weight";
public static final String EXERCISE_REP = "exercise_rep";
public static final String createWorkoutTable = "CREATE TABLE" + TABLE_WORKOUT + "("
+WORKOUT_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ WORKOUT_NAME + " TEXT NOT NULL,"+
");";
public static final String createExerciseTable = " CREATE TABLE " + TABLE_EXERCISE + "("
+EXERCISE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ EXERCISE_NAME + " TEXT NOT NULL, "
+ EXERCISE_SET + " INTEGER NOT NULL, "
+ EXERCISE_WEIGHT + " INTEGER NOT NULL, "
+ EXERCISE_REP + " INTEGER NOT NULL, "
+ WORKOUT_ID + "FOREIGN KEY"+
"(;";
我还打开了onUpgrade方法中的外键
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
super.onOpen(db);
if (!db.isReadOnly()){
db.execSQL("PRAGMA foreign_keys=ON;");
}
训练ID+“外键”
将不会产生所需的结果(假设这是外键约束)FOREIGN
是一个关键字,因此设置列类型的尝试将失败,并出现语法错误。您需要指定一个可能是INTEGER
的列类型。因此,您将拥有训练ID
+“整数…”
但是,它本身的外键
是不够的,而且位置也不正确。
定义外键有两种方法,作为列定义的一部分或作为表定义的一部分
前者(列定义)不使用外键
关键字,但缺少第二部分引用
(即说明主表和引用列的内容),使用此方法,您将使用:-
WORKOUT_ID + " INTEGER REFERENCES " + TABLE_WORKOUT +"(" + WORKOUT_ID +")"
后者(表定义)使用外键关键字。您可以按照以下方式对其进行编码:-
WORKOUT_ID + " INTEGER, FOREIGN KEY (" + WORKOUT_ ID + ") REFERENCES " + TABLE_WORKOUT + "(" + WORKOUT_ID + ")"
- 你可能想看看
下一行”(;“
将导致语法错误,应该是”;“
我还建议使用\u id
作为引用\u id
列的列的名称可能会导致混淆和困难(例如,当您使用联接进行选择时,结果光标中会有两列\u id
)
我建议使用不同的列名,例如锻炼\u id\u参考
- 这将详细介绍这个场景
是否存在需要帮助的特定错误?否,我只是检查是否使用了正确的语法来创建表欢迎使用SO。这不是一个代码审查网站。好的,关于我可以通过加入的练习选择训练的查询,你有什么想法吗?我建议你先阅读帮助中心,这样你就可以对这个网站的用途有一个大致的了解:特别是这一部分对你来说非常相关: