assets フォルダーの .db ファイルから sqlitedatabase を開く必要があるアプリがあります。このデータベースは、アプリを起動するたびに開く必要があります。
Androidでsqliteデータベースを処理し、ファイルからsqliteデータベースをロードするためのチュートリアルをいくつかチェックしています。これらすべてのチュートリアルをこのコードにマージしましたが、機能しません。
私のデータベースには、内部にいくつかのデータがある TABLE が含まれていますがitems
、 SELECT * 文を呼び出すと、items
items テーブルが存在しないことを示す例外が発生しました:
String databaseName="frases";
SQLiteManager sqlManager = new SQLiteManager(this);
sqlManager.open(databaseName);
List<String> nombres = new ArrayList<String>();
Cursor cursor=sqlManager.rawQuery("SELECT * FROM 'items'");
while (cursor.moveToNext()) {
nombres.add(cursor.getString(1));
}
for (int i=0; i<nombres.size();i++){
Log.d("DATABASE", "Nombre: "+nombres.get(i));
}
sqlManager.close(); //Cerramos la base de datos
そして、これは私の SQLiteManager クラスです:
public class SQLiteManager {
private DemoSQLiteHelper dbHelper;
private SQLiteDatabase db;
private static Context ctx;
public SQLiteManager(Context ctx) {
this.ctx = ctx;
}
public void open(String databaseName) throws SQLException {
dbHelper = new DemoSQLiteHelper(ctx, databaseName, null, 1);
generateSQLiteDB(databaseName);
db = dbHelper.getWritableDatabase();
}
public void close() {
dbHelper.close();
}
public void execSQL(String sql){
db.execSQL(sql);
}
public Cursor rawQuery(String sql){
Cursor cursor=db.rawQuery(sql, null);
return cursor;
}
public void clearDB() {
dbHelper.clearDb(db);
}
public class DemoSQLiteHelper extends SQLiteOpenHelper {
public DemoSQLiteHelper(Context contexto, String nombre, CursorFactory factory, int version) {
super(contexto, nombre, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int versionAnterior, int versionNueva) {
}
public void clearDb(SQLiteDatabase db){
onCreate(db);
}
}
private void generateSQLiteDB(String databaseName) { //
SQLiteDatabase db = dbHelper.getReadableDatabase(); // by calling this line an empty database will be created into the default system path of this app - we will then overwrite this with the database from the server
db.close();
OutputStream os = null;
InputStream is = null;
try{
is = ctx.getAssets().open(databaseName+".db");
os = new FileOutputStream("/data/data/com.DemoSqlite/databases/"+databaseName+".db");
copyFile(os, is);
}catch (Exception e) {
Log.e("DB", "Database not found", e);
}finally{
try{
if(os != null)
os.close();
if(is != null)
is.close();
} catch (IOException e) {Log.e("DB", "Can't close adapters");}
}
}
private void copyFile(OutputStream os, InputStream is) throws IOException {
byte[] buffer = new byte[1024];
int length;
while((length = is.read(buffer))>0)
os.write(buffer, 0, length);
os.flush();
}
}
私のコードで何が間違っていますか?
ありがとう