package com.example.user.final_dbtest05;
import android.content.Context;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class MainActivity extends AppCompatActivity {
public static final String ROOT_DIR = "/data/data/com.example.user.final_dbtest05/databases/";
public SQLiteDatabase db;
public Cursor cursor;
ProductDBHelper mHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setDB();
mHelper=new ProductDBHelper(this);
db =mHelper.getWritableDatabase();
cursor = db.rawQuery("select * from food", null);
cursor.getInt(0);
TextView s = (TextView)findViewById(R.id.text);
}
public void setDB() {
File folder = new File(ROOT_DIR);
if(folder.exists()) {
}
else {
folder.mkdirs();
Toast.makeText(this, "폴더생성", Toast.LENGTH_LONG).show();
}
AssetManager assetManager = getResources().getAssets();
File outfile = new File(ROOT_DIR+"kmdc.db"); //--폰에 위치할 경로
InputStream is = null;
FileOutputStream fo = null;
long filesize = 0;
try {
// --asset 폴더 및 복사할 DB 지정
is = assetManager.open("food2.db", AssetManager.ACCESS_BUFFER);
filesize = is.available(); //--사이즈 검증
// 파일이 없거나 패키지 폴더에 설치된 DB파일이 포함된 DB파일 보다 크기가 같지않을 경우 DB파일을 덮어 쓴다.
if (outfile.length() <= 0) {
byte[] tempdata = new byte[(int) filesize];
is.read(tempdata);
is.close();
outfile.createNewFile();
fo = new FileOutputStream(outfile);
fo.write(tempdata);
fo.close();
}
else
{
Toast.makeText(this, "db있음", Toast.LENGTH_LONG).show();
}
} catch (IOException e) {
Toast.makeText(this, "db이동실패", Toast.LENGTH_LONG).show();
}
}
class ProductDBHelper extends SQLiteOpenHelper {
public ProductDBHelper(Context context) {
super(context, "kmdc.db", null, 1);
// TODO Auto-generated constructor stub
}
@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
}
}
}
에러 메시지
androidRuntime: FATAL EXCEPTION: main
Process: com.example.user.final_dbtest05, PID: 9449java.lang.RuntimeException:
Unable to start activity ComponentInfo{com.example.user.final_dbtest05/com.example.user.final_dbtest05.MainActivity}:
android.database.sqlite.SQLiteException: no such table: food (code 1): , while compiling: select * from food
cursor = db.rawQuery("select * from food", null);
cursor.getInt(0);
TextView s = (TextView)findViewById(R.id.text);
이부분을 주석 처리하고 실행하면 db있음이라고 잘 뜨는데 저것만 실행하면 그래요 ㅠㅠ
디비도 잘 만들었고요, activity_main에는 텍스트뷰 하나 만들었어요
다른분들이 만든 예제 그대로 복사해서 써도 자꾸 테이블을 못찾는다고 오류나서
제가 위에 코드처럼 짧게 만들어 본거거든요
도와주세요...ㅠㅠ
아 그리고 매니페스트 파일에
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-sdk android:minSdkVersion="9" />이것도 추가 했어요