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

SQL Anywhere 11.0.1 (中文) » UltraLiteJ » 使用 UltraLiteJ » 教程:构建 BlackBerry 应用程序 » 第 1 部分:创建用于 BlackBerry 的 UltraLiteJ 应用程序

 

第 5 课:向表中添加数据

在本课中,您将向屏幕添加以下控件:

然后,您将添加代码以在文本字段中插入名称并刷新列表。

  1. 向屏幕中添加控件。

    1. 调用 getDataAccess 方法之前添加以下代码。

      // 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);
                      
      // Create database and connect
      try{
          _da = DataAccess.getDataAccess();
    2. 为 _nameEditField 和 _nameListField 添加类级别声明。同样,使用 run 方法定义 _addToListMenuItem MenuItem(目前为空)。这些声明位于 _statusLabel 和 _da 声明之后。

      private EditField _nameEditField;
      private ObjectListField _nameListField;
      
      private MenuItem _addToListMenuItem = new MenuItem("Add", 1, 1){
          public void run() {
              // TODO
          }
      };
    3. 重新编译应用程序并确认它可以运行。

  2. 向应用程序添加以下方法和对象:

    • 将行插入表的 DataAccess 方法
    • 将 Names 表的行保存为对象的对象
    • 将表中的行读取到对象的矢量的 DataAccess 方法
    • 刷新显示在 HomeScreen 上的列表内容的方法
    • 将某项添加到 HomeScreen 上的列表的方法。
    1. 添加将行插入表中的 DataAccess 方法:

      public void insertName( String name ){
          try{
              Value 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();
          }
          catch( ULjException uex ){
              System.out.println( "ULjException: " + uex.toString() );
          }
          catch( Exception ex ){
              System.out.println( "Exception: " + ex.toString() );
          }  
      }
    2. 添加保存 Names 表的行的类。toString 方法由 ObjectListField 控件使用。

      package myapp;
      
      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;
          
      }
    3. 添加将表中的行读取到对象的矢量的 DataAccess 方法:

      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 ){
              System.out.println( "ULjException: " + uex.toString() );
          }
          catch( Exception ex ){
              System.out.println( "Exception: " + ex.toString() );
          }
          finally{
              return nameVector;
          }
      }
    4. 将用户接口方法添加到 HomeScreen 类。以下是刷新名称列表的方法:

      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);
          }
      }
    5. 在 HomeScreen 构造函数结束之前调用 refreshNameList 方法,以便应用程序启动时列表已填充。

      // Fill the ObjectListField
      this.refreshNameList();
    6. 添加用于将行添加到列表的 HomeScreen 方法:

      private void onAddToList(){
          _da.insertName(_nameEditField.getText());
          this.refreshNameList();
          _nameEditField.setText("");
      }
    7. 从 _addToListMenuItem MenuItem(当前为 //TODO)的 run 方法内调用此方法:

      public void run() {
          onAddToList();
      }
  3. 编译并运行应用程序。

重置模拟器

如果需要将模拟器重置为干净的状态,请从 BlackBerry JDE 的 [File] 菜单(而不是 [Simulator] 菜单)中选择 [Erase Simulator File],然后消除子菜单中的项。如果用此方法重置模拟器,则必须在再次运行应用程序之前重新导入 UltraLiteJ.cod 文件。