2012-03-09 35 views
5

Tôi đang sử dụng thư viện orm GreenDao để tạo cơ sở dữ liệu, nó hoạt động tốt với mẫu Đầu tiên cho Tạo cơ sở dữ liệu, từ bên trong mã.Cách tạo cơ sở dữ liệu từ Nội dung trong Android bằng thư viện ORD GreenDao

Bây giờ vấn đề là tôi không thể tìm thấy bất kỳ tài liệu hoặc bất cứ điều gì liên quan đến việc sao chép cơ sở dữ liệu từ thư mục tài sản đến cơ sở dữ liệu bên trong bộ nhớ.

+0

www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/ đọc –

+0

tôi biết cách cơ bản của việc tạo ra một cơ sở dữ liệu từ lớp 'SqliteOpenHelper', nó chỉ là tôi cần sử dụng công cụ 'ORM' này được gọi là' GreenDao', và nó hoạt động như thế nào với thư viện –

+0

@SomeoneSomewhere Hey, bạn có nhận được bất kỳ ví dụ hoặc cách để xử lý Cơ sở dữ liệu SQLite bằng GreenDAO..Xin vui lòng cho chúng tôi biết .. – Akshay

Trả lời

0

Kiểm tra example here để đạt được chức năng này.

+0

Tôi biết cách tạo cơ sở dữ liệu cơ bản từ lớp 'SqliteOpenHelper', Tôi cần phải sử dụng công cụ 'ORM' này được gọi là' GreenDao', và nó hoạt động như thế nào với thư viện của nó –

+0

Bạn KHÔNG trả lời câu hỏi, ngoài ra bạn không nên cung cấp liên kết mà không giải thích bất cứ điều gì. – younes0

+0

Liên kết không hữu ích nhiều trừ khi bạn giải thích –

10

Câu trả lời được chấp nhận cung cấp giải pháp nhưng chỉ đúng một phần. Xem lớp tôi đã đăng bên dưới. Đây là phần mở rộng của lớp OpenHelper của greenDao. Dưới đây là một ví dụ về việc sử dụng nó và cách bạn có thể sử dụng nó thay vì OpenHelper hoặc DevOpenHelper để quản lý bản sao của cơ sở dữ liệu sqlite của bạn.

package com.example; 

import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteException; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import com.example.R; 
import com.example.DaoMaster.OpenHelper; 

public class DatabaseOpenHelper extends OpenHelper { 

    private Context context; 

    private SQLiteDatabase sqliteDatabase; 

    private static String DB_PATH; 

    private static String DB_NAME; 

    public DatabaseOpenHelper(Context context, String name, CursorFactory factory) { 
     super(context, name, factory); 
     this.context = context; 
     this.DB_NAME = name; 
     this.DB_PATH = context.getString(R.string.DB_PATH); 
     try { 
      createDataBase(); 
     } catch (Exception ioe) { 
      throw new Error("Unable to create database"); 
     } 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 

    } 

    /** Open Database for Use */ 
    public void openDatabase() { 
     String databasePath = DB_PATH + DB_NAME; 
     sqliteDatabase = SQLiteDatabase.openDatabase(databasePath, null, 
       (SQLiteDatabase.OPEN_READWRITE)); 
    } 

    /** Close Database after use */ 
    @Override 
    public synchronized void close() { 
     if ((sqliteDatabase != null) && sqliteDatabase.isOpen()) { 
      sqliteDatabase.close(); 
     } 
     super.close(); 
    } 

    /** Get database instance for use */ 
    public SQLiteDatabase getSqliteDatabase() { 
     return sqliteDatabase; 
    } 

    /** Create new database if not present */ 
    public void createDataBase() { 
     SQLiteDatabase sqliteDatabase = null; 

     if (databaseExists()) { 
      /* Check for Upgrade */ 
     } else { 
      /* Database does not exists create blank database */ 
      sqliteDatabase = this.getReadableDatabase(); 
      sqliteDatabase.close(); 

      copyDataBase(); 
     } 
    } 

    /** Check Database if it exists */ 
    private boolean databaseExists() { 
     SQLiteDatabase sqliteDatabase = null; 
     try { 
      String databasePath = DB_PATH + DB_NAME; 
      sqliteDatabase = SQLiteDatabase.openDatabase(databasePath, null, 
        SQLiteDatabase.OPEN_READONLY); 
     } catch (SQLiteException e) { 
      e.printStackTrace(); 
     } 

     if (sqliteDatabase != null) { 
      sqliteDatabase.close(); 
     } 
     return sqliteDatabase != null ? true : false; 
    } 

    /** 
    * Copy existing database file in system 
    */ 
    public void copyDataBase() { 

     int length; 
     byte[] buffer = new byte[1024]; 
     String databasePath = DB_PATH + DB_NAME; 

     try { 
      InputStream databaseInputFile = this.context.getAssets().open(DB_NAME+".sqlite"); 
      OutputStream databaseOutputFile = new FileOutputStream(databasePath); 

      while ((length = databaseInputFile.read(buffer)) > 0) { 
       databaseOutputFile.write(buffer, 0, length); 
       databaseOutputFile.flush(); 
      } 
      databaseInputFile.close(); 
      databaseOutputFile.close(); 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 
} 

Vì vậy, đây là một ví dụ của nó là sử dụng:

DatabaseOpenHelper helper = new DatabaseOpenHelper(this, "db", null); 
db = helper.getWritableDatabase(); 
daoMaster = new DaoMaster(db); 
daoSession = daoMaster.newSession(); 
+1

Salam. Giá trị của tài nguyên chuỗi "R.string.DB_PATH" là gì? –

+0

bạn có thể sử dụng từ mã này để hỗ trợ người dùng JB 4.2 đa: nếu (android.os.Build.VERSION.SDK_INT> = 17) { DB_PATH = context.getApplicationInfo(). DataDir + "/ databases /"; } else { DB_PATH = "/ dữ liệu/dữ liệu /" + context.getPackageName() + "/ databases /"; } http://stackoverflow.com/a/9109728/1676736 –

+0

Giải pháp thực sự gọn gàng! – Arlind

Các vấn đề liên quan