package com.same; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import android.content.Context; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class MySQLiteOpenHelper extends SQLiteOpenHelper { private static String DB_path = "/mnt/sdcard/"; private static String DB_name = "firstaid.db"; private final Context con; public MySQLiteOpenHelper(Context context) { super(context, DB_name, null, 1); this.con = context; // TODO Auto-generated constructor stub } // public SQLiteDatabase createDataBase() { SQLiteDatabase checkDB = null; try { String mypath = DB_path + DB_name; checkDB = SQLiteDatabase.openDatabase(mypath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS); } catch (SQLException e) { e.printStackTrace(); } boolean dbExist = checkDB != null ? true : false; if(dbExist) { } else { this.getReadableDatabase(); try { InputStream myInput = con.getAssets().open(DB_name); String outFileName = DB_path + DB_name; OutputStream myOutput = new FileOutputStream(outFileName); byte[] buffer = new byte[1024]; int length; while((length = myInput.read(buffer)) > 0) { myOutput.write(buffer, 0, length); } myOutput.flush(); myOutput.close(); myInput.close(); } catch (IOException e) { throw new Error("Error copying database"); } } return checkDB; } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } }
package com.same; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; public class MySQLiteHandler { Context ctx; MySQLiteOpenHelper helper; SQLiteDatabase db; public MySQLiteHandler(Context ctx) { helper = new MySQLiteOpenHelper(ctx); db = helper.createDataBase(); } //open public static MySQLiteHandler open(Context ctx) { return new MySQLiteHandler(ctx); } public static void close() { } public long insert(String name, String address, String tel) { return 0; } public void delete() { } public int update(String _id, String name, String address, String tel) { return 0; } //selcet all public Cursor select() { Cursor c = db.query("first_aid", null, null, null, null, null, null); return c; } //_id 일치 데이터 얻기 public Cursor select(String _child) { Cursor c = db.query("first_aid", null, "type = ?", new String[]{ _child }, null, null, null); return c; } public Cursor select2(String str) { Cursor c = db.query("first_aid", new String[]{ "distinct"+ " " + str }, null, null, null, null, null); return c; } public Cursor select_type(String num) { Cursor c = db.query("first_aid", new String[]{ "type" }, "title_num=?", new String[]{ num }, null, null, null); return c; } public Cursor selcet_double(String str1, String str2) { //Cursor c = db.query("first_aid", null, "title_num=?, type_num=?", new String[]{ str1, str2 }, null, null, null); Cursor c = db.query("first_aid", null, "title_num=" + "'" + str1 + "'" + "and" + " " + "type_num=" + "'" + str2 + "'", null, null, null, null); return c; } }
안드로이드 공부하면서 간단한 앱을 만들어보려합니다.
SQLlite database browser 로 만든 DB를 불러오려고하는데
에뮬이나 폰으로 DB가 제대로 복사가 되질 않고있습니다.
에러뜬 부분은 없는데 DB 접근만하면 앱이 종료되는지라...
시작한지 얼마안되서 DB관련 검색해서 봐도 뭐가 뭔지 잘 이해가 되지 않아서 어딜 어떻게 손대야할지....
조언부탁드립니다...
아래는 로그캣입니다.
08-17 11:10:56.934: E/AndroidRuntime(645): FATAL EXCEPTION: main
08-17 11:10:56.934: E/AndroidRuntime(645): java.lang.Error: Error copying database
08-17 11:10:56.934: E/AndroidRuntime(645): at com.same.MySQLiteOpenHelper.createDataBase(MySQLiteOpenHelper.java:56)
08-17 11:10:56.934: E/AndroidRuntime(645): at com.same.MySQLiteHandler.<init>(MySQLiteHandler.java:16)
08-17 11:10:56.934: E/AndroidRuntime(645): at com.same.MySQLiteHandler.open(MySQLiteHandler.java:21)
08-17 11:10:56.934: E/AndroidRuntime(645): at com.same.Cont.onCreate(Cont.java:49)
08-17 11:10:56.934: E/AndroidRuntime(645): at android.app.Activity.performCreate(Activity.java:4465)
08-17 11:10:56.934: E/AndroidRuntime(645): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
08-17 11:10:56.934: E/AndroidRuntime(645): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
08-17 11:10:56.934: E/AndroidRuntime(645): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
08-17 11:10:56.934: E/AndroidRuntime(645): at android.app.ActivityThread.access$600(ActivityThread.java:123)
08-17 11:10:56.934: E/AndroidRuntime(645): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
08-17 11:10:56.934: E/AndroidRuntime(645): at android.os.Handler.dispatchMessage(Handler.java:99)
08-17 11:10:56.934: E/AndroidRuntime(645): at android.os.Looper.loop(Looper.java:137)
08-17 11:10:56.934: E/AndroidRuntime(645): at android.app.ActivityThread.main(ActivityThread.java:4424)
08-17 11:10:56.934: E/AndroidRuntime(645): at java.lang.reflect.Method.invokeNative(Native Method)
08-17 11:10:56.934: E/AndroidRuntime(645): at java.lang.reflect.Method.invoke(Method.java:511)
08-17 11:10:56.934: E/AndroidRuntime(645): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-17 11:10:56.934: E/AndroidRuntime(645): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-17 11:10:56.934: E/AndroidRuntime(645): at dalvik.system.NativeStart.main(Native Method)
퍼미션 주셨나요? 위 소스같은 경우 write external permission 이 있어야 할텐데
정확한 에러문을 보고 싶다면
throw
new
Error(
"Error copying database"
); 를 e.printStackTrace()로 바꿔주세요.