2013-07-22 2 views
0

У меня есть существующая база данных sqlite. Я разрабатываю приложение для Android и хочу связать его с существующей базой данных sqlite.Извлечь данные из существующей базы данных sqlite

Задача 1: Я уже включили SQLite базы данных в моем проекте с помощью «функции толчок базы данных DDMS» как за посоветуйте мой инструктор. Теперь я хочу получить данные из базы данных, мне нужно использовать 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.

ответ

4

Методы 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; 
} 
+0

Я видел, что ТПИ, но у меня есть небольшая проблема в отношении этого. Он говорит, что все ваши таблицы должны иметь поле _id. Но у меня есть таблица, которая не имеет поля первичного ключа. И согласно учебному пособию, мне нужно иметь поле первичного ключа, называемое _id. Теперь для этого мне нужно воссоздать таблицу, которая будет потерей данных. что делать .. – divyang7

+0

hmm ...Я использовал этот учебник и столбец моего идентификатора в одной таблице как «id», и ни одна из моих других таблиц не имеет целочисленного первичного ключа, и он отлично подходит для меня ... – TronicZomB

+0

Я отредактировал свой вопрос и включил изображение, структура таблицы, в которой отсутствует первичный ключ _id. Остальные таблицы имеют первичный ключ _id и, таким образом, выполняют условие учебника, которое вы предоставили. – divyang7

1

Если вы не очень комфортно с запросами, базы данных и т.д. Я настоятельно рекомендую вам использовать http://satyan.github.io/sugar/, он также удалит много из код котла, необходимый для работы с sqlite в Android

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