2015-05-19 3 views
0

Это может быть плохой практикой, но я начинаю создавать jsp. Я хочу выполнить несколько обновлений - с помощью оператора if. Есть около 6 запросов, которые я хочу использовать, но я не могу заставить код работать. Возможно ли обновить более одного sql в jsp?несколько запросов sql в jsp

Вот мой код:

<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{ \t //try start 
 
\t 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 
 
\t 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 и запускаю jsp через Internet explorer (http://localhost:8080/filename.jsp). Я запускаю пустой экран. Я подозреваю, что есть проблема с запросом на обновление. Может ли кто-нибудь просмотреть это и сказать мне, где я ошибся?

ответ

0

Если вы не подключаетесь к нескольким базам данных, нет необходимости создавать два объекта Connection, потому что вы можете достичь этого требования, создавая единый объект. Я обнаружил, что вы используете метод executeQuery() при обновлении записи. Используйте метод executeUpdate() объекта Connection во время выполнения любых операций DML. Он возвращает целочисленное значение.

Ниже приведен рабочий код 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> 
+0

Thank you Badal. Я использую SQL Server, а не mysql. поэтому я немного изменил код, но все же он не работает. Я получаю пустой экран, когда запускаю его в IE. Я проверил БД, чтобы увидеть, произошло ли обновление, но это не так. Вот обновленный: Class.forName ("com.microsoft.sqlserver.jdbc.SQLServerDriver"); String sql = "select Genre from tablename, где id = '" + var1 + "'"; String sql1 = "update tablename set StatusID = '0', Status = 'Заимствован (" + var2 + ")' где id = '" + var1 + "'"; – mathB

+0

Вы передаете значения для переменных var3, var4, объявленных в более раннем коде? – Badal

+0

Да, вместо var3 и var4 я использовал var1 и var2. – mathB

Смежные вопросы