从现有的sqlite数据库中获取数据

时间:2013-07-22 18:16:58

标签: android sqlite ddms sqliteopenhelper

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

问题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个表,即目的地,事件,旅游,tour_cat,tour_dest,android_metadata和sqlite_sequence。总而言之,只有tour_dest不满足具有名为_id的主键的条件。怎么弄清楚这一个?

以下是表的屏幕截图,该表缺少绑定数据库表的id字段所需的主键字段。 Screenshot of table which is lacking the primary key field necessary for binding id fields of database tables.

3 个答案:

答案 0 :(得分:5)

由于您已拥有数据库,onCreateonUpgrade方法将为空。有一个很好的教程如何实现这个here

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

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;
}

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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. 简单示例如何打开与DB的连接并获取游标对象。

公共课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;
}