在数据库浏览器SQLite上找不到数据库?

时间:2019-04-17 04:17:29

标签: android database sqlite

我是一个初学者,正在为学校项目创建注册数据库,当我进入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;
    }

}

1 个答案:

答案 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)"
);

然后从设备上卸载应用程序以删除数据库并重新运行,以便使用表的正确名称重新创建数据库。