问题是 getReadableDatabase() 方法没有返回您想要的数据库。您需要在应用程序中构建它或将其与应用程序捆绑在一起(使用资产)。以下是执行这两项操作的代码片段:
建立数据库
static final string DATABASE_CREATE = "create table if not exists " + "product " + "(" +
TABLE_COLUMN_1 + " " + COLUMN_1_TYPE + ", " +
TABLE_COLUMN_2 + " " + COLUMN_2_TYPE + ", "; //and so on
public class MySQLHelper extends SQLiteOpenHelper {
MySQLHelper(Context context) {
super(context, YOUR_DATABASE_NAME, null, YOUR_DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(DATABASE_CREATE);
}
catch(SQLException e) {
e.printStackTrace();
}
}
使用资产复制预建数据库
首先,您需要将 SQL 文件放在应用程序的 assets 文件夹中。然后将此代码放在主要活动的 onCreate() 方法中:
File f = new File(this.getDatabasePath().getAbsolutePath() + "/mydatabase.db";
if(!f.exists()) {
if(f.getParentFile().exists() || f.getParentFile().mkdirs()) {
f.createNewFile();
InputStream inputStream = getBaseContext().getAssets().open("mydatabase.db");
OutputStream outputStream = new FileOutputStream(f);
byte[] buffer = new byte[1024];
int length;
while((length = dbStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
inputStream.close();
outputStream.flush();
outputStraem.close();
}
else
throw new IOException("Database input error");
}
}
这是使用预建数据库放置在“mydatabase.db”文件中的假设。