Создайте экземпляр класса помощника базы данных SQLite внутри фрагмента. - PullRequest
0 голосов
/ 10 декабря 2018

Я создал вспомогательный класс Database для базы данных 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 и insert, которые находятся ввспомогательный класс.Что я должен делать?Что не так с моим кодом?

1 Ответ

0 голосов
/ 10 декабря 2018

После создания экземпляра таблица базы данных должна быть создана, но ничего не происходит.

База данных создается только при вызове одного из методов getWritableDatabase() или getReadableDatabase().Создание экземпляра SQLiteOpenHelper недостаточно.

См. Также: Когда запускается SQLiteOpenHelper onCreate () / onUpgrade ()?

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

Inэто условие таблица создана, но я не могу вызвать методы checkuser и вставить, которые находятся в классе помощника.

Вам не нужно это делать.Просто сохраните вспомогательную ссылку и вызовите на ней методы checkuser() и insert().Эти методы вызывают get...Database() для создания базы данных при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...