在片段内创建SQLite数据库Helper类的实例

时间:2018-12-10 09:13:05

标签: android database sqlite

我已经为SQLite数据库创建了一个数据库帮助程序类,我想在我的片段中创建它的一个实例。但是没有创建表。

UserDatabaseHelper.java

public static final String DATABASE_NAME = "Users.db" ;
public static final String TABLE_NAME = "User_table" ;
public static final String COL_1 = "Username" ;
public static final String COL_2 = "Email" ;
public static final String COL_3 = "Password" ;

public UserDatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table "+ TABLE_NAME+ "(Username TEXT PRIMARY KEY ," +
            " Email TEXT, Password TEXT)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);

}



public boolean insertData(String username , String email , String password ) {

    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues() ;
    contentValues.put(COL_1,username);
    contentValues.put(COL_2,email);
    contentValues.put(COL_3,password);
    long result = db.insert(TABLE_NAME , null , contentValues) ;
    if (result == -1) return false ;
    else return true ;
}

public boolean checkUser(String username) {

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery("select * from user where username=?",new String[]{username}) ;
    if (cursor.getCount()>0) return false ;
    else return true ;
}

SignUpFragment.java

UserDatabaseHelper myDb ;
EditText username_signup , email_signup , password_signup , password_signup_repeat ;
CheckBox checkup ;
Button signup_btn ;


@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.signup_fragment,container ,false);

    username_signup = view.findViewById(R.id.username_signup);
    email_signup = view.findViewById(R.id.email_signup);
    password_signup = view.findViewById(R.id.password_signup);
    password_signup_repeat = view.findViewById(R.id.password_signup_repeat);
    checkup = view.findViewById(R.id.checkup);
    signup_btn = view.findViewById(R.id.signup_btn);
    myDb = new UserDatabaseHelper(getActivity());



    return view;
}

创建实例后,应该创建数据库表,但是什么也没有发生。我尝试将代码更改为

SQLiteDatabase myDb ;

然后

myDb = new UserDatabaseHelper(getActivity()).getWritableDatabase(); 

在这种情况下,表已创建,但我无法调用checkuser并插入helper类中的方法。我该怎么办?我的代码有什么问题?

1 个答案:

答案 0 :(得分:1)

  

创建实例后,应该创建数据库表,但是什么也没有发生。

仅当您调用getWritableDatabase()getReadableDatabase()方法之一时才创建数据库。创建SQLiteOpenHelper实例是不够的。

另请参阅:When is SQLiteOpenHelper onCreate() / onUpgrade() run?

myDb = new UserDatabaseHelper(getActivity()).getWritableDatabase(); 
     

在这种情况下,表已创建,但是我无法调用checkuser并插入helper类中的方法。

您不需要这样做。只需存储帮助程序引用,然后在其上调用checkuser()insert()方法即可。如果需要,这些方法将调用get...Database()创建数据库。