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

제발도와주세요.. 앱이 실행하려는순간 크래쉬떠요.

0 추천
로그캣 입니다.

W/Database: Copy Success
E/SQLiteLog: (1) no such table: tblWord
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.tistory.kimdogul.pldictionary, PID: 16535
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tistory.kimdogul.pldictionary/com.tistory.kimdogul.pldictionary.MainActivity}: android.database.sqlite.SQLiteException: no such table: tblWord (code 1 SQLITE_ERROR): , while compiling: Select * From tblWord Where word Like '%'
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
등등....
     Caused by: android.database.sqlite.SQLiteException: no such table: tblWord (code 1 SQLITE_ERROR): , while compiling: Select * From tblWord Where word Like '%'
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:903)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:514)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
        at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
        at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46)
        at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1408)
        at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1347)
        at com.tistory.kimdogul.pldictionary.utils.DatabaseHelper.getListWord(DatabaseHelper.java:55)
        at com.tistory.kimdogul.pldictionary.MainActivity.onCreate(MainActivity.java:51)
  등등

이런식으로뜨는데, 분명 asset에 추가한 db는 제대로 테이블도 tblWord라고 생성되어있고

내부에 칼럼도 1 id (integer) 2. word(text) 3.definition(text)로 잘 배정되어있습니다.

 

그리고 쿼리문 부분 도저히 어떻게 수정해야될지 모르겠습니다..제발 도와주세요.

하단의 Cursor cursor=mDatabase.rawQuery("Select * From tblWord Where word Like '%'",args);

이부분입니다.

package com.tistory.kimdogul.pldictionary.utils;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
import java.util.List;

public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String DBNAME="dictionary.sqlite";
    public static final String DBLOCATION="/data/data/com.tistory.kimdogul.pldictionary/databases/";
    private Context mContext;
    private SQLiteDatabase mDatabase;

    public DatabaseHelper(Context context){
            super(context, DBLOCATION+DBNAME,null,1);
            this.mContext=context;
    }
    @Override
    public void onCreate(SQLiteDatabase db) {

    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
    public void openDatabse(){
        String dbPath=mContext.getDatabasePath(DBNAME).getPath();
        if(mDatabase!=null && mDatabase.isOpen()){
            return;
        }
        mDatabase=SQLiteDatabase.openDatabase(dbPath,null,SQLiteDatabase.OPEN_READWRITE);
    }
    public void closeDatabase(){
        if(mDatabase !=null){
            mDatabase.close();
        }
    }
    public List<DictionaryModel> getListWord(String wordSearch){
        DictionaryModel dictionaryModel=null;
        List<DictionaryModel> dictionaryModelList=new ArrayList<>();
        openDatabse();
        String[] args={"%"+wordSearch+"%"};

        Cursor cursor=mDatabase.rawQuery("Select * From tblWord Where word Like '%'",args);
        cursor.moveToFirst();
        while (!cursor.isAfterLast()){
            dictionaryModel=new DictionaryModel(cursor.getString(0),cursor.getString(1),cursor.getString(2));
            dictionaryModelList.add(dictionaryModel);
            cursor.moveToNext();

        }
        cursor.close();
        closeDatabase();
        return dictionaryModelList;
    }
}
kimdogul (120 포인트) 님이 2018년 11월 19일 질문

2개의 답변

0 추천

super(context, DBLOCATION+DBNAME,null,1);

DBLOCATION+DBNAME == "/data/data/com.tistory.kimdogul.pldictionary/databases/dictionary.sqlite"

DB name이 들어가야 할곳에 DB full path가 들어가서, DB가 제대로생성되지 않아서 나오는 로그입니다.

생성된 DB가 없다고 하네요.

 

디자이너정 (42,810 포인트) 님이 2018년 11월 19일 답변
0 추천
DB가 생성안됬대요

 

Log.e("DATA LIST =", DatabaseUtils.dumpCursorToString(cursor)); 이걸로 안에 제대로 뭐 들었나보세요
알파고 (4,320 포인트) 님이 2018년 11월 20일 답변
...