我是一个初学者,正在为学校项目创建注册数据库,当我进入DB Browser for 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;
}
}
答案 0 :(得分:0)
在这一行:
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)"
);
然后从设备上卸载应用程序以删除数据库并重新运行,以便使用表的正确名称重新创建数据库。