Выпуск 1 согласно: -
Также мой код для вставки значений правильно или нет.Поскольку я пробовал это раньше, и я получил ошибку запуска в первой строке значения вставки.
Если у вас нет public static final String TABLE_USERINFO = "TABLE_USERINFO";
, который рассматривает вопрос, почти совпадающий с дубликатом вопроса, вы не получите
sqLiteDatabase.execSQL("INSERT INTO TABLE_USERINFO VALUES('01','45207160010','Mary James','TYBSCIT')");
sqLiteDatabase.execSQL("INSERT INTO TABLE_USERINFO VALUES('02','45207160020','Amelia John','FYBCOM')");
В результате возникнет исключение из-за того, что таблица не найдена.
Я считаю, что вместо этого вам следует использовать: -
sqLiteDatabase.execSQL("INSERT INTO " + TABLE_USERINFO + " VALUES('01','45207160010','Mary James','TYBSCIT')");
sqLiteDatabase.execSQL("INSERT INTO " + TABLE_USERINFO + " VALUES('02','45207160020','Amelia John','FYBCOM')");
- т.е. использовать пользовательскую переменнуюTABLE_USERINFO, а не жестко закодированное значение TABLE_USERINFO.
Кроме того, вы столкнетесь с проблемами, поскольку у вас есть + KEY_NAME + "TEXT, "
вместо + KEY_NAME + " TEXT, "
(пробел пропущен).
Проблема 2 согласно:-
Я хочу создать функцию, в которой может регистрироваться только идентификатор студента, хранящийся в table_userinfo, в противном случае выдается сообщение об ошибке, что студент не существует.Идентификатор студента, введенный пользователем, также должен извлечь соответствующий курс и название из table_userinfo.
Следующее SqliteHelper.java облегчит вышеуказанное ( с учетом вашегоответ на ранее предоставленный ответ на аналогичный вопрос )
public class SqliteHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "mydb";
public static final int DATABASE_VERSION = 1;
public static final String TABLE_USERS = "user_reg";
public static final String TABLE_USERINFO = "user_info";
public static final String KEY_ID = BaseColumns._ID;
public static final String KEY_EMAIL = "email";
public static final String KEY_SID = "sid";
public static final String KEY_PASSWORD = "password";
public static final String KEY_NAME = "name";
public static final String KEY_COURSE = "coures";
public static final String SQL_TABLE_USERS = " CREATE TABLE " +
TABLE_USERS
+ " ( "
+ KEY_ID + " INTEGER PRIMARY KEY, "
+ KEY_EMAIL + " TEXT, "
+ KEY_SID + " INTEGER, "
+ KEY_PASSWORD + " TEXT"
+ " ) ";
//SQL for creating user info table
public static final String SQL_TABLE_USERINFO = " CREATE TABLE "
+ TABLE_USERINFO
+ " ( "
+ KEY_ID + "INTEGER PRIMARY KEY, "
+ KEY_SID + " INTEGER, "
+ KEY_NAME + " TEXT, "
+ KEY_COURSE + " TEXT "
+ " ) ";
public SqliteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//Create Table when oncreate gets called
sqLiteDatabase.execSQL(SQL_TABLE_USERS);
sqLiteDatabase.execSQL(SQL_TABLE_USERINFO);
sqLiteDatabase.execSQL("INSERT INTO " + TABLE_USERINFO + " VALUES('01','45207160010','Mary James','TYBSCIT')");
sqLiteDatabase.execSQL("INSERT INTO " + TABLE_USERINFO + " VALUES('02','45207160020','Amelia John','FYBCOM')");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public long registerUser(String sid, String email, String password) {
if (email.length() < 1) return -9999;
if (password.length() < 1) return -9998;
if (sid.length() < 1) return -9997;
if (ifUserRegistered(sid)) return -99; // Check if user is already registered
if (!ifUserInCourse(sid)) return -999; // Check if user is enrolled in a course perhpas optional
ContentValues cv = new ContentValues();
cv.put(KEY_SID,sid);
cv.put(KEY_EMAIL,email);
cv.put(KEY_PASSWORD,password);
SQLiteDatabase db = this.getWritableDatabase();
return db.insert(TABLE_USERS,null,cv);
}
public boolean ifUserRegistered(String sid) {
boolean rv = false;
String whereclause = KEY_SID + "=?";
String[] whereargs = new String[]{sid};
SQLiteDatabase db = this.getWritableDatabase();
Cursor csr = db.query(TABLE_USERS,null,whereclause,whereargs,null,null,null);
if (csr.getCount() > 0) rv = true;
csr.close();
return rv;
}
public boolean ifUserInCourse(String sid) {
boolean rv = false;
String whereclause = KEY_SID + "=?";
String[] whereargs = new String[]{sid};
SQLiteDatabase db = this.getWritableDatabase();
Cursor csr = db.query(TABLE_USERINFO,null,whereclause,whereargs,null,null,null);
if (csr.getCount() > 0) rv = true;
csr.close();
return rv;
}
public String getUserNameFromSID(String sid) {
String rv = "";
String whereclause = KEY_SID + "=?";
String[] whereargs = new String[]{sid};
SQLiteDatabase db = this.getWritableDatabase();
Cursor csr = db.query(TABLE_USERINFO,null,whereclause,whereargs,null,null,null);
if (csr.moveToFirst()) {
rv = csr.getString(csr.getColumnIndex(KEY_NAME));
}
csr.close();
return rv;
}
public String getUserCourseFromSID(String sid) {
String rv = "";
String whereclause = KEY_SID + "=?";
String[] whereargs = new String[]{sid};
SQLiteDatabase db = this.getWritableDatabase();
Cursor csr = db.query(TABLE_USERINFO,null,whereclause,whereargs,null,null,null);
if (csr.moveToFirst()) {
rv = csr.getString(csr.getColumnIndex(KEY_COURSE));
}
csr.close();
return rv;
}
}
Тестирование
Выше было проверено использование следующего кода в задании: -
public class MainActivity extends AppCompatActivity {
SqliteHelper mSQLHlpr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSQLHlpr = new SqliteHelper(this);
long result1 = mSQLHlpr.registerUser("010101010101010101","blah@mail.com","1234567890");
long result2 = mSQLHlpr.registerUser("45207160010","xxxx@mail.com","1234567890");
long result3 = mSQLHlpr.registerUser("45207160010","yyyy@mail.com","1234567890");
Log.d(
"RESULTS",
"\tFirst attempt returned " + String.valueOf(result1) + " " + String.valueOf((result1 > 0)) +
"\n\tSecond attempt returned " + String.valueOf(result2) + " " + String.valueOf(result2 > 0) +
"\n\tThird attempt returned " + String.valueOf(result3) + " " + String.valueOf(result3 > 0)
);
String testsid = "45207160010";
Log.d(
"USERBYSID",
"SID " + testsid + " " +
"Has a name of " + mSQLHlpr.getUserNameFromSID(testsid) +
" and a Course of " + mSQLHlpr.getUserNameFromSID(testsid)
);
}
}
- Примечание Вышеуказанное использовалось для целей тестирования, оно не предназначено для реального приложения, поскольку в этом случае результаты могут быть запутанными из-за уже существующих строк.
Результат
Выше был получен следующий соответствующий вывод: -
2019-02-05 12:38:08.684 21533-21533/? D/RESULTS: First attempt returned -999 false
Second attempt returned 1 true
Third attempt returned -99 false
2019-02-05 12:38:08.686 21533-21533/? D/USERBYSID: SID 45207160010 Has a name of Mary James and a Course of Mary James
- -999 - это код для SID, не существующего
- 1, положительное значение означает, чтострока была успешно вставлена и, следовательно, все тесты пройдены.
- -99 - это код уже зарегистрированного SID.