Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (中文) » UltraLite - Java 编程 » 教程:构建 BlackBerry 应用程序 » 第 1 部分:创建新的 BlackBerry 应用程序

 

第 5 课:向表中添加数据

在本课中,您将通过以下方法填充 UltraLite Java 版数据库:向应用程序中添加多个控件,实现用于向 Names 表中插入数据的代码,在模拟器中运行应用程序,然后使用控件输入数据。

前提条件

本课假定您已完成前面的所有课程。 请参见第 1 课:设置新的 BlackBerry 项目

 任务
  1. 更新 HomeScreen 类以添加控件。

    双击 [Package Explorer] 窗口中的 HomeScreen.java,然后在调用 [getDataAccess] 方法的 [try-catch] 语句上方插入以下代码:



            // Add an edit field for entering new names
            _nameEditField = new EditField( "Name: ", "", 50, EditField.USE_ALL_WIDTH );
            add (_nameEditField );
    
            // Add an ObjectListField for displaying a list of names
            _nameListField = new ObjectListField();
            add( _nameListField );
    
            // Add a menu item
            addMenuItem(_addToListMenuItem);
  2. 为 [_nameEditField] 和 [_nameListField] 添加类级别声明,然后用 [run] 方法(目前为空)定义 [MenuItem]。这些声明位于 [_statusLabel] 和 [_da] 声明之后。

    在 [private DataAccess _da;] 语句下方插入以下代码:

        private EditField _nameEditField;
        private ObjectListField _nameListField;
    
        private MenuItem _addToListMenuItem = new MenuItem("Add", 1, 1){
            public void run() {
                // TODO
            }
        };
  3. 向 [DataAccess] 类中添加新方法,以在表中插入行。

    双击 [Package Explorer] 窗口中的 DataAccess.java,然后在 [createDatabaseSchema] 方法后插入以下代码:



        public void insertName(String name){
            try {
                UUIDValue nameID = _conn.createUUIDValue();
                String sql = "INSERT INTO Names(ID, Name) VALUES(?, ?)";           
                PreparedStatement ps = _conn.prepareStatement(sql);
                ps.set(1, nameID);
                ps.set(2, name);
                ps.execute();
                _conn.commit();
                ps.close();
            }
            catch(ULjException uex) {
                Dialog.alert("ULjException: " + uex.toString());
            }
            catch( Exception ex ){
                Dialog.alert("Exception: " + ex.toString());
            }  
        }
  4. 将 [NameRow] 类添加到项目中。

    1. 在 [Package Explorer] 窗口中,展开 [HelloBlackBerry] 并单击 [src]。

    2. 单击 [File] » [New] » [Class]。

      随即出现 [New Java Class] 窗口。

    3. 在 [Name] 字段中,键入 NameRow

    4. 单击 [Finish]。

      NameRow.java 文件将出现在 [Package Explorer] 窗口中项目的下方。

  5. 更新 [NameRow] 类,使其能够在 [Names] 表中将行存储为对象。

    双击 [Package Explorer] 窗口中的 NameRow.java,然后使用以下片段替换代码:



    class NameRow {
        
        public NameRow( String nameID, String name ) {  
            _nameID = nameID;
            _name = name;
        }
        
        public String getNameID(){
            return _nameID;
        }
        
        public String getName(){
            return _name;
        }
           
        public String toString(){
            return _name;
        }
        
        private String _nameID;
        private String _name;
        
    }

    [toString] 方法由 [ObjectListField] 控件使用。

  6. 向 [DataAccess] 类中添加新方法,以将行读入到对象矢量中。

    双击 [Package Explorer] 窗口中的 DataAccess.java,然后在 [insertName] 方法后插入以下代码:



        public Vector getNameVector(){
            Vector nameVector = new Vector();
            try {
                String sql = "SELECT ID, Name FROM Names";
                PreparedStatement ps = _conn.prepareStatement(sql);
                ResultSet rs = ps.executeQuery();
                while (rs.next()) {
                    String nameID = rs.getString(1);
                    String name = rs.getString(2);
                    NameRow nr = new NameRow(nameID, name);
                    nameVector.addElement(nr);
                }
            }
            catch(ULjException uex) {
                Dialog.alert("ULjException: " + uex.toString());
            }
            catch(Exception ex) {
                Dialog.alert("Exception: " + ex.toString());
            }
            return nameVector;
        }
  7. 向 [HomeScreen] 类中添加新方法,以刷新屏幕上显示的列表内容。

    双击 [Package Explorer] 窗口中的 HomeScreen.java,然后在 [_addToListMenuItem] 方法后插入以下代码:



        public void refreshNameList() {
            //Clear the list
            _nameListField.setSize(0);
    
            //Refill from the list of names
            Vector nameVector = _da.getNameVector();
            for( Enumeration e = nameVector.elements(); e.hasMoreElements(); ){
                NameRow nr = ( NameRow )e.nextElement();
                _nameListField.insert(0, nr);
            }
        }
  8. 更新 [HomeScreen] 类使其调用 [refreshNameList] 方法,以确保应用程序启动时列表已填充。

    在 [HomeScreen] 构造函数结尾处之前插入以下代码:

            // Fill the ObjectListField
            refreshNameList();
  9. 向 [HomeScreen] 类中添加新方法,以向屏幕上的列表中添加行。

    在 [refreshNameList] 方法后插入以下代码:

        private void onAddToList(){
            String name = _nameEditField.getText();
            _da.insertName(name);
            this.refreshNameList();
            _nameEditField.setText("");
            _statusLabel.setText(name + " added to list");
        }
  10. 更新 [HomeScreen] 类中的 [run] 方法,以便调用 [onAddToList] 方法。

    用以下代码片段替换表述 [\\ TODO] 的代码行:

                onAddToList();
  11. 单击 [File] » [Save All]。

  12. 运行模拟器来验证应用程序可以编译和运行。

    在 [Package Explorer] 窗口中,单击 Application.java,然后单击 [Run] » [Run As] » [BlackBerry Simulator]。

    注意

    如果在工作区打开了多个项目,可单击 [Run] » [Run Configurations],选择 [HelloBlackBerry],然后单击 [Run]。

    [HelloBlackBerry] 项目开始编译,随后模拟器窗口出现。

    选择 Eclipse 中的 [Problems] 选项卡,确保编译过程未出差错。

  13. 从模拟器菜单单击 [File] » [Load Java Program]。

  14. 浏览至 SQL Anywhere 安装目录 \UltraLite\UltraLiteJ\BlackBerry4.2\ 并打开 UltraLiteJ16.cod 文件。

    注意

    可能需要将 UltraLiteJ16.cod 和 DBG 文件复制到模拟器的工作目录(例如,C:\Eclipse\plugins\net.rim.ejde.componentpack6.0.0_6.0.0.0.26\components\simulator\)以运行应用程序。在完成复制后,将不再需要从模拟器菜单装载 Java 程序。

  15. 从模拟器菜单单击 [Simulate] » [Set IT Policy]。

    [Set IT Policy] 窗口出现。

  16. 在 [Policy] 字段中,单击 [Allow Third Party Apps To Use Persistent Store] » [>>]。

  17. 单击 [Set],然后单击 [Close]。

  18. 启动应用程序。

    在模拟器窗口中,导航至 [Downloads],然后运行 [HelloBlackBerry] 应用程序。

    会出现一个屏幕,显示 [Hello BlackBerry] 标题栏、[Status: Connected] 文本和 [Name] 字段。

  19. 在名称字段,键入 John Smith

  20. 单击 [*EMPTY*],然后选择 [Add]。

    John Smith 出现在列表中,表示名称条目已被添加到数据库的 [Names] 表中。

    在添加名称时,名称会存储在数据库中。如果在关闭应用程序后重新将其打开,则会从数据库中检索这些名称,并将其添加到列表中。

  21. 停止模拟器。

    在模拟器窗口中,单击 [File] » [Exit]。

结果

输入的数据已插入到 UltraLite Java 版数据库的 Names 表中。