0

我有一个现有的 sqlite 数据库。我正在开发一个 android 应用程序,我想将它与这个现有的 sqlite 数据库连接起来。

问题 1: 我已经按照导师的建议通过“DDMS 推送数据库功能”将 sqlite 数据库包含在我的项目中。现在我想从数据库中获取数据,是否需要使用 SQLiteOpenHelper。如果是,如何使用它以及将在 onCreate(SQLiteDatabase db) 函数和 onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 函数中编码什么,因为我们已经有了数据库,我们真的不需要创建它.

问题 2: 应该怎么做才能从现有数据库中简单地获取所需的数据。

作为一个新手,我很困惑,有人可以解释这些概念并指导我克服这个问题。任何帮助,将不胜感激。

我也看到了@TronicZomB 建议的用于此目的的教程,但根据本教程(http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/) ,我必须拥有所有主键字段为 _id 的表。

我有 7 个表,即目的地、事件、旅游、旅游猫、旅游目的地、android_metadata 和 sqlite_sequence。总之,只有 tour_dest 不满足具有名为 _id 的主键的条件。如何弄清楚这个?

以下是缺少绑定数据库表的 id 字段所需的主键字段的表的屏幕截图。 缺少绑定数据库表的 id 字段所需的主键字段的表的屏幕截图。

4

3 回答 3

5

和方法将为空onCreateonUpgrade因为您已经拥有数据库。这里有一个关于如何实现这一点的很棒的教程。

然后,您可以像这样访问数据库(示例):

public ArrayList<String> getValues(String table) {
    ArrayList<String> values = new ArrayList<String>();

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT value FROM " + table, null);

    if(cursor.moveToFirst()) {
        do {
            values.add(cursor.getString(cursor.getColumnIndex("value")));
        }while(cursor.moveToNext());
    }

    cursor.close();
    db.close();
    return values;
}
于 2013-07-22T18:21:07.863 回答
1

除非您对查询、数据库等非常熟悉。我强烈建议您使用http://satyan.github.io/sugar/,它还会删除很多在 Android 中执行 sqlite 所需的样板代码

于 2013-07-22T18:22:06.943 回答
1

1.如果DB已经存在,onCreate则不会调用。onUpgrade仅当您更改数据库版本时才会调用。onUpgrade如果你的APP的数据库发生了一些变化,你应该使用,并且你必须在新的数据结构上顺利迁移。

public class DbInit extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "name";
    private static final int DATABASE_VERSION = 3;
    private static final String DATABASE_CREATE = "create table  connections  . .. . ...

    public DbInit(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase database) {
        database.execSQL(DATABASE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
         if (isChangeFromToVersion(1, 2, oldVersion, newVersion)) {
             //Execute UPDATE here
         }
    }

    private boolean isChangeFromToVersion(int from, int to, int oldVersion, int newVersion ) {
        return (from == oldVersion && to == newVersion);
  }
....

2.简单示例如何打开与数据库的连接并获取游标对象。

公共类 DAO {

private SQLiteDatabase database;
private DbInit dbHelper;

public ConnectionDAO(Context context) {
    dbHelper = new DbInit(context);
}

public void open() throws SQLException {
    database = dbHelper.getWritableDatabase();
}

public Connection getConnectionById(long id) {
    Cursor cursor = null;
    try {
        open();
        cursor = database.query(DbInit.TABLE_CONNECTIONS, allColumns, DbInit.COLUMN_ID + " = '" + id + "'", null, null, null, null);
        if (!cursor.moveToFirst())
            return null;
        return cursorToConnection(cursor);
    } finally {
        if (cursor != null)
            cursor.close();
        close();
    }
}

private Connection cursorToConnection(Cursor cursor) {
    Connection connection = new Connection();
    connection.setId(cursor.isNull(0) ? null : cursor.getInt(0));
    connection.setName(cursor.isNull(1) ? null : cursor.getString(1));
    .....
    .....
    return connection;
}
于 2013-07-22T18:24:41.793 回答