如何插入一个String数组在黑莓SQLite数据库 [英] How to insert an array of String in SQLite database in blackberry

查看:409
本文介绍了如何插入一个String数组在黑莓SQLite数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我这是从另一个类创建的SQLite Database.Now一个数据库管理器类,我创建类的实例。现在,我怎么可以插入串的数据库中的一个数组?
 我的数据库管理器类code是象下面这样:

 公共类的DatabaseManager
{
    公共数据库sqliteDb = NULL;
    公众的DatabaseManager()
    {
        尝试
        {
            URI myURI = URI.create(/ SD卡/数据库/ itemdb.db);
            数据库sqliteDb = DatabaseFactory.openOrCreate(myURI);
            sqliteDb.close();
            sqliteDb = DatabaseFactory.open(myURI);
            声明语句= sqliteDb.createStatement(CREATE TABLE如果不存在的SelectedItem(Name文本,数量文本));
            。声明prepare();
            的Statement.execute();
            将statement.close();
        }
        赶上(例外五)
        {
            e.printStackTrace();
        }        最后
          {
               尝试
               {
                   如果(sqliteDb!= NULL)
                   {
                       sqliteDb.close();
                   }               }
               赶上(例外五)
               {
                e.printStackTrace();
               }
          }
    }    公共静态无效insertValues​​(字符串tableName值,哈希表HT)
    {
        尝试
        {
            Logger.out(杂货店,这是科曼在这里);
            URI myURI = NULL;
            尝试
            {
                myURI = URI.create(/ SD卡/数据库/ itemdb.db);
            }
            赶上(抛出:IllegalArgumentException五)
            {
                e.printStackTrace();
            }
            赶上(MalformedURIException E)
            {
                e.printStackTrace();
            }
            数据库sqliteDb = DatabaseFactory.openOrCreate(myURI);
            sqliteDb.close();
            sqliteDb = DatabaseFactory.open(myURI);
            声明dbStatement = sqliteDb.createStatement(INSERT INTO的SelectedItem(名称,数量)+VALUES(,)?);
            枚举ITEMNAME = ht.keys();
            枚举itemQty = ht.elements();
            而(itemName.hasMoreElements())
            {
                Logger.out(杂货店,更多项目);
                。字符串则strName = itemName.nextElement()的toString();
                。字符串strQty = itemQty.nextElement()的toString();
                Logger.out(杂货店,名++则strName);
                Logger.out(杂货店,数量++ strQty);
                dbStatement.bind(1,则strName);
                dbStatement.bind(2,strQty);
                Logger.out(杂货,绑定:::::::::);
                dbStatement.execute();
                dbStatement.reset();
                Logger.out(杂货店,执行的:::::::::);
            }
            dbStatement.close();
        }
        赶上(DatabaseException E)
        {
            e.printStackTrace();
        }
    }    公共无效closeDb()
    {
        尝试
        {
            sqliteDb.close();
        }
        赶上(DatabaseIOException E)
        {
            e.printStackTrace();
        }    }}

现在我正名称及数量哈希表。而在我的主类,当我pressing按钮我正在插入到数据库中的值象下面这样:

  dbManager =新的DatabaseManager();
    dbManager.insertValues​​(的SelectedItem,htItem);


解决方案

试试这个如下当过您要使用另一个类方法,如地球仪则只是其声明为静态的。多行插入genaral查询


  

INSERT INTO'表名'选择'DATA1'为'列1,数据2AS
  列2'UNION SELECT'数据3','DATA4'UNION SELECT数据5','DATA6
  UNION SELECT'DATA7','DATA8


 进口net.rim.device.api.ui.Field;
进口net.rim.device.api.ui.FieldChangeListener;
进口net.rim.device.api.ui.UiApplication;
进口net.rim.device.api.ui.component.ButtonField;
进口net.rim.device.api.ui.component.LabelField;
进口net.rim.device.api.ui.container.MainScreen;
公共类SampleDatabase扩展的UIApplication
{
    的labelField试验;
    字符串名称[];
    INT年龄[];
    MainScreen屏幕=新MainScreen();
    公共静态无效的主要(字串[] args)
    {
        SampleDatabase该app =新SampleDatabase();
        theApp.enterEventDispatcher();
    }    公共SampleDatabase()
    {
        ButtonField字段BTN =新ButtonField字段(点击);
        名称=新的String [10];
        年龄= INT新[10];
        的for(int i = 0;我小于10;我++)
        {
            名称由[i] =戈文德+我;
            年龄[我] =我;
        }
        btn.setChangeListener(新FieldChangeListener(){
            公共无效fieldChanged(场场,诠释上下文){
                同步(UiApplication.getEventLock()){
                    databaseOperations.DatabaseManager();
                    databaseOperations.InsertDatabaseManager(姓名,年龄);
                }            }
        });
        screen.add(BTN);
        pushScreen(屏);
    }
}

这是命名为databaseOperations.java

另一个类

 进口net.rim.device.api.database.Database;
进口net.rim.device.api.database.DatabaseFactory;
进口net.rim.device.api.database.Statement;
进口net.rim.device.api.io.URI;公共类databaseOperations {     公共静态无效的DatabaseManager()
      {
          数据库D = NULL;
        尝试{
                  URI URI = URI.create(文件:/// SD卡/数据库/ SQLite_Guide /+
                                        MyTestDatabase.db);
                  D = DatabaseFactory.openOrCreate(URI);
                  d.close();
                  D = DatabaseFactory.open(URI);
                  声明S = d.createStatement(CREATE TABLE如果不存在人(+
                          名称文本,+
                          '年龄'INTEGER));
                  US prepare()。
                  s.execute();
                  S.CLOSE();
            }
       赶上(例外五)
        {
          e.printStackTrace();
        }
       最后
       {
           尝试{
               如果(D!= NULL)
               {
                   d.close();
               }        }赶上(例外五){
            // TODO自动生成catch块
            e.printStackTrace();
        }
       }
      }
      公共静态无效InsertDatabaseManager(字符串[]姓名,年龄诠释[])
      {
          数据库D = NULL;
        尝试{
                  URI URI = URI.create(文件:/// SD卡/数据库/ SQLite_Guide /+
                                        MyTestDatabase.db);
                  D = DatabaseFactory.openOrCreate(URI);
                  d.close();
                  D = DatabaseFactory.open(URI);                  查询字符串=INSERT INTO'人民'选择'+姓名[0] +AS名称,+年龄[0] +AS'时代';
                  串QUERY2 =;
                  的for(int i = 1; I< names.length;我++)
                  {
                      QUERY2 = QUERY2 +UNION SELECT'+姓名[I] +',+年龄[I]
                  }
                  的System.out.println(查询+ QUERY2);
                  声明S = d.createStatement(查询+ QUERY2);
                  US prepare()。
                  s.execute();
                  S.CLOSE();
            }
       赶上(例外五)
        {
          e.printStackTrace();
        }
        最后
        {
           尝试{
               如果(D!= NULL)
               {
                   d.close();
               }          }赶上(例外五){
            // TODO自动生成catch块
            e.printStackTrace();
        }
       }
      }
}

I have a Database Manager class which is creating the SQLite Database.Now from another class, i am creating the instance of that class. Now how can i insert an array of string in the Database? My Database Manager class code is like below:

     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();
        }

    }

}

Now i am taking the name and quantity as a hash table. And in my main class, when i am pressing the button i am inserting the values in the database like below:

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

解决方案

Try this as following when ever you want to use another class method as globle then just declare it as static . genaral query for multiple row insertion is

INSERT INTO 'tablename' SELECT 'data1' AS 'column1', 'data2' AS 'column2' 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);
    }
}

This is another class named as "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();
        }
       }
      }
}

这篇关于如何插入一个String数组在黑莓SQLite数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆