1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

dbhelper public methods

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von 19sheriff93, 09.06.2012.

  1. 19sheriff93, 09.06.2012 #1
    19sheriff93

    19sheriff93 Threadstarter Junior Mitglied

    Beiträge:
    40
    Erhaltene Danke:
    0
    Registriert seit:
    23.02.2012
    Hi leute!
    Ich habe eine vorgefertigte Datenbank, diese vom Assetts ordner zu kopieren ist kein problem, nur habe ich folgendes problem: Welche public methods brauche ich um eine abrfrage zu erstellen (DB soll nur daten liefern, keine speichern bzw verändern) Hier wäre der code den ich jetzt habe:

    Code:
    package at.android.twhk;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.sql.SQLException;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteException;
    import android.database.sqlite.SQLiteOpenHelper;
    
    
    public class DataBaseHelper extends SQLiteOpenHelper{
     
        //The Android's default system path of your application database.
        private static String DB_PATH = "/data/data/at.android.twhk/databases/";
        private static String DB_NAME = "twhk_android_sqlite";
    
     
        private SQLiteDatabase myDataBase; 
     
        private final Context myContext;
         
        /**
         * Constructor
         * Takes and keeps a reference of the passed context in order to access to the application assets and resources.
         * @param context
         */
        public DataBaseHelper(Context context) {
     
            super(context, DB_NAME, null, 1);
            this.myContext = context;
        }    
     
      /**
         * Creates a empty database on the system and rewrites it with your own database.
         * */
        public void createDataBase() throws IOException{
     
            boolean dbExist = checkDataBase();
     
            if(dbExist){
                //do nothing - database already exist
            }else{
     
                //By calling this method and empty database will be created into the default system path
                   //of your application so we are gonna be able to overwrite that database with our database.
                this.getReadableDatabase();
     
                try {
     
                    copyDataBase();
     
                } catch (IOException e) {
     
                    throw new Error("Error copying database");
     
                }
            }
     
        }
     
        /**
         * Check if the database already exist to avoid re-copying the file each time you open the application.
         * @return true if it exists, false if it doesn't
         */
        private boolean checkDataBase(){
     
            SQLiteDatabase checkDB = null;
     
            try{
                String myPath = DB_PATH + DB_NAME;
                checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
     
            }catch(SQLiteException e){
     
                //database does't exist yet.
     
            }
     
            if(checkDB != null){
     
                checkDB.close();
     
            }
     
            return checkDB != null ? true : false;
        }
     
        /**
         * Copies your database from your local assets-folder to the just created empty database in the
         * system folder, from where it can be accessed and handled.
         * This is done by transfering bytestream.
         * */
        private void copyDataBase() throws IOException{
     
            //Open your local db as the input stream
            InputStream myInput = myContext.getAssets().open(DB_NAME);
     
            // Path to the just created empty db
            String outFileName = DB_PATH + DB_NAME;
     
            //Open the empty db as the output stream
            OutputStream myOutput = new FileOutputStream(outFileName);
     
            //transfer bytes from the inputfile to the outputfile
            byte[] buffer = new byte[1024];
            int length;
            while ((length = myInput.read(buffer))>0){
                myOutput.write(buffer, 0, length);
            }
     
            //Close the streams
            myOutput.flush();
            myOutput.close();
            myInput.close();
     
        }
     
        public void openDataBase() throws SQLException{
     
            //Open the database
            String myPath = DB_PATH + DB_NAME;
            myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
     
        }
     
        @Override
        public synchronized void close() {
     
                if(myDataBase != null)
                    myDataBase.close();
     
                super.close();
     
        }
        
        
        
        
    [COLOR=Red]    // Add your public helper methods to access and get content from the database.
       // You could return cursors by doing "return myDataBase.query(....)" so it'd be easy
       // to you to create adapters for your views.[/COLOR]
        
        
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            
        }
    
        public void open() {
            // TODO Auto-generated method stub
            
        }
    
        
    
        
            
            
    
        
    
    }
    Sind die methoden bis jetzt richtig? Bzw was benötige ich noch?

    lg und danke im vorraus :smile:
     
  2. Madlip, 12.06.2012 #2
    Madlip

    Madlip Fortgeschrittenes Mitglied

    Beiträge:
    434
    Erhaltene Danke:
    72
    Registriert seit:
    03.08.2011
    Ich mach die Abfrage in meiner Activity wo ich es brauche, das kann dann wie folgt aussehen:

    Code:
    private StorageDBOpenHelper dbHelper;
    
    public oncreate(){
    dbHelper = new StorageDBOpenHelper(this);
    }
    
    public void getDataFromDB(){
    String statement = "select * from listen_with_info";
    SQLiteDatabase db = dbHelper.getWritableDatabase();
    
    Cursor cursor = db.rawQuery(statement, new String[] {});
                    
                    String listResult = "";
                    while (cursor.moveToNext())
                    {
                        for (int i = 0; i < cursor.getColumnCount(); i++)
                        {
                            if (i > 0)
                            {
                                
                                listResult += cursor.getString(i);
                              
                            }
                        }
                        
                        stringsForList.add(listResult);
                        listResult = "";
                       
                    }
    }
    }
    
    
    so in etwa sieht das bei mir aus und funktioniert wunderbar
     
    19sheriff93 bedankt sich.
  3. 19sheriff93, 14.06.2012 #3
    19sheriff93

    19sheriff93 Threadstarter Junior Mitglied

    Beiträge:
    40
    Erhaltene Danke:
    0
    Registriert seit:
    23.02.2012
    Das müsste echt funken danke!
    Dürfte ich noch fragen wie du die Verbindung zur Listview und bzw zu einem Textfeld herstellst? das funktioniert bei mir leider auch noch nicht:huh:
     

Diese Seite empfehlen