Java Logcat android.database.sqlite.SQLiteException:没有这样的表

Java Logcat android.database.sqlite.SQLiteException:没有这样的表,java,android,sqlite,Java,Android,Sqlite,对不起,如果这是一个很多人都会问的问题。。但我检查了他们的问题,但我找不到解决办法(对不起,这里没有人…) 这是我的日志 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 compil

对不起,如果这是一个很多人都会问的问题。。但我检查了他们的问题,但我找不到解决办法(对不起,这里没有人…)

这是我的日志

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)
我需要编辑一些行吗?或者我的数据库不存在,即使我把它放在资产文件夹中

非常感谢你的帮助。。谢谢你

这是
DBHelper.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   

}
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) 重新启动应用程序 //////////////////// 在创建之前初始化dbHelper(声明时)


建议:不要使对象和数据库具有相同的名称。

我认为您的
活动
没有造成任何问题,因为这是数据库不存在的问题,这意味着它没有被创建(或从资产文件夹中的数据库初始化)。您的DBHelper看起来像什么?特别是onCreate,因为这是您应该创建数据库的地方。显示您的数据库类。您的数据库尚未创建。@Jakar我在上面的问题中添加了DbHelper:)很抱歉问你这个问题,你能告诉我它在哪里吗对象和数据库我是说^^它位于sdk管理器和工具箱中的问号之间。在mainactivity中不需要Sqlitedatabase对象,实际上不应该。解析和转换方法应该在dbHelper类中。所以我只需要将解析和转换方法移动到dbHelper类?创建一个单独的dbHelper类,它处理关于数据库的所有事情。我不建议您在活动中执行查询或解析数据。这将使您的代码更好、更具可读性。