2012-02-16 101 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

串的陣列裝置做ÿ你想插入多個年齡值的名字? – 2012-02-17 04:11:33

+0

是的..但我想從另一個類,而不是從DatabaseManager類插入.. – 2012-02-17 05:04:33

回答

1

試試這個如下靜態的 。用於多個行插入genaral查詢是

INSERT INTO '表名' SELECT 'DATA1' AS '列1', '數據2' AS '列2' UNION SELECT 'DATA3', 'DATA4' UNION SELECT 'DATA5', '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

感謝您的回覆。我編輯並添加了我的最新代碼。但仍然沒有在數據庫中插入值.. – 2012-02-17 09:28:24