2012-03-09 14 views
5

का उपयोग कर रहा डेटाबेस बनाने के लिए GreenDao ORM पुस्तकालय का उपयोग कर रहा से डेटाबेस बनाने के लिए कैसे, यह कोड के भीतर से, डाटाबेस बनाने के लिए सबसे पहले नमूने के साथ अच्छा काम करता है।एंड्रॉयड में आस्तियों GreenDao ORM पुस्तकालय

अब समस्या मैं स्मृति के अंदर डेटाबेस के लिए आस्तियों फ़ोल्डर से डाटाबेस नकल से संबंधित किसी भी दस्तावेज या कुछ भी नहीं मिल सकता है।

+0

www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/ इस –

+0

मैंने पढ़ा '' SqliteOpenHelper वर्ग, से एक डाटाबेस बनाना की बुनियादी रास्ता पता इसकी सिर्फ इतना है कि मैं इस '' ORM' GreenDao' बुलाया उपकरण का उपयोग करने की जरूरत है, और यह कैसे अपने पुस्तकालय –

+0

@SomeoneSomewhere अरे साथ एक ही बात करता है, तो आप किसी भी मिला ग्रीनडाओ का उपयोग कर SQLite डेटाबेस से निपटने के लिए उदाहरण या तरीका .. कृपया हमें बताएं .. – Akshay

उत्तर

0

चेक example here इस कार्यक्षमता को प्राप्त करने के।

+0

मुझे 'स्क्लाइट ओपेनहेल्पर' वर्ग से डेटाबेस बनाने का मूल तरीका पता है, इसकी बस थी मुझे 'ग्रीनडाओ' नामक इस 'ओआरएम' टूल का उपयोग करने की आवश्यकता है, और यह अपनी लाइब्रेरी –

+0

के साथ एक ही चीज़ कैसे करता है आप इस सवाल का जवाब नहीं दे रहे हैं, इसके अलावा आपको कुछ भी बताए बिना एक लिंक प्रदान नहीं करना चाहिए। – younes0

+0

लिंक तब तक उपयोगी नहीं होता जब तक कि आप –

10

स्वीकार किए जाते हैं जवाब एक समाधान प्रदान करता है, लेकिन यह केवल आंशिक रूप से सही है। नीचे पोस्ट की गई कक्षा को देखें। यह ग्रीनडाओ के ओपनहेल्पर वर्ग का विस्तार है। नीचे यह आपके उपयोग का एक उदाहरण है और आप अपने स्क्लाइट डेटाबेस की प्रति प्रबंधित करने के लिए OpenHelper या DevOpenHelper की बजाय इसका उपयोग कैसे कर सकते हैं।

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

    } 
} 
तो यहाँ

एक उदाहरण है की यह उपयोग है:

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

सलाम को समझाएं। स्ट्रिंग संसाधन "R.string.DB_PATH" का मूल्य क्या है? –

+0

आप जेबी 4.2 मल्टी यूजर का समर्थन करने के लिए इस कोड से उपयोग कर सकते हैं: अगर (android.os.Build.VERSION.SDK_INT> = 17) { डीबी_PATH = context.getAplicationInfo()। डेटाडियर + "/ डेटाबेस /"; } else { DB_PATH = "/ डेटा/डेटा /" + context.getPackageName() + '/ डेटाबेस/"; } http://stackoverflow.com/a/9109728/1676736 –

+0

वास्तव में साफ समाधान! – Arlind