2012-02-16 12 views
0

私は別のクラスからSQLite Database.Nowを作成しているデータベースマネージャクラスを持っています。私はそのクラスのインスタンスを作成しています。今私はデータベースに文字列の配列を挿入することができますか? 私のデータベースマネージャクラスのコードは以下のようなものです:ブラックベリーのSQLiteデータベースに文字列の配列を挿入するには

 public class DatabaseManager 
{ 
    public Database sqliteDb = null; 
    public DatabaseManager() 
    { 
     try 
     { 
      URI myURI = URI.create("/SDCard/databases/itemdb.db"); 
      Database sqliteDb = DatabaseFactory.openOrCreate(myURI); 
      sqliteDb.close(); 
      sqliteDb = DatabaseFactory.open(myURI); 
      Statement statement = sqliteDb.createStatement("CREATE TABLE if not exists SelectedItem (Name TEXT, Quantity TEXT)"); 
      statement.prepare(); 
      statement.execute(); 
      statement.close(); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

     finally 
      { 
       try 
       { 
        if(sqliteDb!=null) 
        { 
         sqliteDb.close(); 
        } 

       } 
       catch (Exception e) 
       { 
       e.printStackTrace(); 
       } 
      } 
    } 

    public static void insertValues(String tableName, Hashtable ht) 
    { 
     try 
     { 
      Logger.out("Grocery", "it is comin here"); 
      URI myURI = null; 
      try 
      { 
       myURI = URI.create("/SDCard/databases/itemdb.db"); 
      } 
      catch (IllegalArgumentException e) 
      { 
       e.printStackTrace(); 
      } 
      catch (MalformedURIException e) 
      { 
       e.printStackTrace(); 
      } 
      Database sqliteDb = DatabaseFactory.openOrCreate(myURI); 
      sqliteDb.close(); 
      sqliteDb = DatabaseFactory.open(myURI); 
      Statement dbStatement = sqliteDb.createStatement("INSERT INTO SelectedItem(Name,Quantity) " + "VALUES (?,?)"); 
      Enumeration itemName = ht.keys(); 
      Enumeration itemQty = ht.elements(); 
      while(itemName.hasMoreElements()) 
      { 
       Logger.out("Grocery", "more items"); 
       String strName = itemName.nextElement().toString(); 
       String strQty = itemQty.nextElement().toString(); 
       Logger.out("Grocery", "name:" + " " + strName); 
       Logger.out("Grocery", "QTY:" + " " + strQty); 
       dbStatement.bind(1, strName); 
       dbStatement.bind(2, strQty); 
       Logger.out("Grocery", "Binded:::::::::"); 
       dbStatement.execute(); 
       dbStatement.reset(); 
       Logger.out("Grocery", "Executed:::::::::"); 
      } 
      dbStatement.close(); 
     } 
     catch (DatabaseException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public void closeDb() 
    { 
     try 
     { 
      sqliteDb.close(); 
     } 
     catch (DatabaseIOException e) 
     { 
      e.printStackTrace(); 
     } 

    } 

} 

は、今私はハッシュテーブルとして名と数量を取っています。そして、私のメインクラスでは、私はボタンを押していたとき、私は以下のようにデータベースに値を挿入しています:

dbManager = new DatabaseManager(); 
    dbManager.insertValues("SelectedItem", htItem); 
+0

は、文字列の配列は、Yを行う意味します年齢の値を持つ複数の名前を挿入したいですか? –

+0

はい..しかし、別のクラスから挿入したいのですが、DatabaseManagerクラスからではありません。 –

答えて

1

あなたはglobleとして別のクラスのメソッドを使用したい、これまでそしてちょうどとしてそれを宣言するときは、次のようにこれを試してみてください静的複数行の挿入のためのgenaralクエリは

INSERT INTO 'テーブル名' である 'COLUMN1' 'COLUMN2' UNION SELECT 'DATA3' AS 'DATA2'、 'DATA4' UNION SELECT 'DATA5' と 'DATA1' を選択し、 'DATA6' UNION SELECT 'DATA7'、 'DATA8は'

import net.rim.device.api.ui.Field; 
import net.rim.device.api.ui.FieldChangeListener; 
import net.rim.device.api.ui.UiApplication; 
import net.rim.device.api.ui.component.ButtonField; 
import net.rim.device.api.ui.component.LabelField; 
import net.rim.device.api.ui.container.MainScreen; 
public class SampleDatabase extends UiApplication 
{ 
    LabelField test; 
    String names[]; 
    int ages[]; 
    MainScreen screen = new MainScreen(); 
    public static void main(String[] args) 
    { 
     SampleDatabase theApp = new SampleDatabase(); 
     theApp.enterEventDispatcher(); 
    } 

    public SampleDatabase() 
    { 
     ButtonField btn=new ButtonField("Click"); 
     names=new String[10]; 
     ages=new int[10]; 
     for(int i=0;i<10;i++) 
     { 
      names[i]="Govind"+i; 
      ages[i]=i; 
     } 
     btn.setChangeListener(new FieldChangeListener() { 


      public void fieldChanged(Field field, int context) { 
       synchronized (UiApplication.getEventLock()) { 
        databaseOperations.DatabaseManager(); 
        databaseOperations.InsertDatabaseManager(names,ages); 
       } 

      } 
     }); 
     screen.add(btn); 
     pushScreen(screen); 
    } 
} 

これは "databaseOperations.java" という名前の別のクラスである

import net.rim.device.api.database.Database; 
import net.rim.device.api.database.DatabaseFactory; 
import net.rim.device.api.database.Statement; 
import net.rim.device.api.io.URI; 

public class databaseOperations { 

    public static void DatabaseManager() 
     { 
      Database d=null; 
     try { 
        URI uri = URI.create("file:///SDCard/Databases/SQLite_Guide/" + 
             "MyTestDatabase.db"); 
        d = DatabaseFactory.openOrCreate(uri); 
        d.close(); 
        d = DatabaseFactory.open(uri); 
        Statement s = d.createStatement("CREATE TABLE if not exists 'People' (" + 
          "'Name' TEXT, " + 
          "'Age' INTEGER)"); 
        s.prepare(); 
        s.execute(); 
        s.close(); 
      } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      try { 
       if(d!=null) 
       { 
        d.close(); 
       } 

     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     } 
     } 
     public static void InsertDatabaseManager(String[] names,int ages[]) 
     { 
      Database d=null; 
     try { 
        URI uri = URI.create("file:///SDCard/Databases/SQLite_Guide/" + 
             "MyTestDatabase.db"); 
        d = DatabaseFactory.openOrCreate(uri); 
        d.close(); 
        d = DatabaseFactory.open(uri); 

        String query="INSERT INTO 'People' SELECT '"+names[0]+"' AS 'Name', "+ages[0]+" AS 'Age'"; 
        String query2=""; 
        for(int i=1;i<names.length;i++) 
        { 
         query2=query2+" UNION SELECT '"+names[i]+"', "+ages[i]; 
        } 
        System.out.println(query+query2); 
        Statement s = d.createStatement(query+query2); 
        s.prepare(); 
        s.execute(); 
        s.close(); 
      } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      try { 
       if(d!=null) 
       { 
        d.close(); 
       } 

      } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     } 
     } 
} 
+0

あなたの返事をありがとう。最新のコードを編集して追加しました。しかしそれでもデータベースに値を挿入していません。 –

関連する問題