Вы немного запутались с вашим кодом.
Я бы предложил расширить класс База данных (быть подклассом) класса SQLiteOpenHelper и переопределение метода onCreate для создания таблиц в базе данных.
например
public class Database extends SQLiteOpenHelper {
// define constants so all names can be defined just once
public static final String DBNAME = "database.db"; // The database name
public static final int DBVERSION = 1; // The version (increase it to invoke the onUpgrade method to alter the DB structure)
public static final String TABLE_TUTORIALSPOINT = "tutorialspoint"; // The table name
public static final String COLUMN_USERNAME = "username"; // Columns
public static final String COLUMN_PASSWORD = "password";
SQLiteDatabase mDB; //Variable to hold the SqliteDatabase
//The Database class constructor
public Database(Context context) {
super(context, DBNAME, null, DBVERSION);
mDB = this.getWritableDatabase(); //<<<<<<<<<< store the Sqlite Database opening it, (if it doesn't exist then onCreate will be called)
}
@Override
public void onCreate(SQLiteDatabase db) {
String crt_tutorialspoint_table = "CREATE TABLE IF NOT EXISTS " + TABLE_TUTORIALSPOINT + "(" +
COLUMN_USERNAME + " VARCHAR, " +
COLUMN_PASSWORD + " VARCHAR" +
")";
db.execSQL(crt_tutorialspoint_table); // Create the table
// Preapre to insert a row using the SQLiteDatabase convenience insert method
ContentValues cv = new ContentValues();
cv.put(COLUMN_USERNAME,"admin");
cv.put(COLUMN_PASSWORD,"admin");
db.insert(TABLE_TUTORIALSPOINT,null,cv);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
}
}
Затем вы можете использовать это в действии;что-то вроде: -
public class MainActivity extends AppCompatActivity {
Database mMYDatabaseHelper; // Declare a Database object called mMyDatabaseHelper <<< Note will be null untill instantiated (constructed)
SQLiteDatabase mMySQliteDatabase; // Declares an SQliteDatabase object again will be null
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
mMYDatabaseHelper = new Database(this); // Construct the mMyDatabaseHelper (will create the database an insert the row)
mMySQliteDatabase = mMYDatabaseHelper.getWritableDatabase(); // Set/assign sqlite database from the helper to the SqliteDatabase object
// retrieve the rows in the table into a Cursor so the data can be extracted
// Note how the names are obtained from the constants as setup in the Database class.
Cursor mycursor = mMySQliteDatabase.query(Database.TABLE_TUTORIALSPOINT,null,null,null,null,null,null);
// loop through all rows of the cursor
while (mycursor.moveToNext()) {
String username = mycursor.getString(mycursor.getColumnIndex(Database.COLUMN_USERNAME)); // get the username from the current row
String password = mycursor.getString(mycursor.getColumnIndex(Database.COLUMN_PASSWORD)); // get the password from the current row
Log.d("TABLEINFO", "Row " + String.valueOf(mycursor.getPosition() + 1) + " has a username of " + username + " and a password of " + password);
}
mycursor.close(); // Done with the Cursor so close it
//ALL DONE if there are any rows in the table then there should be some output in the Log.
}
- Обратите внимание, что обычно у вас есть метод в классе Database (или в другом месте, определяемый соглашениями о кодировании), который возвращает Cursor, а не обращается к базе данных в действиях.
Вывод в журнал: -
D/TABLEINFO: Row 1 has a username of admin and a password of admin