2011-03-16 3 views
0

Mon problème est chaque fois que je crée d'abord une base de données dans SDCard et aussi faire une table et l'insertion de certaines valeurs à l'intérieur fonctionne correctement. Mais seulement une fois, si maintenant je veux ajouter plus de données dans mon DB existé Ce que je fais est, Je vais à la classe où j'ai écrit l'instruction d'insertion et en insérant d'autres valeurs, mais quand je lance mon application et parcourant ma base de données dans le navigateur de base de données SQLite, il ne détourne aucun changement. Je ne peux pas voir mes nouvelles valeurs inséréesSqlite insert ne fonctionne pas sur se reconnecter

import net.rim.device.api.ui.UiApplication; 
public class InsertDataScreen extends UiApplication { 

    public static void main(String[] args) { 
     InsertDataScreen theApp = new InsertDataScreen(); 
     theApp.enterEventDispatcher(); 
    } 
    public InsertDataScreen() { 
     pushScreen(new CreateDatabaseScreen()); 
    } 

} 

et ma deuxième classe est ce où je créais la base de données et l'insertion de la valeur quand je l'ai fait ma base de données créée avec une ligne maintenant je veux ajouter une ligne supplémentaire à l'intérieur ma base de données pour que je l'ai commenté l'insertion Déclaration quand je fait que je me attendais à deux rangées à l'intérieur, mais il doesnot changé ...

import net.rim.device.api.database.Database; 
import net.rim.device.api.database.DatabaseFactory; 
import net.rim.device.api.database.Row; 
import net.rim.device.api.database.Statement; 
import net.rim.device.api.io.URI; 
import net.rim.device.api.ui.component.LabelField; 
import net.rim.device.api.ui.component.RichTextField; 
import net.rim.device.api.ui.container.MainScreen; 

public class CreateDatabaseScreen extends MainScreen { 
    Database d; 
    public CreateDatabaseScreen(){ 
     LabelField title = new LabelField("SQLite Create database sample and " + 
       "inserting some value ", 
       LabelField.ELLIPSIS|LabelField.USE_ALL_WIDTH); 
     setTitle(title); 
     add(new RichTextField("Creating a Database and will Add some data" + 
       "MyTest.db on the SDCard")); 
     try { 
      URI uri = URI.create("file:///SDCard/Databases/SQLite_Guide/" + 
            "MyTestDatabase.db"); 
      d = DatabaseFactory.create(uri); 
      d.close(); 
      d = DatabaseFactory.open(uri); 
      Statement s = d.createStatement("CREATE TABLE 'People' (" + 
        "'Name' TEXT, " + 
        "'Age' INTEGER)"); 
      s.prepare(); 
      s.execute(); 
      s.close(); 
      Statement s1 = d.createStatement("INSERT INTO People(Name,Age) " + 
        "VALUES ('Uttam',23)"); 
      s1.prepare(); 
      s1.execute(); 
      s1.close(); 
      /** 
      Statement s2 = d.createStatement("INSERT INTO People(Name,Age) " + 
        "VALUES ('Rakesh',26)"); 
      s2.prepare(); 
      s2.execute(); 
      s2.close(); 
      */ 

      d.close(); 

     } catch (Exception e) { 
      // TODO: handle exception 
      System.out.println(e.getMessage()); 
      e.printStackTrace(); 
     } 
    } 

} 
+0

voici le code – BBdev

Répondre

2

Get Résolu une fois qu'une base de données a été créée, nous ne devons pas la créer à nouveau. et ne peut pas non plus créer la table encore et encore. Create devrait être exécuté presque une fois. Et oui, vous devriez vérifier la base de données et la table existe déjà ou non .... sinon créer la base de données et la table et si la base de données existait alors insérez la valeur que vous souhaitez insérer dans la table .... donc le code devrait être comme ça

try { 
      URI uri = URI.create("file:///SDCard/Databases/SQLite_Guide/" + 
            "MyTestDatabase.db"); 
if (DatabaseFactory.exists(uri)){ 
//d = DatabaseFactory.openOrCreate(uri); 
d = DatabaseFactory.open(uri); 
Statement s1 = d.createStatement("INSERT INTO People(Name,Age) " + 
        "VALUES ('Uttam',23)"); 
      s1.prepare(); 
      s1.execute(); 
      s1.close();

Statement s2 = d.createStatement("INSERT INTO People(Name,Age) " + "VALUES ('Rakesh',26)"); s2.prepare(); s2.execute(); s2.close();d.close(); } } catch (Exception e) { // TODO: handle exception System.out.println(e.getMessage()); e.printStackTrace(); add(new LabelField(e.getClass()+" " +e.getMessage())); } }
1

Vous ne pouvez pas simplement créer aveuglément la table à chaque fois. Si la table existe déjà, cette instruction lèvera une exception lorsque vous exécutez(). Vous devez vérifier que la table existe déjà, puis ajouter la nouvelle colonne souhaitée, ou vous devez suivre une version de schéma, puis appliquer les mises à jour de schéma incrémentielles avec le nouveau code.

Si c'est juste pour le développement, vous devez supprimer la base de données existante et recommencer.

+0

pouvez-vous me fournir un lien .... où je peux en savoir plus à ce sujet ... – BBdev

+0

Merci pour le concept que vous avez donné .. – BBdev

Questions connexes