0

次のコードを使用してクエリを実行しています。結果を「B010025」として表示したいのですが、lpad コマンドと連結を使用します (入力値として 25 と B01 が与えられます)。ただし、B0125 しか表示されません。これを SQL*Plus から実行すると、正しい結果が表示されます。しかし、サーブレットではそうではありません。私はこれを理解できません。誰でも期待される結果を得るために私を助けることができますか?

public class PickOfferNo extends HttpServlet {


protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
         //TODO output your page here
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet PickOfferNo</title>");  
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet PickOfferNo at " + request.getContextPath () + "</h1>");
        out.println("</body>");
        out.println("</html>");

    } finally {            
        out.close();
    }
}

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    //processRequest(request, response);

    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try
    {
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet PickOfferNo</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet PickOfferNo at " + request.getContextPath () + "</h1>");
        doPost(request,response);
        out.println("</body>");
        out.println("</html>");
    }
    finally
    {
       out.close(); 
    }
}


@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    //processRequest(request, response);
    String ofrn=null;
    //String cd=null;
    //String no=null;
    String cd="B01";
    String no="25";
    JSONObject obj = new JSONObject();
    //cd=request.getParameter("sec_code");
    PrintWriter out=response.getWriter();
    try
    {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        java.sql.Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.200:1521:pdsm", "test", "test");
             Statement stmt=conn.createStatement();
                 conn.setAutoCommit(true);
                 //ResultSet rs=stmt.executeQuery("select to_char(nvl(max(substr(offerno,4,4)),0)+1) into '"+no+"' from offer1 where div_sec='"+cd+"'");
                 ResultSet rs1=stmt.executeQuery("select lpad(ltrim(rtrim('"+no+"')),4,'0') from dual");
                 //while(rs1.next())
                 ofrn=cd+no;

                 //obj.put("offrn", ofrn);
                 out.println(ofrn);
    }
    catch(Exception e)
    {
        out.println(e.getMessage());
    }
}


@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>
}

前もって感謝します

4

3 に答える 3

1

Only:

String cd="B01";
String no="25";

and:

ofrn=cd+no;

contribute to the output result:

out.println(ofrn);

So, nothing unexpected is happening!

于 2013-01-18T11:59:05.823 に答える
1

It is because you haven't selected the value return by the database. executing

"select lpad(ltrim(rtrim('"+no+"')),4,'0') from dual"

doesn't change the value of "no" or "cd".

You should get the result set and process it to access the first column in the first row return by the result set.

Following code should do the assignment. (Not tested.)

ResultSet rs1=stmt.executeQuery("select lpad(ltrim(rtrim('"+no+"')),4,'0') from dual");
if(rs1.next()){
no = rs1.getString(1);
}
于 2013-01-18T11:59:10.807 に答える
0

cdとに値を割り当てたことはありませんno

    ResultSet rs1=stmt.executeQuery("select lpad(ltrim(rtrim('"+no+"')),4,'0') from dual");
    //while(rs1.next())
    ofrn=cd+no;

    //obj.put("offrn", ofrn);
    out.println(ofrn);
于 2013-01-18T11:56:39.063 に答える