#android #database #sqlite
#java #Android #База данных #sqlite #android-sqlite
Вопрос:
Я новичок и создаю базу данных регистрации для школьного проекта, когда я захожу в браузер DB для SQLite и открываю свой файл, там нет таблиц или содержимого? Будет ли это как-то связано с моим использованием onCreate или onUpgrade? Я провел много исследований, но результаты, которые я получаю, всегда были очень давними, и я действительно их не понимаю. Когда я ввожу информацию в свой эмулятор, я также получаю код ошибки ‘SQLiteException: нет такой таблицы’. Я действительно не уверен, что делать с моим кодом.
package android.example.rise;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.nfc.Tag;
import android.text.Html;
import android.util.Log;
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME="register.db";
public static final String TABLE_NAME="register.db";
public static final String COL_1="ID";
public static final String COL_2="first";
public static final String COL_3="second";
public static final String COL_4="last";
public static final String COL_5="email";
public static final String COL_6="password";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("CREATE TABLE registeruser (ID INTEGER PRIMARY KEY AUTOINCREMENT, first TEXT, second TEXT, last TEXT, email TEXT, password TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " TABLE_NAME);
onCreate(sqLiteDatabase);
}
public long addUser(String first, String middle, String last, String user, String password) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("first", first);
contentValues.put("second", middle);
contentValues.put("last", last);
contentValues.put("email", user);
contentValues.put("password", password);
long res = db.insert("registeruser", null, contentValues);
return res;
}
public boolean checkUser(String email, String password){
String[] column = {COL_1};
SQLiteDatabase db = getReadableDatabase();
String selection = COL_5 "=?" " and " COL_6 "=?";
String[] selectionArgs = { email, password } ;
Cursor cursor = db.query(TABLE_NAME,column,selection,selectionArgs,null,null,null);
int count = cursor.getCount();
cursor.close();
db.close();
if(count>0)
return true;
else
return false;
}
}
Ответ №1:
В этой строке:
public static final String TABLE_NAME="register.db";
Я предполагаю, что по ошибке вы определяете имя таблицы так же, как имя базы данных,
хотя в CREATE
инструкции:
sqLiteDatabase.execSQL("CREATE TABLE registeruser (.....)");
вы создаете таблицу с именем registeruser
.
Позже в вашем коде вы всегда используете переменную TABLE_NAME
, отличную от созданной таблицы.
Кроме того, поскольку вы определили переменные для имен таблицы и столбцов, не кодируйте их повторно.
Измените объявление на:
public static final String TABLE_NAME="registeruser";
и CREATE
оператор для:
sqLiteDatabase.execSQL(
"CREATE TABLE " TABLE_NAME " ("
COL_1 " INTEGER PRIMARY KEY AUTOINCREMENT, "
COL_2 " TEXT, "
COL_3 " TEXT, "
COL_4 " TEXT, "
COL_5 " TEXT, "
COL_6 " TEXT)"
);
затем удалите приложение с устройства, чтобы удалить базу данных, и запустите повторно, чтобы база данных была воссоздана с правильным именем для таблицы.