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)