###前提・実現したいこと
Androidで資材管理をするアプリを開発しています。
アプリ内ですでに作成したSQLiteのDatabaseを利用して、資材の一覧をExpandableListViewで実装しようと考えています。
###発生している問題・エラーメッセージ
ExpandableListViewChildData.classの11行目のqueryメソッドにおいて、すでに作成したDatabaseを読み込んで、SELECT文を実行しようとするとSQLiteException: no such table: Name(code1)というエラーが発生。
###該当のソースコード
Java
1 2public class DBOpenHelper extends SQLiteOpenHelper { 3 private static final String DB_FILE_NAME = "HAVI.db"; 4 private static final String DB_NAME = "HAVI"; 5 private static final int DB_VERSION = 1; 6 7 private Context context; 8 private File dbPath; 9 private boolean createDatabase = false; 10 11 public DBOpenHelper(Context context) { 12 super(context, DB_NAME, null, DB_VERSION); 13 this.context = context; 14 this.dbPath = context.getDatabasePath(DB_NAME); 15 } 16 17 @Override 18 public synchronized SQLiteDatabase getReadableDatabase() { 19 SQLiteDatabase database = super.getReadableDatabase(); 20 if(createDatabase) { 21 try { 22 database = copyDatabase(database); 23 } catch (IOException e) { 24 25 } 26 } 27 return database; 28 } 29 30 @Override 31 public synchronized SQLiteDatabase getWritableDatabase() { 32 SQLiteDatabase database = super.getWritableDatabase(); 33 if(createDatabase) { 34 try { 35 database = copyDatabase(database); 36 } catch (IOException e) { 37 38 } 39 } 40 return database; 41 } 42 43 private SQLiteDatabase copyDatabase(SQLiteDatabase database) throws IOException { 44 database.close(); 45 46 InputStream input = context.getAssets().open(DB_FILE_NAME); 47 OutputStream output = new FileOutputStream(this.dbPath); 48 copy(input, output); 49 50 51 createDatabase = false; 52 53 return super.getWritableDatabase(); 54 } 55 56 @Override 57 public void onCreate(SQLiteDatabase db) { 58 super.onOpen(db); 59 this.createDatabase = true; 60 } 61 62 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 63 onUpgrade(db, oldVersion, newVersion); 64 } 65 66 private static int copy(InputStream input, OutputStream output) throws IOException { 67 byte[] buffer = new byte[1024 * 4]; 68 int count = 0; 69 int n = 0; 70 while(-1 != (n = input.read(buffer))) { 71 output.write(buffer, 0, n); 72 count += n; 73 } 74 75 output.flush(); 76 input.close(); 77 output.close(); 78 79 return count; 80 } 81}
java
1public class ExpandableListViewChildData { 2 public static List<List<Map<String, String>>> allChildList = new ArrayList<List<Map<String, String>>>(); 3 private static List<Map<String, String>> ChildList = new ArrayList<Map<String, String>>(); 4 private static Map<String, String> ChildData = new HashMap<String, String>(); 5 public static String[] key = {"TITLE"}; 6 7 public static List<List<Map<String, String>>> getData(String place, SQLiteDatabase db) { 8 String[] column = {"name", "expendable"}; 9 String where = "place1=? OR place2=?"; 10 String[] whereArgs = {place, place}; 11 Cursor cursor = db.query("Name", column, where, whereArgs, null, null, null, null); 12 String[] expendable = {"A", "B"}; 13 14 try { 15 for(String ex : expendable) { 16 if (cursor.moveToFirst()) { 17 do { 18 String name = cursor.getString(cursor.getColumnIndex("name")); 19 String expendableDatabase = cursor.getString(cursor.getColumnIndex("expendable")); 20 if (ex.equals(expendableDatabase)) { 21 ChildData.put(key[0], name); 22 } 23 } while(cursor.moveToNext()); 24 } 25 ChildList.add(ChildData); 26 27 28 } 29 allChildList.add(ChildList); 30 } finally { 31 db.close(); 32 } 33 34 return allChildList; 35 } 36} 37
###試したこと
デバッグして、Databaseがコピーされていることを確認。SQLite Browserでデータベースを作成して、それをターミナルでtableが存在してることを確認。
###補足情報(言語/FW/ツール等のバージョンなど)
API 21
いろいろ調べてみましたが、よくわかりませんでした。ぜひご教授ください。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。