마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

외부 디비 assets 에 넣어서 쓸때 테이블 오류가 나요

0 추천
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" />이것도 추가 했어요

몰라요ㅜ (120 포인트) 님이 2017년 6월 2일 질문
몰라요ㅜ님이 2017년 6월 2일 수정

1개의 답변

0 추천
food 라는 테이블이 있는지 확인해보세요.
개발자초심 (21,220 포인트) 님이 2017년 6월 5일 답변
...