簡體   English   中英

Logcat android.database.sqlite.SQLiteException:沒有這樣的表

[英]Logcat android.database.sqlite.SQLiteException: no such tables

抱歉,如果這是其他許多人問的一個問題..但我檢查了他們的問題,但找不到解決方案(抱歉,菜鳥在這里..)

這是我的logcat

11-13 00:38:34.267: E/AndroidRuntime(532): FATAL EXCEPTION: main
11-13 00:38:34.267: E/AndroidRuntime(532): android.database.sqlite.SQLiteException: no such table: translate: , while compiling: SELECT _id,kata_indo,kata_toraja FROM translate WHERE kata_indo = 'anjing' ORDER BY kata_indo
11-13 00:38:34.267: E/AndroidRuntime(532):  at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
11-13 00:38:34.267: E/AndroidRuntime(532):  at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
11-13 00:38:34.267: E/AndroidRuntime(532):  at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
11-13 00:38:34.267: E/AndroidRuntime(532):  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80)
11-13 00:38:34.267: E/AndroidRuntime(532):  at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
11-13 00:38:34.267: E/AndroidRuntime(532):  at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
11-13 00:38:34.267: E/AndroidRuntime(532):  at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
11-13 00:38:34.267: E/AndroidRuntime(532):  at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1315)
11-13 00:38:34.267: E/AndroidRuntime(532):  at kamus.indonesia.toraja.TranslateIndonesia.trans(TranslateIndonesia.java:107)
11-13 00:38:34.267: E/AndroidRuntime(532):  at kamus.indonesia.toraja.TranslateIndonesia$1.onClick(TranslateIndonesia.java:45)
11-13 00:38:34.267: E/AndroidRuntime(532):  at android.view.View.performClick(View.java:2408)
11-13 00:38:34.267: E/AndroidRuntime(532):  at android.view.View$PerformClick.run(View.java:8816)
11-13 00:38:34.267: E/AndroidRuntime(532):  at android.os.Handler.handleCallback(Handler.java:587)
11-13 00:38:34.267: E/AndroidRuntime(532):  at android.os.Handler.dispatchMessage(Handler.java:92)
11-13 00:38:34.267: E/AndroidRuntime(532):  at android.os.Looper.loop(Looper.java:123)
11-13 00:38:34.267: E/AndroidRuntime(532):  at android.app.ActivityThread.main(ActivityThread.java:4627)
11-13 00:38:34.267: E/AndroidRuntime(532):  at java.lang.reflect.Method.invokeNative(Native Method)
11-13 00:38:34.267: E/AndroidRuntime(532):  at java.lang.reflect.Method.invoke(Method.java:521)
11-13 00:38:34.267: E/AndroidRuntime(532):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-13 00:38:34.267: E/AndroidRuntime(532):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-13 00:38:34.267: E/AndroidRuntime(532):  at dalvik.system.NativeStart.main(Native Method)

這是我發生錯誤的班級translateindonesia.java

package kamus.indonesia.toraja;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteConstraintException;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class TranslateIndonesia extends Activity {

    Button translate, back;
    EditText bhsIndonesia, bhsToraja;
    String translateIndonesia;
    public Cursor mCursor;
    public DbHelper helper;
    public SQLiteDatabase db = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_translateindonesia);

        helper = new DbHelper(this);
        db = helper.getWritableDatabase();
        translate = (Button) findViewById(R.id.btnTerjemahkanIndonesia);
        back = (Button) findViewById(R.id.btnBack);
        bhsIndonesia = (EditText) findViewById(R.id.editTextIndonesia);
        bhsToraja = (EditText) findViewById(R.id.editTextToraja);

        translate.setOnClickListener(new View.OnClickListener() {
            //@Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String search = bhsIndonesia.getText().toString().toLowerCase();
                if (search.contains(" ")){
                    parsing ();
                }
                else{
                    trans ();
                }

            }
        });

        back.setOnClickListener(new View.OnClickListener() {
            //@Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent menu = new Intent(TranslateIndonesia.this,MainActivity.class);
                menu.putExtra("pesan", "From TranslateIndonesia Menu");
                startActivity(menu);
            }
        });
    }

    public void parsing (){
        String search = bhsIndonesia.getText().toString().toLowerCase();
        Cursor cursor = null;
        String temp[] = search.split("[^a-zA-Z]+");
        String tempS[] = search.split("[a-zA-Z]+");
        Boolean char1 = search.substring(0, 1).matches("[a-zA-Z]");
        bhsToraja.setText("");

        for(int i = 0; i < temp.length; i++){
            try{
                db = helper.getWritableDatabase();
                cursor = db.rawQuery("SELECT LOWER(kata_indo) as kata_indo, LOWER (kata_toraja) as kata_toraja FROM translate WHERE Lower(kata_indo) = ?", new String[]{temp[i]});
                int countRow = cursor.getCount();
                cursor.moveToFirst();
                String specialChar = "";
                if(tempS.length > i){
                    specialChar = tempS[i];
                }
                if(!char1){
                    if(countRow > 0){
                        bhsToraja.append(cursor.getString(cursor.getColumnIndex("kata_toraja")) + specialChar);
                    } else {
                        bhsToraja.append(temp[i] + specialChar);
                    }
                } else {
                    if(countRow > 0){
                        bhsToraja.append(specialChar + cursor.getString(cursor.getColumnIndex("kata_toraja")));
                    } else {
                        bhsToraja.append(specialChar + temp[i]);
                    }
                }
                //
            }
            catch(SQLiteConstraintException ex){
                bhsToraja.setText(ex.toString());
            }
        }
        if(tempS.length > 0 && tempS.length > temp.length){
            bhsToraja.append(tempS[tempS.length-1]);
        }
    }

    public void trans(){
        String result = "";
        String search = bhsIndonesia.getText().toString().toLowerCase();
        mCursor = db.rawQuery("SELECT _id,kata_indo,kata_toraja FROM translate " + "WHERE kata_indo = '"+search+"' ORDER BY kata_indo",null);
        if(mCursor.moveToFirst()){
            result = mCursor.getString(2);
            for(;!mCursor.isAfterLast();mCursor.moveToNext()){
                result = mCursor.getString(2);
            }
        }
        if(result.equals("")){
            result = "Kata tidak ditemukan";
        }
        bhsToraja.setText(result);
    }
//end   

}

我是否需要編輯一些行,或者即使我在資產文件夾中放入一個數據庫也不存在我的數據庫?

非常感謝您的幫助。

這是DBHelper.java

package kamus.indonesia.toraja;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.ContentValues;
import android.content.Context;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;

public class DbHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "dbkamus.sqlite";
    public static final String KEY_ROWID = "_id";
    private static final int VERSION = 1;
    private static File DATABASE_FILE;
    private boolean mInvalidDatabaseFile = false;
    private boolean mIsUpgraded = false;
    private Context mContext;
    private int mOpenConnections = 0;
    private static DbHelper mInstance;

    synchronized static public DbHelper getInstance(Context context){
        if(mInstance == null) {
            mInstance = new DbHelper(context.getApplicationContext());
        }
        return mInstance;

    }

    public DbHelper(Context context){
        super(context, DATABASE_NAME, null, VERSION);
        this.mContext = context;
        SQLiteDatabase db = null;
        try{
            db = getReadableDatabase();
            if (db != null){
                db.close();
            }
            DATABASE_FILE = context.getDatabasePath(DATABASE_NAME);
            if (mInvalidDatabaseFile){
                copyDatabase();
            }
            if(mIsUpgraded){
                doUpgrade();
            }
        }catch (SQLiteException e){

        }finally {
            if(db != null && db.isOpen()){
                db.close();
            }
        }
    }
    @Override
    public void onCreate(SQLiteDatabase db){
        mInvalidDatabaseFile = true;
    }
    @Override
    public void onUpgrade(SQLiteDatabase database, int old_version, int new_version){
        mInvalidDatabaseFile = true;
        mIsUpgraded = true;
    }
    private void doUpgrade(){

    }
    @Override
    public synchronized void onOpen(SQLiteDatabase db){
        super.onOpen(db);
        mOpenConnections++;
        if(!db.isReadOnly()){
            db.execSQL("PRAGMA foreign_keys=ON;");;
        }
    }
    @Override
    public synchronized void close(){
        mOpenConnections--;
        if(mOpenConnections == 0){
            super.close();
        }
    }

    private void copyDatabase(){
        AssetManager assetManager = mContext.getResources().getAssets();
        InputStream in = null;
        OutputStream out = null;
        try{
            in = assetManager.open(DATABASE_NAME);
            out = new FileOutputStream(DATABASE_NAME);
            byte[] buffer = new byte[1024];
            int read = 0;
            while((read = in.read(buffer)) != -1){
                out.write(buffer, 0, read);
            }
        } catch(IOException e){

        }finally{
            if(in != null){
                try{
                    in.close();
                }catch(IOException e){}
            }
            if(out != null){
                try{
                    out.close();
                }catch(IOException e){}
            }
        }
        setDatabaseVersion();
        mInvalidDatabaseFile = false;

    }

    private void setDatabaseVersion(){
        SQLiteDatabase db = null;
        try{
            db = SQLiteDatabase.openDatabase(DATABASE_FILE.getAbsolutePath(), null, SQLiteDatabase.OPEN_READWRITE);
            db.execSQL("PRAGMA user_version = " + VERSION);
        } catch(SQLiteException e){

        }finally{
            if(db != null && db.isOpen()){
                db.close();
            }
        }
    }

    public Cursor getAll(){
        return(getReadableDatabase().rawQuery("SELECT _id, kata_indo, kata_toraja from translate ORDER BY _id ASC", null));
    }

    public void insertKey(String indo, String toraja){
        ContentValues cv = new ContentValues();
        cv.put("kata_indo", indo);
        cv.put("kata_toraja", toraja);
        getWritableDatabase().insert("translate","kata_indo", cv);
    }

    public void delete(long id){
        getWritableDatabase().delete("translate", KEY_ROWID + "=" + id, null);
    }

}

1)啟動您的應用程序。 2)轉到ADM監視器3)查找您的應用程序=>轉到數據以查找數據庫並刪除4)重新啟動應用程序///////////////////////////當您聲明時)

建議:不要使對象和數據庫具有相同的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM