【问题标题】:SQLite exception: no such table on EclipseSQLite 异常:Eclipse 上没有这样的表
【发布时间】:2012-11-12 21:43:42
【问题描述】:

我正在尝试复制位于资产上的现有数据库,以便我可以访问其静态信息,但我遇到了“没有这样的表”错误。

Logcat(其中一些,如果需要我会发布更多):

11-25 01:30:49.863: E/SQLiteLog(627): (1) no such table: myTable
11-25 01:30:49.873: E/DataAdapter(627): getTestData >>android.database.sqlite.SQLiteException: no such table: myTable (code 1): , while compiling: SELECT * FROM myTable
11-25 01:30:49.873: D/AndroidRuntime(627): Shutting down VM
11-25 01:30:49.873: W/dalvikvm(627): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
11-25 01:30:49.882: E/AndroidRuntime(627): FATAL EXCEPTION: main
11-25 01:30:49.882: E/AndroidRuntime(627): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.adiel.cookbook/com.adiel.cookbook.MainActivity}: android.database.sqlite.SQLiteException: no such table: myTable (code 1): , while compiling: SELECT * FROM myTable
11-25 01:30:49.882: E/AndroidRuntime(627):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
11-25 01:30:49.882: E/AndroidRuntime(627):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)

数据库处理程序:

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

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBHandler extends SQLiteOpenHelper
{
private static String TAG = "DataBaseHelper"; // Tag just for the LogCat window
//destination path (location) of our database on device
private static String DB_PATH = ""; 
private static String DB_NAME ="CookbookDB";// Database name
private SQLiteDatabase mDataBase; 
private final Context mContext;

public DBHandler(Context context) 
{
super(context, DB_NAME, null, 1);// 1? its Database Version
DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
this.mContext = context;
}   

public void createDataBase() throws IOException
{
//If database not exists copy it from the assets

boolean mDataBaseExist = checkDataBase();
if(!mDataBaseExist)
{
    this.getReadableDatabase();
    this.close();
    try 
    {
        //Copy the database from assets
        copyDataBase();
        Log.e(TAG, "createDatabase database created");
    } 
    catch (IOException mIOException) 
    {
        throw new Error("ErrorCopyingDataBase");
    }
}
}

   //  Check that the database exists here: /data/data/your package/databases/DaName
private boolean checkDataBase()
{
    File dbFile = new File(DB_PATH + DB_NAME);
    //Log.v("dbFile", dbFile + "   "+ dbFile.exists());
    return dbFile.exists();
}




//Copy the database from assets
private void copyDataBase() throws IOException
{
    InputStream mInput = mContext.getAssets().open(DB_NAME);
    String outFileName = DB_PATH + DB_NAME;
    OutputStream mOutput = new FileOutputStream(outFileName);
    byte[] mBuffer = new byte[1024];
    int mLength;
    while ((mLength = mInput.read(mBuffer))>0)
    {
        mOutput.write(mBuffer, 0, mLength);
    }
    mOutput.flush();
    mOutput.close();
    mInput.close();
}

有什么想法吗?

【问题讨论】:

  • 你在使用SQLiteOpenHelper吗?
  • 是的,我是。编辑后会更清楚。

标签: android database sqlite exception


【解决方案1】:

其实很简单

您忘记写带有扩展名的数据库名称

在您的代码中:

private static String DB_NAME ="CookbookDB";// Database name

应该是

private static String DB_NAME ="CookbookDB.sqlite";// Database name

或者您的确切数据库扩展名是什么。

还有一个问题仍然存在。没有升级方法。例如,如果您将来发布此应用程序并且想要对应用程序进行更新。会有一个问题。已经使用您的应用并尝试更新的人无法看到您的新数据库。

你应该小心

【讨论】:

    猜你喜欢
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2015-04-21
    • 1970-01-01
    相关资源
    最近更新 更多