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类,它处理关于数据库的所有事情。我不建议您在活动中执行查询或解析数据。这将使您的代码更好、更具可读性。