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

SQL Anywhere 11.0.1 (日本語) » Ultra Light J » Ultra Light J の使用 » チュートリアル:BlackBerry アプリケーションの構築 » 第 1 部:BlackBerry での Ultra Light J アプリケーションの作成

 

レッスン 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 の run メソッド (現時点では //TODO という記述) 内からこのメソッドを呼び出します。

      public void run() {
          onAddToList();
      }
  3. アプリケーションをコンパイルして実行します。

シミュレータのリセット

シミュレータをクリーンな状態にリセットする必要がある場合は、BlackBerry JDE の [File] メニュー ([Simulator] メニューではない) から [Erase Simulator File] を選択し、サブメニューの項目を消去します。この方法でシミュレータをリセットする場合は、アプリケーションを再度実行する前に UltraLiteJ.cod ファイルを再インポートする必要があります。