2017-07-21 8 views
0

以下のコードを使用してdb2から注文データを取得しています。ブランチナンバーのみを渡していて、いつかgetWildcards()関数を使用したときにうまく動作します。複数の分岐番号を渡します。複数のパラメータを渡してJavaでPrepared文をフォーマットする方法

public List<Order> getallorders(List<Branch> BranchNumber) throws SQLException { 
     List<Order> orders = new ArrayList<Order>();   
     try {    
      StringBuilder sb = new StringBuilder(); 
      sb.append("SELECT ORDER_NUMBER as ordernumber,SERVICE_TYPE as service" 
        + "FROM ORDER WHERE " 
        + "BRANCH IN(");    
      sb.append(getWildCards(BranchNumber.size())).append(")").append(" WITH UR"); 
      String query = sb.toString(); 
      PreparedStatement statement = connection.prepareStatement(query);   
      for(int i=0 ; i<BranchNumber.size() ;i++) 
      { 
      statement.setInt(i+1,BranchNumber.get(i).getBranch()); 
      } 
      ResultSet resultSet = statement.executeQuery(); 
      { 
      while (resultSet .next()) { 
       Order order1 = new Order(); 
       order1.setOrdernumber(resultSet.getInt("ordernumber")); 
       orders.add(order1);     
      }    
      }    
     } 
     catch (SQLException e) { 
      e.printStackTrace(); 
     } 
     return orders; 
} 


    private String getWildCards(int size) { 
     // TODO Auto-generated method stub 
     StringBuilder sb = new StringBuilder(); 
     for(int i =0 ; i<size ; i++) 

     { 
      sb = (i == 0) ? sb.append("?") 
        : sb.append(",").append("?"); 

     } 
     return sb.toString(); 
    } 

は、今私は、データを取得するために、関数の内部たstartDateとendDateにを渡す必要がありますが、PreparedStatementのは、渡された値を持つ選択クエリをフォーマットされていません。

public List<Order> getallorders(List<Branch> BranchNumber,String startDate,String endDate) throws SQLException { 
     List<Order> orders = new ArrayList<Order>();   
     try {    
      StringBuilder sb = new StringBuilder(); 
      sb.append("SELECT ORDER_NUMBER as ordernumber,SERVICE as service" 
        + "FROM ORDER WHERE " 
        + "BRANCH IN(");    
      sb.append(getWildCards(BranchNumber.size())).append(")"); 
      sb.append("AND ORDERDATE BETWEEN ? and ? WITH UR"); 
      String query = sb.toString(); 
      PreparedStatement statement = 
connection.prepareStatement(query);    
      for(int i=0 ; i<BranchNumber.size() ;i++) 
      { 
      statement.setInt(i+1,BranchNumber.get(i).getBranch()); 
      } 
      ResultSet resultSet = statement.executeQuery(); 
      { 
      while (resultSet .next()) { 
       Order order1 = new Order(); 
       order1.setOrdernumber(resultSet.getInt("ordernumber")); 
       orders.add(order1);     
      }    
      }    
     } 
     catch (SQLException e) { 
      e.printStackTrace(); 
     } 
     return orders; 
} 

誰かが私がここで間違ってやっているものを、私は期待PreparedStatementを得ることができる方法を私に説明していただけます、下記の記録私のログやエラーメッセージに来たクエリ、

SELECT ORDER_NUMBER as ordernumber,SERVICE_TYPE as service FROM .ORDER WHERE 
BRANCH_NUMBER IN(?) + AND ORDERDATE BETWEEN ? AND ? WITH UR 

com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, 
SQLSTATE=42601, SQLERRMC=ORDER DATE BETWEEN ? AND;H_NUMBER IN(?) + AND; 
<order_siblings_by>, DRIVER=3.63.75 
at com.ibm.db2.jcc.am.fd.a(fd.java:679) 
+0

:ここhereから採用例があります。これは、すべてのあなたのprepraredstatementが間違っていることにつながる可能性があります –

+0

こんにちはTuyen、これを解決する方法を教えてくださいできますか? – chimbu

答えて

1

?ですprepareStatementには値を割り当てる必要があります。 ( "?UR WITH AND ORDERDATEと?") `sb.append;`:あなたはこのラインのPreparedStatementの中に疑問符に値を設定しませんでした

String updateString = 
     "update " + dbName + ".COFFEES " + 
     "set SALES = ? where COF_NAME = ?"; 

    PreparedStatement updateSales = con.prepareStatement(updateString); 
    updateSales.setInt(1, 500); //set value to first `?` 
    updateSales.setString(2, "roasted"); //set value to second `?` 
+0

ありがとうございましたc0der、私は下のようなコード部分を更新し、枝番号の結果を検索するときにうまく動作しますが、複数の枝を渡したときに機能しません for(int i = 0; i chimbu

+0

以下のようなコードを更新しました。予想通り働い ため(INT i = 0; iはBranchNumber.size()<; iは++) \t {\t statement.setIntを(I + 1、BranchNumber.get(I).getBranch())。 \t} \t statement.setString(BranchNumber.size()+ 1、startDate); \t statement.setString(BranchNumber.size()+ 2、endDate);結果セットresultSet = statement.executeQuery(); System.out.println(ステートメント); { – chimbu

関連する問題