import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class MySQLiteHandler {
private static String TABLE_NAME = "first_aid";
Context ctx;
MySQLiteOpenHelper helper;
SQLiteDatabase db;
public MySQLiteHandler(Context ctx) {
//helper = new MySQLiteOpenHelper(ctx);
//db = helper.createDataBase();
db = new MySQLiteOpenHelper().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(TABLE_NAME, null, null, null, null, null, null);
return c;
}
//_id 일치 데이터 얻기
public Cursor select(String _child) {
Cursor c = db.query(TABLE_NAME, null, "type = ?", new String[]{ _child }, null, null, null);
return c;
}
public Cursor select2(String str) {
Cursor c = db.query(TABLE_NAME, new String[]{ "distinct"+ " " + str }, null, null, null, null, null);
return c;
}
public Cursor select_type(String num) {
Cursor c = db.query(TABLE_NAME, 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(TABLE_NAME, null, "title_num=" + "'" + str1 + "'" + "and" + " " + "type_num=" + "'" + str2 + "'", null, null, null, null);
return c;
}
public Cursor select_test(String _id) {
Cursor c = db.query(TABLE_NAME, null, "key = ?", new String[]{ _id }, null, null, null);
return c;
}
} 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 {
String savePath = "/mnt/sdcard/firstaid.db";
//String savePath = "/data/data/com.same/databases/firstaid2.db";
Context ctx;
public SQLiteDatabase createDatabase(){
SQLiteDatabase db;
db = SQLiteDatabase.openDatabase(savePath, null, 0 );
if( db == null ){
try{
InputStream myInput = ctx.getAssets().open("firstaid.db");
String outFileName = "first.sqlite";
OutputStream myOutput = new FileOutputStream(savePath);
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){
//hrow new Error("Error copying database");
e.printStackTrace();
}
db = SQLiteDatabase.openDatabase(savePath, null, 0 );
}//end if
return db;
}//end createDatabase
}//end class답변대로 퍼미션을 추가해 DB에 저장된 데이터를 에뮬이나 폰에서 셀렉문으로 가져오는건 됬는데
문제는 sqlite database browser로 DB에 데이터를 더 추가시킨 뒤 assets 에 넣어서 돌려보면
추가시킨 데이터가 불러와지지 않습니다....
프로젝트를 지웠다 다시 불러오거나 앱을 재설치해도 그대로 기존의 자료 밖에 가져올 수 없습니다...
뭐가 원인인지 몰라서 다시 한번 질문글을 남겨봅니다..
로그캣
08-18 09:48:38.231: E/AndroidRuntime(922): FATAL EXCEPTION: main
08-18 09:48:38.231: E/AndroidRuntime(922): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.same/com.same.Cont}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
08-18 09:48:38.231: E/AndroidRuntime(922): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
08-18 09:48:38.231: E/AndroidRuntime(922): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
08-18 09:48:38.231: E/AndroidRuntime(922): at android.app.ActivityThread.access$600(ActivityThread.java:123)
08-18 09:48:38.231: E/AndroidRuntime(922): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
08-18 09:48:38.231: E/AndroidRuntime(922): at android.os.Handler.dispatchMessage(Handler.java:99)
08-18 09:48:38.231: E/AndroidRuntime(922): at android.os.Looper.loop(Looper.java:137)
08-18 09:48:38.231: E/AndroidRuntime(922): at android.app.ActivityThread.main(ActivityThread.java:4424)
08-18 09:48:38.231: E/AndroidRuntime(922): at java.lang.reflect.Method.invokeNative(Native Method)
08-18 09:48:38.231: E/AndroidRuntime(922): at java.lang.reflect.Method.invoke(Method.java:511)
08-18 09:48:38.231: E/AndroidRuntime(922): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-18 09:48:38.231: E/AndroidRuntime(922): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-18 09:48:38.231: E/AndroidRuntime(922): at dalvik.system.NativeStart.main(Native Method)
08-18 09:48:38.231: E/AndroidRuntime(922): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
08-18 09:48:38.231: E/AndroidRuntime(922): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:400)
08-18 09:48:38.231: E/AndroidRuntime(922): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
08-18 09:48:38.231: E/AndroidRuntime(922): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
08-18 09:48:38.231: E/AndroidRuntime(922): at com.same.Cont.onCreate(Cont.java:68)
08-18 09:48:38.231: E/AndroidRuntime(922): at android.app.Activity.performCreate(Activity.java:4465)
08-18 09:48:38.231: E/AndroidRuntime(922): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
08-18 09:48:38.231: E/AndroidRuntime(922): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
08-18 09:48:38.231: E/AndroidRuntime(922): ... 11 more
저도 그 부분이 이상한게
예를 들어 기존의 DB에 30개 정도의 데이터가 들어있고 더 추가해서 50이 되었다고하면
똑같은 조건으로 셀렉문을 날리기에 로그캣에 나온대로 인덱스가 0이라면 전부다 안되야할텐데
(테스트를 위해 인덱스 값으로 검색을 했는데도 검색이 안됩니다)
로그 찍어보면 30까지는 제대로 데이터가 검색이 되고 이후 추가한 31~50까지의 데이터는 검색시 오류가 뜹니다.
sqlite database browser로 확인해보면 테이블에 데이터는 모두 제대로 들어있습니다.
db 파일을 assets폴더에 다시 넣어보거나 에뮬내에 databases 폴더를 만들어 넣어도 그대로니 어떻게 해야할지를 모르겠습니다...




Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
디비 사이즈가 0인데 데이터를 읽을려고해서 오류가 난다네요.
데이터 저장이 제대로 안됐거나 읽을때 쿼리문이 잘못된듯하네요.