1

データベースからすべてのデータを取得し、結果セットをリストに保存しています。しかし、すべてのデータを取得できませんでした。ドロップダウンリストにデータを保存したい。私のコードは以下です。

public static void updateChallan(){
    ChallanNumber pd=null;
    int i=0;
    String customerName="";
    List<ChallanNumber> challanList= new ArrayList<ChallanNumber>();
    Connection con = DB.getConnection();
    try
    {
    String st="select CHALLAN_NUMBER,CUSTOMER_CODE,CHALLAN_DATE from DELIVERY_CHALLAN_DETAILS order by CHALLAN_NUMBER";
    Statement stmt=con.createStatement();
    ResultSet rs=stmt.executeQuery(st);
    while(rs.next())
    {
        String stCustName="select CUSTOMER_NAME from CUSTOMER_DETAILS where CUSTOMER_CODE='"+rs.getString(2)+"'";
        Statement stmtCustName=con.createStatement();
        ResultSet rsCustName=stmtCustName.executeQuery(stCustName);
        while(rsCustName.next()){
            customerName=rsCustName.getString(1);
        }

        customerName=rsCustName.getString(1);
        //System.out.println(customerName +" "+i);
        pd=new ChallanNumber(rs.getString(1),customerName,rs.getString(3));
        challanList.add(i,pd);
        i++;
    }
    }
    catch(Exception e)
    {
        //e.printStackTrace();
    }
    render(challanList);
}

ドロップダウンのコードは以下にあります。

<select name="challanNumber" id="challanNumber">
              <option value="selected" selected="selected">ChallanNumber-CustomerCode-    Date</option>

              #{list challanList, as:'cl'}

              <option value="${cl.challanNumber}">${cl.challanNumber}(${cl.customercode}-${cl.challanDate})</option>

                #{/list}



            </select>
4

2 に答える 2

1

問題は、例外が発生したときにandを閉じていないことです。そのため、データベースは開いているすべてのカーソルを使い果たしました。ConnectionResultSet

于 2012-11-30T07:48:41.180 に答える
0

開いているものはすべて閉じる必要があります。つまり、ステートメント、結果セットです。物事が正しく閉じられていることを確認するためfinallyに、あなたの部分でそれを行います。try/catch

ステートメントを閉じると、そのステートメントにリンクされている結果セットも閉じられます。

public static void updateChallan() throws Exception {
    ChallanNumber pd = null;
    int i=0;
    String customerName = "";
    List<ChallanNumber> challanList= new ArrayList<ChallanNumber>();
    Connection con = DB.getConnection();
    Statement stmt = null;
    try {
        String st = "select CHALLAN_NUMBER,CUSTOMER_CODE,CHALLAN_DATE from DELIVERY_CHALLAN_DETAILS order by CHALLAN_NUMBER";
        stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery(st);
        while (rs.next()) {
            String stCustName = "select CUSTOMER_NAME from CUSTOMER_DETAILS where CUSTOMER_CODE='" + rs.getString(2) + "'";
            Statement stmtCustName = con.createStatement();
            try {
                ResultSet rsCustName = stmtCustName.executeQuery(stCustName);
                while (rsCustName.next()){
                    customerName = rsCustName.getString(1);
                }
            } finally {
                if (stmtCustName != null) 
                    stmtCustName.close();
            }

            customerName = rsCustName.getString(1);
            //System.out.println(customerName +" "+i);
            pd = new ChallanNumber(rs.getString(1), customerName, rs.getString(3));
            challanList.add(i, pd);
            i++;
        }
    } catch(Exception e) {
        e.printStackTrace();
    } finally {
        if (stmt != null) 
            stmt.close();
    }
    render(challanList);
}

また、PlayFramework のドキュメント (Play2 の場合はこちらResultSet) を読む必要があります。sとs を直接使用することを避けるためのデータベースがありStatement、ドメイン オブジェクトなどのより高い構造を処理します。残りはフレームワークが行います。

于 2012-11-30T07:52:04.400 に答える