PCで先に作ったSQLiteにあるデータベースの情報を表示させるためにはどうすればよろしいでしょうか。
前回も同じような質問をし、回答を頂いてから、androidアプリでデータベースにあるデータを表示するためのプログラムを
組んでみたのですがやはり出来ません。参考に示していただいたURLを読んで自分なりにやってみたところ、そもそもPCで先に作っていた
データベースをアプリに使う為に必要な準備をしていないことが分かり、様々なサイトを見ながら、取り込んだデータベースを
新たに作成したデータベースにコピーしたりしたはずなのですが、動きません。
今現在は、まずLogで確認するためのコードにしていますが、Cursorに値が含まれていないのかc.moveToFirstがfalseになり、、
Logに表示されません。また、c.getStringで取得しようとするとエラーが起きアプリ自体が止まります。
どうすればよろしいでしょうか。
よろしくお願いいたします。
※追記
コピーすることは諦め、onCreateメソッドでデータベースを作成することにしました。
作成時にサンプルデータをいくつか挿入するようにもしました。
データベースの作成には成功したのですが(デバッグでデータベースを作成する処理を通ったことも確認済み)
やはり表示がされませんでした。Cursorに値が入っていない(※nullではない)ことを確認しましたが、なぜ入らないのか分かりません。
何が考えられるでしょうか。度々申し訳ございません。
Java
1public class EmployeeView extends Activity{ 2 3 ListView myListView; 4 5 6 public void onCreate(Bundle bundle){ 7 super.onCreate(bundle); 8 setContentView(R.layout.view); 9 10 //メニューへ戻る押下時 11 findViewById(R.id.button_Menu).setOnClickListener(buttonMenu); 12 13 myListView = findViewById(R.id.myListView); 14 15 DBHelper dbHelper = new DBHelper(EmployeeView.this); 16 SQLiteDatabase db = dbHelper.getReadableDatabase(); 17 Cursor c = db.rawQuery("SELECT * FROM m_employee;",null); 18 if(c.moveToFirst()) { 19 do { 20 Log.v("mytag",c.getString(c.getColumnIndex("emp_code"))); 21 } while (c.moveToNext()); 22 } 23 c.close(); 24 } 25 26 View.OnClickListener buttonMenu = new View.OnClickListener() { 27 @Override 28 public void onClick(View view) { 29 Intent intent = new Intent(getApplicationContext(),Menu.class); 30 startActivity(intent); 31 32 } 33 }; 34}
Java
1public class DBHelper extends SQLiteOpenHelper{ 2 private static String DB_NAME = "emp_sys_db"; 3 private static Context context = null; 4 private static final int DB_Ver = 1; 5 6 public DBHelper(Context context) { 7 super(context,DB_NAME,null,DB_Ver); 8 this.context = context; 9 10 try { 11 if (! databaseExists()) { 12 copyDB(); 13 } 14 } catch (IOException e) { 15 e.printStackTrace(); 16 } 17 } 18 19 @Override 20 public void onCreate(SQLiteDatabase db) { 21 } 22 23 @Override 24 public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) { 25 try { 26 copyDB(); 27 } catch (IOException e) { 28 e.printStackTrace(); 29 } 30 } 31 32 //dbファイルの存在チェック 33 private boolean databaseExists() { 34 File dbFile = new File(this.context.getFilesDir().getParent()+"/databases/"+DB_NAME); 35 36 return dbFile.exists(); 37 } 38 39 //assetのdbファイルをコピーする 40 private void copyDB() throws IOException { 41 //コピー先フォルダ 42 String copyFolder = this.context.getFilesDir().getParent()+"/databases/"; 43 44 //フォルダがない場合は作成 45 File checkDirectory = new File(copyFolder); 46 if(! checkDirectory.exists()) { 47 checkDirectory.mkdir(); 48 } 49 50 //ファイルのインプット、アウトプットのセット 51 InputStream in = this.context.getAssets().open(DB_NAME); 52 OutputStream out = new FileOutputStream(copyFolder + DB_NAME); 53 54 //ファイルのコピー 55 byte[] buf = new byte[1024]; 56 int len = 0; 57 while((len = in.read(buf)) > 0) { 58 out.write(buf,0,len); 59 } 60 61 //インプット、アウトプットのクローズ 62 in.close(); 63 out.close(); 64 } 65 66} 67
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/05 07:03
2017/09/05 07:14 編集
2017/09/05 07:36