我有一个现有的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字段所需的主键字段。
答案 0 :(得分:5)
由于您已拥有数据库,onCreate
和onUpgrade
方法将为空。有一个很好的教程如何实现这个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;
}