[英]Wrong result in executing oracle query from servlet
我正在使用以下代码执行查询。 我想通过使用lpad命令和串联将结果显示为“ B010025”。(25和B01作为输入值)。 但它仅显示B0125。 当我从SQL * Plus执行此操作时,它将显示正确的结果。 但是在servlet中却没有。 我听不懂 谁能帮助我获得预期的结果。
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>
}
提前致谢
只要:
String cd="B01";
String no="25";
和:
ofrn=cd+no;
对输出结果有贡献:
out.println(ofrn);
因此,没有任何意外发生!
这是因为您尚未选择数据库返回的值。 执行中
"select lpad(ltrim(rtrim('"+no+"')),4,'0') from dual"
不会更改“ no”或“ cd”的值。
您应该获取结果集并对其进行处理,以访问结果集返回的第一行中的第一列。
以下代码应完成分配。 (未经测试。)
ResultSet rs1=stmt.executeQuery("select lpad(ltrim(rtrim('"+no+"')),4,'0') from dual");
if(rs1.next()){
no = rs1.getString(1);
}
您从未为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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.