android DBAdapter类出错

时间:2010-06-24 01:39:29

标签: android database eclipse sqlite

这是我程序logcat的错误。

06-24 01:35:04.213:INFO / ActivityManager(587): 开始活动:意图{comp = {one.two / one.two.Arrival}} 06-24 01:35:04.521:ERROR / DBDroid(1048):android.database.sqlite.SQLiteException:没有这样的表:port :,编译时:SELECT KEY_STATUS,KEY_ID,KEY_ARRIVAL,KEY_DESTINATION,KEY_FERRY FROM ferry 06-24 01:35:05.026:INFO / ActivityManager(587):显示的活动one.two / .Arrival:805 ms

似乎声明没有名为port的表。 但我确实有一个名为port的表放在模拟器中,位于data / data / one.two / databases

这是我的部分DBAdapter代码:

    public class DBAdapter extends ListActivity {
public static  String KEY_STATUS = "status";
public static  String KEY_ID = "id";
public static  String KEY_ARRIVAL = "arrival";
public static  String KEY_DESTINATION = "destination";
public static  String KEY_FERRY = "ferry";

private static final String DATABASE_NAME = "ferry";
private static final String DATABASE_TABLE = "port";

private static final int DATABASE_VERSION = 1;

 private static  Context context;
 private static DatabaseHelper DBHelper;
 private static SQLiteDatabase db;

顺便说一下,这里的任何人都知道这个方法的作用:

public DBAdapter(Context ctx)
{
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends SQLiteOpenHelper
{
    DatabaseHelper(Context context)
    {
        super(context, "ferry", null, 1);
    }

@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
    }

    @Override
    public void onCreate(SQLiteDatabase db)
    {
    }
}//end DatabaseHelper

// ---opens the database---
public DBAdapter open() throws SQLException
{
    db = DBHelper.getWritableDatabase();
    return this;
}

// ---closes the database---
public void close()
{
    DBHelper.close();
}

谢谢。

2 个答案:

答案 0 :(得分:1)

您应该将表创建代码放在DatabaseHelper.onCreate()方法 - SQL CREATE语句中,用于您将在其他查询中使用的所有表。

修改

除非您在应用程序包中提供已在Android外部创建的“.db”文件(例如,使用SQLite Database Browser工具 - http://sqlitebrowser.sourceforge.net)(例如已填充数据)。然后你不必在这里放任何代码(此外如果你把代码试图创建存在的表,你会得到一个SQL异常)。

答案 1 :(得分:0)

你绝对确定桌子存在吗?

尝试从shell打开数据库调用以下命令(我猜DATABASE_NAME是数据库文件的名称):

adb shell
sqlite3 /data/data/one.two/databases/ferry

SQLite控制台应该打开。然后列出表格:

.tables

使用.quit退出SQLite。

修改

如果你的数据库文件是ferry.db,那么DATABASE_NAME也应该是“ferry.db”