我已经为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类中的方法。我该怎么办?我的代码有什么问题?
答案 0 :(得分:1)
创建实例后,应该创建数据库表,但是什么也没有发生。
仅当您调用getWritableDatabase()
或getReadableDatabase()
方法之一时才创建数据库。创建SQLiteOpenHelper
实例是不够的。
另请参阅:When is SQLiteOpenHelper onCreate() / onUpgrade() run?
myDb = new UserDatabaseHelper(getActivity()).getWritableDatabase();
在这种情况下,表已创建,但是我无法调用checkuser并插入helper类中的方法。
您不需要这样做。只需存储帮助程序引用,然后在其上调用checkuser()
和insert()
方法即可。如果需要,这些方法将调用get...Database()
创建数据库。