2015-11-13 55 views
0

对不起,如果这是一个问题,许多其他问..但我检查自己的问题,但我无法找到解决方案(这里对不起菜鸟..)logcat的android.database.sqlite.SQLiteException:没有这样的表

这里是我的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 

} 

我需要编辑一些行类或我把一个资产我的数据库甚至不存在你s文件夹?

非常感谢你的帮助..之前感谢..

这是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); 
    } 

} 
+0

我不认为你的Activity有什么问题,因为这是数据库不存在的问题,这意味着它没有被创建(或者从assets文件夹中的那个被初始化)。你的DBHelper是什么样的?特别是onCreate,因为这是你应该创建数据库的地方。 – Jakar

+0

显示你的数据库类。你的数据库没有被创建。 – sean

+0

@贾卡尔我在上面的问题中添加了DbHelper .. :) – hanz

回答

0

1)启动应用程序。 2)进入ADM监视器 3)找到您的应用程序=>去数据找到您的数据库并删除 4)重新启动应用程序 //////////////////// 在创建之前启动dbHelper(当您声明时)

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

+0

对于noob问题抱歉,但你能告诉我它在哪里吗? ^^我的意思是对象和数据库.. ^^ – hanz

+0

它是介于sdk管理器和工具箱上的问号。你不需要在主要活动中拥有Sqlitedatabase对象,实际上你不应该这样做。解析和trans方法应该在dbHelper类中。 –

+0

所以我只需要将解析和转换方法移动到dbhelper类? – hanz

相关问题