我的应用程序没有 access/create 我的预填充数据库,而是创建了一个空数据库
My application does not access/create my pre-populated database, instead it creates an empty database
我正在制作测验应用程序。我制作了一个预填充的数据库,其中包括 questionNumber、subject、question、correctAnswer、wrongAnswer1、wrongAnswer2 和 wrongAnswer3 作为其列(查看底部的图片)。我正在测试查询数据库是否有效,所以我创建了一个名为 TestActivity 的 class 及其对应的 XML 文件 "activity_test"。我包括一个按钮和一个 textView。我的 objective 是查询数据库并在单击按钮时将其显示在 textView 中。我的问题是,在使用 SQLiteOpenHelper 扩展的我的 DatabaseHelper class 中,创建了一个空数据库,而不是查询我预先填充的数据库。我不知道我哪里做错了,但我高度怀疑这是 CREATE_TABLE 的错。我可能打错了字。我尝试重新输入和重新输入架构,但文本视图中仍然没有显示任何记录。
本次测试,由于数据库记录过多,我只尝试查询"wrongAnswers3"列。
这是我的"DatabaseAdapter"class
package com.example.quizalarm;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseAdapter {
static class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME="qasadb.db";
private static final String TABLE_NAME="qasaMultipleChoicequizdb";
private static final String QUESTION_NUMBER="questionNumber";
private static final String SUBJECT="subject";
private static final String QUESTION="question";
private static final String CORRECT_ANSWER="correctAnswer";
private static final String WRONG_ANSWER1="wrongAnswer1";
private static final String WRONG_ANSWER2="wrongAnswer2";
private static final String WRONG_ANSWER3="wrongAnswer3";
private static final String CREATE_TABLE="CREATE TABLE "+
TABLE_NAME+" ( "+
QUESTION_NUMBER+" INTEGER PRIMARY KEY AUTOINCREMENT, "+
SUBJECT+" TEXT, "+
QUESTION+" TEXT, "+
CORRECT_ANSWER+" TEXT, "+
WRONG_ANSWER1+" TEXT, " +
WRONG_ANSWER2+" TEXT, "+
WRONG_ANSWER3+" TEXT" +
")";
private static final String DROP_TABLE="DROP TABLE IF EXISTS "+TABLE_NAME;
private static final int DATABASE_VERSION=1;
private Context context;
//constructor
public DatabaseHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
Message.message(context, "Constructor called");
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREATE_TABLE);
Message.message(context, "onCreate was called");
} catch (SQLException e){
Message.message(context, ""+e);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try {
Message.message(context, "onUpgrade was called");
db.execSQL(DROP_TABLE);
onCreate(db);
} catch (SQLException e){
e.printStackTrace();
}
}
}
DatabaseHelper helper;
public DatabaseAdapter (Context context){
helper = new DatabaseHelper(context);
}
public String getData(){
SQLiteDatabase db=helper.getWritableDatabase();
//select necessary columns from table
String[] columns={DatabaseHelper.WRONG_ANSWER3};
Cursor cursor=db.query(DatabaseHelper.TABLE_NAME, columns, null, null, null, null, null);
StringBuffer sb=new StringBuffer();
while (cursor.moveToNext()){
String cWA3 = cursor.getString(6);
sb.append(cWA3);
}
return sb.toString();
}
}
这是我的"TestActivity"class
package com.example.quizalarm;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class TestActivity extends AppCompatActivity {
DatabaseAdapter helper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
helper = new DatabaseAdapter(this);
}
public void viewDetails(View view){
TextView textShowData = findViewById(R.id.textShowData);
String data = helper.getData();
textShowData.setText(data);
}
}
这是我预先填充的数据库:
其"qasaMultipleChoicequizdb"table的架构是
创建 TABLE "qasaMultipleChoicequizdb" (
"questionNumber" 整数主键自增,
"subject" 文字,
"question" 文本,
"correctAnswer" 文字,
"wrongAnswer1" 文本,
"wrongAnswer2" 文字,
"wrongAnswer3" 文本
)
我对这段代码的引用来自this playlist。 Parts/videos 160-166).
对我来说,使用 SQLiteAssetHelper 比使用 SQLiteOpenHelper 容易得多。您不需要使用 "CREATE TABLE" 模式,您只需要在 build.gradle (Module: app) 中添加一定的依赖项即可使用它。
这是 link:https://www.javahelps.com/2015/04/import-and-use-external-database-in.html。
希望对您有所帮助:)
我正在制作测验应用程序。我制作了一个预填充的数据库,其中包括 questionNumber、subject、question、correctAnswer、wrongAnswer1、wrongAnswer2 和 wrongAnswer3 作为其列(查看底部的图片)。我正在测试查询数据库是否有效,所以我创建了一个名为 TestActivity 的 class 及其对应的 XML 文件 "activity_test"。我包括一个按钮和一个 textView。我的 objective 是查询数据库并在单击按钮时将其显示在 textView 中。我的问题是,在使用 SQLiteOpenHelper 扩展的我的 DatabaseHelper class 中,创建了一个空数据库,而不是查询我预先填充的数据库。我不知道我哪里做错了,但我高度怀疑这是 CREATE_TABLE 的错。我可能打错了字。我尝试重新输入和重新输入架构,但文本视图中仍然没有显示任何记录。
本次测试,由于数据库记录过多,我只尝试查询"wrongAnswers3"列。
这是我的"DatabaseAdapter"class
package com.example.quizalarm;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseAdapter {
static class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME="qasadb.db";
private static final String TABLE_NAME="qasaMultipleChoicequizdb";
private static final String QUESTION_NUMBER="questionNumber";
private static final String SUBJECT="subject";
private static final String QUESTION="question";
private static final String CORRECT_ANSWER="correctAnswer";
private static final String WRONG_ANSWER1="wrongAnswer1";
private static final String WRONG_ANSWER2="wrongAnswer2";
private static final String WRONG_ANSWER3="wrongAnswer3";
private static final String CREATE_TABLE="CREATE TABLE "+
TABLE_NAME+" ( "+
QUESTION_NUMBER+" INTEGER PRIMARY KEY AUTOINCREMENT, "+
SUBJECT+" TEXT, "+
QUESTION+" TEXT, "+
CORRECT_ANSWER+" TEXT, "+
WRONG_ANSWER1+" TEXT, " +
WRONG_ANSWER2+" TEXT, "+
WRONG_ANSWER3+" TEXT" +
")";
private static final String DROP_TABLE="DROP TABLE IF EXISTS "+TABLE_NAME;
private static final int DATABASE_VERSION=1;
private Context context;
//constructor
public DatabaseHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
Message.message(context, "Constructor called");
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREATE_TABLE);
Message.message(context, "onCreate was called");
} catch (SQLException e){
Message.message(context, ""+e);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try {
Message.message(context, "onUpgrade was called");
db.execSQL(DROP_TABLE);
onCreate(db);
} catch (SQLException e){
e.printStackTrace();
}
}
}
DatabaseHelper helper;
public DatabaseAdapter (Context context){
helper = new DatabaseHelper(context);
}
public String getData(){
SQLiteDatabase db=helper.getWritableDatabase();
//select necessary columns from table
String[] columns={DatabaseHelper.WRONG_ANSWER3};
Cursor cursor=db.query(DatabaseHelper.TABLE_NAME, columns, null, null, null, null, null);
StringBuffer sb=new StringBuffer();
while (cursor.moveToNext()){
String cWA3 = cursor.getString(6);
sb.append(cWA3);
}
return sb.toString();
}
}
这是我的"TestActivity"class
package com.example.quizalarm;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class TestActivity extends AppCompatActivity {
DatabaseAdapter helper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
helper = new DatabaseAdapter(this);
}
public void viewDetails(View view){
TextView textShowData = findViewById(R.id.textShowData);
String data = helper.getData();
textShowData.setText(data);
}
}
这是我预先填充的数据库:
其"qasaMultipleChoicequizdb"table的架构是 创建 TABLE "qasaMultipleChoicequizdb" ( "questionNumber" 整数主键自增, "subject" 文字, "question" 文本, "correctAnswer" 文字, "wrongAnswer1" 文本, "wrongAnswer2" 文字, "wrongAnswer3" 文本 )
我对这段代码的引用来自this playlist。 Parts/videos 160-166).
对我来说,使用 SQLiteAssetHelper 比使用 SQLiteOpenHelper 容易得多。您不需要使用 "CREATE TABLE" 模式,您只需要在 build.gradle (Module: app) 中添加一定的依赖项即可使用它。
这是 link:https://www.javahelps.com/2015/04/import-and-use-external-database-in.html。
希望对您有所帮助:)