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 이 있어야 할텐데
정확한 에러문을 보고 싶다면
thrownewError("Error copying database"); 를 e.printStackTrace()로 바꿔주세요.