2010-06-23 3 views
0

J'ai db en utilisant java ainsi:ne pas se connecter à la base de données (SQLite sur android)

public static void main(String[] args) throws Exception { 
     String CITIES[] = city.split(","); 
     Class.forName("org.sqlite.JDBC"); 
     Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db"); 

     String V[][] = {COUNTRIES,CITIES,occupations}; 
     String []TypeNames = {"country","city","occupation"}; 
     Statement stat = conn.createStatement(); 
    stat.executeUpdate("drop table if exists "+TABLE_NAME+";"); 
    //stat.executeUpdate("create table "+TABLE_NAME+" (name, occupation);"); 
    stat.executeUpdate("create table "+TABLE_NAME+" ("+VALUE+","+TYPE+","+LETTER+");"); 
    PreparedStatement prep = conn.prepareStatement(
     "insert into "+TABLE_NAME+" values (?, ?,?);"); 

    //private void insertToTalble(); 
    for(int j = 0 ;j < V.length; j++) 
     for (int i = 0 ;i < V[j].length ; i++) 
     { 
     Character c = V[j][i].charAt(0); 
     prep.setString(1, V[j][i]+"\n"); 
     prep.setString(2, TypeNames[j]); 
     prep.setString(3, c.toString()); 

     prep.addBatch(); 
     } 

    conn.setAutoCommit(false); 
    prep.executeBatch(); 
    conn.setAutoCommit(true); 

    rs.close(); 
    conn.close(); 
    } 
} 

quand je l'ouvre en utilisant le navigateur de données sqllight il fonctionne très bien, mais après l'avoir ajouté à nouveau diractory dans mon Android projet appelé bases de données/test1.db

Je rencontre des problèmes en utilisant ce

ma classe Android qui fonctionne avec la base de données est:

 private static final String DB_PATH = "/data/data/com.countryCityGame/databases/test.db"; 
    private static final String DATABASE_NAME = "test1.db"; 
    private static final int DATABASE_VERSION = 1; 
    private static final String TABLE_NAME = "GameTable"; 
    private static final String VALUE = "value"; 
    private static final String TYPE = "type"; 
    private static final String LETTER = "letter"; 


    public countryCityGameLogic(EditText[] myEditTextArr , Context context){ 

     this.context = context; 
     openHelper = new OpenHelper(context); 
     gameList = new CharSequence [myEditTextArr.length]; 
     for (int i = 0 ; i < myEditTextArr.length; i++){ 
      gameList[i] = myEditTextArr[i].getText(); 
     } 
     this.db = openHelper.getWritableDatabase(); 

     try{ 
      String myPath = DB_PATH ; 
      SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 

     }catch(SQLiteException e){ 

      //database does't exist yet. 
      //insertValus(COUNTRIES,0); 

     } 
     //insertValus(COUNTRIES,0); 
    } 
    public void setGameVar(EditText[] myEditTextArr) { 
     for (int i = 0 ; i < myEditTextArr.length ;i++) 
     gameList[i] = myEditTextArr[i].getText(); 
    } 
    private void insertValus(String []typeInserted , int num) { 
     ContentValues initialValues = new ContentValues(); 
      for (int i = 0 ; i < typeInserted.length ; i++){ 
       Character tmp = (Character)typeInserted[i].charAt(0); 
       initialValues.put(VALUE, typeInserted[i]); 
       initialValues.put(TYPE, TYPESNAMES[num]); 
       initialValues.put(LETTER,tmp.toString(tmp)); 

      db.insert(TABLE_NAME, null, initialValues); 
      } 
    } 



    private static class OpenHelper extends SQLiteOpenHelper { 

      OpenHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
      } 

      @Override 
      public void onCreate(SQLiteDatabase db) { 
      db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ("+ VALUE +" TEXT,"+ TYPE +" TEXT, "+ LETTER + " TEXT)"); 
      } 

      @Override 
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
      onCreate(db); 
      } 
     } 


    public boolean existInDataBase() { 
     boolean returnval = true; 


     String s = asUpperCaseFirstChar(gameList[0].toString()); 
     Cursor cursor = db.query(TABLE_NAME, new String[] {VALUE} 
     ,VALUE+" like " + "'%" + s +"%'", null, null, null, null); 

     if (cursor.moveToFirst() == false) 
      returnval = false; 

     return returnval; 
    } 

Je ne reçois aucune information dans le curseur dans existInDataBase() fonction à même lorsque ma requête est juste pour sélectionner sans rien

être plus précis, je suis toujours reçois faux pour cursor.moveToFirst() peut Quelqu'un s'il vous plaît: 1. me dire ce qu'il pense est faux 2. comment puis-je déboguer et voir ce qu'il ya dans le db (je débogue mais je ne peux pas voir quelque chose d'étrange devrais-je avoir un si vous dites "vous n'avez aucune base de données")

note "quand je bâtissaient application la première fois l'application est le celui qui construit le db comme vous pouvez le voir dans

private void insertValus(String []typeInserted , int num); 

mon problème semble être le fichier manifeste:

quand on prend un fichier db et l'importer dans son projet Android que doit-il faire s'il vous plaît expliquer dans les étapes que dois-je faire grâce Yoav?.

Répondre

0

Avez-vous lu this tutoriel?

Pour voir ce que dans votre base de données sur l'appareil utilisez commande "adb shell". De shell adb vous pouvez vous connecter à la base de données en utilisant la commande sqlite3. Des informations supplémentaires peuvent être trouvées here

+0

oui je l'ai fait, le problème semble b quand j'ajoute la base de données de projet java à mes propres problèmes accumuler. la raison pour laquelle j'importe une base de données est couse sinon cela prend beaucoup de temps (pour dalvik d'insérer quelque chose comme 6 Mo dans un fichier db chaque fois que l'application commence à travailler est un effort énorme). donc je me suis fixé l'objectif d'en faire un en dehors de mon projet, cela m'aidera également à construire plus tard mon application sur google cloud. –

+0

Alors où est android_metadata? –

+0

android_metadata? Je ne suis pas familier avec les changements que je devrais faire là-bas pouvez-vous s'il vous plaît approfondir sur ce sujet il pourrait b la carte joker que je cherchais ... –

0

Je pense que travailler avec la base de données SQLite dans android en utilisant SQLiteOpenHelper est le moyen le plus facile. Vous pouvez lire this tutorial pour comprendre et appliquer. C'est très utile, je l'ai suivi et ça marche bien.

Questions connexes