【问题标题】:multiple sql queries in jsp [closed]jsp中的多个sql查询[关闭]
【发布时间】:2015-05-19 09:16:10
【问题描述】:

这可能是一个不好的做法,但我是创建 jsp 的新手。我想执行多个更新 - 使用 if 语句。我想使用大约 6 个查询,但我无法让代码工作。 jsp中是否可以更新多个sql?

这是我的代码:

<html> //dbupdatetam.jsp
<head><title>Update Tamil page</title></head>
<body>
<%@ page import="java.util.* , javax.sql.* , java.sql.*" %>
<% 
java.sql.Connection con = null;
java.sql.Statement s = null;
java.sql.ResultSet rs = null;
java.sql.PreparedStatement pst = null;

String var1 = request.getParameter("num1");
String var2 = request.getParameter("num2");

//int var3 = Integer.parseInt(var1);


String url= "jdbc:sqlserver://HOST;databaseName=dbname";
String id= "user";
String pass = "pwd";


try{


Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = java.sql.DriverManager.getConnection(url, id, pass);
}catch(ClassNotFoundException cnfex){
cnfex.printStackTrace();
}
String sql = "select Genre from tablename where id= '" + var1 + "'";
String sqlFic = "update tablename set StatusID='0', Status= 'Borrowed (" + var2 + ")' where id= '" + var1 + "'";

try{	//try start
	s = con.createStatement();
//pst=con.prepareStatement(sql);
rs = s.executeQuery(sql);
%>
<%
String retnValue = null;
if ( rs.next() ){ //while start
    retnValue = rs.getString(1);
}
%>
<p>String value is <%=retnValue%></p>
<% if ( retnValue != null) { //ifstart
%>
<p>String value is <%=retnValue%></p>
<%
try{ //try1start
	s = con.createStatement();
    pst = con.prepareStatement(sqlFic);
    int count = s.executeUpdate(sqlFic); 
%>
    <p>The update is successful.<%=count%> record updated successfully.</p>
 <%
} //try1end
catch(Exception e){e.printStackTrace();}
finally{ //finallystart
if(rs!=null) rs.close();
if(s!=null) s.close();
if(con!=null) con.close();
}//finallyend
%>
<% } %>
<%
//} //whileend
%>
<%
} //tryend
catch(Exception e){e.printStackTrace();}
finally { //finallystart
if(rs!=null) rs.close();
if(s!=null) s.close();
if(con!=null) con.close();
} //finallyend
%>

</body>
</html>

这是我得到 var1 和 var2 的地方:

        <FORM ACTION="tamupdate.jsp" METHOD="POST">
            Enter your Emp ID:
            <INPUT TYPE="number" NAME="num1">
            <BR>
            <b>Please Enter your <b>correct</b> Employee ID as this is where the book you request will be sent.</b>
            <br><BR>
            Enter the ID of the book you'd like to check the availability:
            <INPUT TYPE="number" NAME="num2">
            <BR><br>
            <INPUT TYPE="SUBMIT" value="Check Availability">
        </FORM><br><br>
        



<jsp:include page="dbupdatetam.jsp">
<jsp:param name="num1" value="bookid"/>
<jsp:param name="num2" value="empid"/>
</jsp:include>

这行不通!我正在使用 tomcat localhost 并通过 Internet Explorer (http://localhost:8080/filename.jsp) 运行 jsp。运行此程序时出现空白屏幕。我怀疑更新查询有问题。谁能回顾一下并告诉我哪里出错了?

【问题讨论】:

    标签: java sql sql-server jsp jdbc


    【解决方案1】:

    如果您没有连接到多个数据库,则无需创建两个连接对象,因为您可以通过创建单个对象来实现此要求。 我发现您在更新记录时正在使用 executeQuery() 方法。在执行任何 DML 操作时使用 Connection 对象的 executeUpdate() 方法。它返回一个整数值。

    下面是工作的jsp代码。

    <%@ page import="java.util.* , javax.sql.* , java.sql.*" %>
    <% 
    Connection con = null;
    java.sql.Statement s = null;
    java.sql.ResultSet rs = null;
    
    int var3 = Integer.parseInt(request.getParameter("num1"));
    int var4 = Integer.parseInt(request.getParameter("num2"));
    
    
    String url= "***";
    String id= "***";
    String pass = "***";
    
    try{
    
    
    Class.forName("com.mysql.jdbc.Driver");
    con = java.sql.DriverManager.getConnection(url, id, pass);
    
    }catch(ClassNotFoundException cnfex){
    cnfex.printStackTrace();
    
    }
    String sql = "select name from demo where id="+var3;
    String sql1 = "update demo set name='XYZ' where id="+var4;
    
    try{    //try start
    
        s = con.createStatement();
            rs = s.executeQuery(sql);
    %>
    <%
    String retnValue = null;
    if( rs.next() ){ //while start
        retnValue = rs.getString(1);
    }
    %>
    <p>String value is <%=retnValue%></p>
    <% if ( retnValue != null) { //ifstart
    %>
    <%
    try{ //try1start
    
        int count = s.executeUpdate(sql1); 
    %>
        <p>The update is successful.<%=count%> record updated successfully.</p>
     <%
    
    } //try1end
    catch(Exception e){e.printStackTrace();}
    finally{ //finallystart
    if(rs!=null) rs.close();
    if(s!=null) s.close();
    if(con!=null) con.close();
    }//finallyend
    %>
    <% } %>
    <%
    //} //whileend
    %>
    <%
    } //tryend
    catch(Exception e){e.printStackTrace();}
    finally { //finallystart
    if(rs!=null) rs.close();
    if(s!=null) s.close();
    if(con!=null) con.close();
    } //finallyend
    %>
    
    </body>
    

    【讨论】:

    • 谢谢巴达尔。我使用的是 SQL Server,而不是 mysql。所以我稍微更改了您的代码,但仍然无法正常工作。当我在 IE 上运行它时,我得到一个空白屏幕。我检查了数据库以查看更新是否发生,但没有。这是更新的: Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); String sql = "select Genre from tablename where id= '" + var1 + "'"; String sql1 = "update tablename set StatusID='0', Status= 'Borrowed (" + var2 + ")' where id= '" + var1 + "'";
    • 您是否传递了前面代码中声明的 var3、var4 变量的值?
    • 是的,我用 var1 和 var2 代替了 var3 和 var4。
    • 你能再分享一下你的完整代码吗?
    • 刚刚再次编辑了帖子,因为我无法在这里发表评论。评论太长了!
    猜你喜欢
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 2014-08-09
    • 2014-07-01
    • 2014-05-07
    相关资源
    最近更新 更多