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

Datenbank im Ordner assets?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von jWoz, 22.10.2011.

  1. jWoz, 22.10.2011 #1
    jWoz

    jWoz Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    22.10.2011
    Hallo Zusammen,

    aktuell arbeite ich mich in die Android-App-Entwicklung ein, indem ich versuche ein von mir erstelltes Java-Prog auf Android lauffähig zu machen. Das gemeinte Java-Programm enthält eine MS-Access-Datenbank und soweit ich weiß sind Access-Datenbanken nicht Android-Konfrom, sodass ich im vorfeld schon mal die Datenbank mit SQLite realisert habe.

    Nun zu meinem vorgehen! Ich habe die SQLite Datenbank in den Ordner "assets", zu finden im Applications-Dateisystem, reinkopiert und versucht diese über folgendem Code anzuspielen

    Code:
                    public class Conn_db {
                    private static Connection con;
    
                    public Bank hole_bank_daten(String vorname, String name) throws Exception{
    
                    Class.forName("SQLite.JDBCDriver");
    		DriverManager.getConnection("jdbc:sqlite:/assets/datenbank.sqlite");
    		PreparedStatement stmt;
    		stmt = con.prepareStatement("SELECT * FROM Daten WHERE" + strWhere);
    		stmt.setString(1, vorname);
    		if (b_ort) stmt.setString(2, nachname);
    		ResultSet rs = stmt.executeQuery();
                    .....
    
    Wenn ich es compiliere, erhalte die Meldungen:
    
    10-22 11:08:35.261: WARN/System.err(295): java.sql.SQLException: java.sql.SQLException: SQLite.Exception: unknown error in open
    10-22 11:08:35.281: WARN/System.err(295):     at SQLite.JDBCDriver.connect(JDBCDriver.java:83)
    10-22 11:08:35.281: WARN/System.err(295):     at java.sql.DriverManager.getConnection(DriverManager.java:191)
    10-22 11:08:35.291: WARN/System.err(295):     at java.sql.DriverManager.getConnection(DriverManager.java:154)
    10-22 11:08:35.291: WARN/System.err(295):     at db_connection.Conn_db.<init>(Conn_db.java:49)
    
    
    Leider funzt es nicht wie ich es gern hätte, würde mich auf nützliche Tipps sehr freuen!

    Viele Grüße
     
  2. sixi, 22.10.2011 #2
    sixi

    sixi Erfahrener Benutzer

    Beiträge:
    237
    Erhaltene Danke:
    64
    Registriert seit:
    20.01.2009
    > DriverManager.getConnection("jdbc:sqlite:/assets/datenbank.sqlite");
    Das "/assets/datenbank.sqlite" kann in keinem Fall funktionieren - mit dem "leading" / bewegst du dich ja ins Root-Verzeichnis - und da gibts bestimmt keinen "assets" Ordner...

    Ne Anleitung findest du z.B. hier.
    Wenn deine Datenbank größer als 1MB ist, dann kopier sie in den "raw" Ordner und gib ihr eine Dateinamenerweiterung, die auf komprimierten Inhalt hindeutet. Also z.B. "meinedatenbank.jpg" oder .jet - denn sonst meckert Android, dass unkomprimierte Inhalte über 1MB nicht erlaubt sind.
     
    jWoz bedankt sich.
  3. jWoz, 22.10.2011 #3
    jWoz

    jWoz Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    22.10.2011
    Hi Sixi,

    danke für den schnellen Tipp! Ich habe nun den Ordner "raw" in res erstellt und mit einer Dateinanemerweiterung ergänzt.
    Den Code habe ich entsprechend angepasst und bekomme aber leider folgende Fehlermeldung:#

    Code:
    
    Class.forName("SQLite.JDBCDriver");
    DriverManager.getConnection("jdbc:sqlite:res/raw/datenbank.sqlite");
    
    10-22 11:47:11.961: WARN/System.err(299): java.sql.SQLException: No suitable driver
    10-22 11:47:12.001: WARN/System.err(299):     at java.sql.DriverManager.getConnection(DriverManager.java:199)
    10-22 11:47:12.011: WARN/System.err(299):     at java.sql.DriverManager.getConnection(DriverManager.java:154)
    10-22 11:47:12.011: WARN/System.err(299):     at db_connection.Conn_db.<init>(Conn_db.java:49)
    
    Hättest du vielleicht eine weitere Idee ?

    Viele Grüße
     
  4. jWoz, 24.10.2011 #4
    jWoz

    jWoz Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    22.10.2011
    Das sind die beiden Klassen, die ich benutze um die Datenbankverbindung aufzubauen.


    Activity
    Code:
    
    
    
    import ce.ge.play.DB;
    import ce.ge.play.R;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class Z2Activity extends Activity {
       
    	Button button1;
    	TextView input1;
    	
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            final String meineNull="0";
            button1=(Button)findViewById(R.id.button1);
            input1=(TextView)findViewById(R.id.editText1);
            button1.setOnClickListener((OnClickListener) this);
            input1.setText(meineNull);
        }
        public void onClick(View v) {
        	
        	DB d = new DB();
        	try {
    			d.openDataBase();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		input1.setText("Datenbankverbindung wurde aufgebaut");
        }
    }
    
    

    Datenbankverbindung:
    Code:
    
    import java.sql.SQLException;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    
    public class DB  {
    	    private static String DB_PATH = "assets/";
    	    private static String DB_NAME = "Daten.sqlite";
    	    private SQLiteDatabase myDataBase;
    	
    	    	 
    	        public void openDataBase() throws SQLException{
    	        	 
    	        	//Open the database
    	            String myPath = DB_PATH + DB_NAME;
    	        	myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
    
    	        }
    }
    
    
    Freue mich auf Tipps,
    viele Grüße
     

Diese Seite empfehlen