2012-02-16 2 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(); 
     } 

    } 

} 

지금 내가 해시 테이블로 이름과 양을 복용하고 있습니다. 내가 버튼을 누르면하고 때 내 메인 클래스에서, 나는 다음과 같은 데이터베이스에 값을 삽입하고있다 : 당신이 다음 단지로 선언 GLOBLE 같은 다른 클래스 메소드를 사용하려면 그 어느 때

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

스트링의 배열은 Y를 의미 할 나이 값으로 여러 이름을 삽입하고 싶습니까? –

+0

예.하지만 다른 클래스에서 삽입하고 싶습니다. DatabaseManager 클래스가 아닙니다. –

답변

1

는 다음과 같은이 시도 정적. 복수 행 삽입 genaral 쿼리

이다

INSERT INTO 'TABLENAME' '2 열'UNION SELECT 'DATA3'AS '컬럼 1', 'DATA2'AS 'DATA1'를 선택 '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

답장을 보내 주셔서 감사합니다. 최신 코드를 편집하고 추가했습니다. 그러나 여전히 데이터베이스에 값을 삽입하지 않습니다. –

관련 문제