2011-11-07 51 views
0
更新表

你好,我想要創建一個頁面來更新我的數據庫表中的行我使用DAO/Servlet的與JSP頁面無法使用JSP/DAO/Servlet的

DAO代碼:

public static AnimalUpdateBean updateAnimal(AnimalUpdateBean bean) { 

      //preparing some objects for connection 
     PreparedStatement up = null; 
     Statement stmt = null;  

      String id = bean.getAnimalId(); 
      String aname = bean.getAnimalName(); 
      String dob = bean.getAnimalDob(); 
      String gender = bean.getAnimalGender(); 
      String breedid = bean.getAnimalBreed(); 
      String remark = bean.getAnimalRemark(); 
      try 
      { 
      //connect to DB 
       currentCon = dbConnection.getConnection(); 

       up = currentCon.prepareStatement("update animal set aname = '"+aname+"' , gender = '"+gender+"', specie_id = '" 
         +breedid+"' , remark = '"+remark+"' where animal_id = '"+id+"'"); 

       up.executeUpdate(); 

       if (up.executeUpdate()>=1){ 
        stmt=currentCon.createStatement(); 
        rs = stmt.executeQuery("select aname , dob, gender, specie_id , remark from animal where animal_id = '"+id+"'"); 
       } 


      System.out.println("done"); 
     } 


     catch (Exception ex) 
     { 
      System.out.println("Log In failed: An Exception has occurred! " + ex); 
     } 

     //some exception handling 
     finally 
     { 
      if (rs != null) {try {rs.close();} catch (Exception e) {} rs = null;} 

      if (stmt != null) {try {stmt.close();} catch (Exception e) {}stmt = null;} 

      if (currentCon != null) {try {currentCon.close();} catch (Exception e) {}currentCon = null;} 
     } 

    return bean; 

     }  
    } 

UpdateAnimal.jsp代碼:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ page import="java.util.ArrayList" %> 
<%@page import="content.*"%> 
<%@page import="java.sql.*"%> 
<%@page import="java.util.*"%> 
<%@ page session="true"%> 
<%@page import="java.io.*"%> 
<%@page import="java.net.*"%> 
<%@page import="javax.servlet.*"%> 
<%@ page language="java" 
     contentType="text/html; charset=windows-1256" 
     pageEncoding="windows-1256" %> 


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256"> 
<title>Update Animal</title> 
<link rel="stylesheet" 
     href="./css/styles.css" 
     type="text/css"/> 
</head> 
<body> 
<table class="title"> 
    <tr><th>Zoo keeper</th></tr> 
</table> 


<h1>Update Animal</h1> 

<form action="Relay" > 
<fieldset> 
Animal new name: <input type= "text" name = "aname"><br> 
Animal new DOB: <input type= "text" name = "dob"><br> 

<br> 
Animal new gender: 
<select name="gender" id="gender"> 
<option value="male">Male</option> 
<option value="female">Female</option> 
</select> 
<br> 

Animal new Breed: <input type= "text" name = "breedid" ><br> 
Animal new remarks: <textarea name = "remark" rows="4" cols="20"> 

</textarea> <br /> <br/> 


<input type="submit" value="submit"> 
<input type="hidden" name="animal_id" value="<%= request.getParameter("animal_id") %>"> 
<input type="hidden" name="command" value="UpdateAnimalServlet" > 

</fieldset> 
</form> 
</body></html> 

記錄更新來自一個選擇頁面,查看記錄時,在名稱的用戶點擊,他將被重定向到更新頁面CheckAnimal.jsp

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ page import="java.util.ArrayList" %> 
<%@page import="content.*"%> 
<%@page import="java.sql.*"%> 
<%@page import="java.util.*"%> 
<%@ page session="true"%> 
<%@page import="java.io.*"%> 
<%@page import="java.net.*"%> 
<%@page import="javax.servlet.*"%> 
<%@ page language="java" 
     contentType="text/html; charset=windows-1256" 
     pageEncoding="windows-1256" %> 


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256"> 
<title>Animal list</title> 
<link rel="stylesheet" 
     href="./css/styles.css" 
     type="text/css"/> 
</head> 
<body> 
<table class="title"> 
    <tr><th>Zoo keeper</th></tr> 
</table> 


<h1>Animal list</h1> 
Click on animal name to update it! 
<center> 
<table width="100 % " id='table1' border="1" cellspacing="2" cellpadding="2"> 
    <tr class="tab-highlighted-2"> 

     <td class="tab-highlighted-2" width="15"> 
      <div align="left">Name</div> 
     </td> 
     <td class="tab-highlighted-2" width="13"> 
      <div align="left">Age</div> 
     </td> 
     <td class="tab-highlighted-2" width="13"> 
      <div align="left">Gender</div> 
     </td> 
     <td class="tab-highlighted-2" width="13"> 
      <div align="left">Status</div> 
     </td>  
     <td class="tab-highlighted-2" width="13"> 
      <div align="left">Breed</div> 
     </td> 
     <td class="tab-highlighted-2" width="13"> 
      <div align="left">Pen #</div> 
     </td> 
     <td class="tab-highlighted-2" width="15"> 
      <div align="left">Zoo</div> 
     </td> 
     <td class="tab-highlighted-2" width="20"> 
      <div align="left">Remarks</div> 
     </td> 

    </tr> 

    <c:forEach items="${beans}" var="view"> 
     <tr> 

      <td><a href="/oosd/UpdateAnimal.jsp?animal_id=${view.animalId}&breed=${view.breedId}">${view.animalName}</a></td> 
      <td>${view.animalDob}</td> 
      <td>${view.animalGender}</td> 
      <td>${view.animalSource}</td> 
      <td>${view.animalBreed}</td> 
      <td>${view.sectionId}</td> 
      <td>${view.zooId}</td> 
      <td>${view.animalRemark}</td> 

     </tr> 
    </c:forEach> 
</table> 

     </center> 

</body></html> 

AnimalUpdateBean.java代碼:

package content; 

public class AnimalUpdateBean { 
    private String animalId; 
    private String animalName; 
    private String animalDob; 
    private String animalGender; 
    private String animalBreed; 
    private String animalRemark; 

    public String getAnimalId() {return animalId;} 
    public String getAnimalName() {return animalName;} 
    public String getAnimalDob() {return animalDob;} 
    public String getAnimalGender() {return animalGender;} 
    public String getAnimalBreed() {return animalBreed;} 
    public String getAnimalRemark() {return animalRemark;} 

    public void setAnimalId(String animalId) {this.animalId = animalId;} 
    public void setAnimalName(String animalName) {this.animalName = animalName;} 
    public void setAnimalDob(String animalDob) {this.animalDob = animalDob;} 
    public void setAnimalGender(String animalGender) {this.animalGender = animalGender;} 
    public void setAnimalBreed(String animalBreed) {this.animalBreed = animalBreed;} 
    public void setAnimalRemark(String animalRemark) {this.animalRemark = animalRemark;} 


} 

該servlet負責啓動更新UpdateAnimalServlet:

package content; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

/** 
* Servlet implementation class LoginServlet 
*/ 
public class UpdateAnimalServlet extends HttpServlet { 


public void doGet(HttpServletRequest request, HttpServletResponse response) 
         throws ServletException, java.io.IOException { 

try 
{  

    AnimalUpdateBean animal = new AnimalUpdateBean(); 
    animal.setAnimalId(request.getParameter("animal_id")); 
    animal.setAnimalName(request.getParameter("aname")); 
// animal.setAnimalDob(request.getParameter("dob")); 
    animal.setAnimalGender(request.getParameter("gender")); 
    animal.setAnimalBreed(request.getParameter("breedid")); 
    animal.setAnimalRemark(request.getParameter("remark")); 
    String test = request.getParameter("animal_id"); 
    System.out.println(test); 
    System.out.println(animal); 

    animal = DAO.updateAnimal(animal); 


      response.sendRedirect("/oosd/member.jsp"); 


} 


catch (Throwable theException)  
{ 
    System.out.println(theException); 
} 
     } 
    } 

我使用的執行調用AnimalUpdateServlet中繼的servlet:

package content; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class LoginServlet 
*/ 
public class Relay extends HttpServlet { 


public void doGet(HttpServletRequest request, HttpServletResponse response) 
         throws ServletException, java.io.IOException { 

    try 
    {  



     String command = request.getParameter("command"); 
     if (command.equals("LoginServlet")){ 
      RequestDispatcher rd =request.getRequestDispatcher("/"+command); 
      rd.forward(request, response); 
      //for testing 
      System.out.println("Request forwarded to " + command + " servlet"); 
     } else if (command.equals("UpdateAnimalServlet")){ 
      RequestDispatcher rd =request.getRequestDispatcher("/"+command); 
      rd.forward(request, response); 
      //for testing 
      System.out.println("Request forwarded to " + command + " servlet"); 
     } 

     else 
      System.out.println("=> command='" + command + "'"); 
      String url = "/oosd/" + command;  
      String encodedUrl = response.encodeRedirectURL(url); 
      System.out.println(" url=" + url);  
      System.out.println(" encodedUrl=" + encodedUrl); 
      response.sendRedirect(encodedUrl); 



    } 


    catch (Throwable theException)  
    { 
     System.out.println(theException); 
    } 
      } 
     } 


and last thing is the web.xml page: 

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

    <servlet> 
    <servlet-name>LoginServlet</servlet-name> 
    <servlet-class>content.LoginServlet</servlet-class> 
    </servlet> 
    <servlet> 
    <servlet-name>UpdateAnimalServlet</servlet-name> 
    <servlet-class>content.UpdateAnimalServlet</servlet-class> 
    </servlet> 
    <servlet> 
    <servlet-name>SelectAnimalServlet</servlet-name> 
    <servlet-class>content.SelectAnimalServlet</servlet-class> 
    </servlet> 
    <servlet> 
    <servlet-name>Relay</servlet-name> 
    <servlet-class>content.Relay</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>SelectAnimalServlet</servlet-name> 
    <url-pattern>/SelectAnimalServlet</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>UpdateAnimalServlet</servlet-name> 
    <url-pattern>/UpdateAnimalServlet</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>LoginServlet</servlet-name> 
    <url-pattern>/LoginServlet</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>Relay</servlet-name> 
    <url-pattern>/Relay</url-pattern> 
    </servlet-mapping> 
</web-app> 

我不斷收到這些錯誤: 登錄失敗:發生異常! java.sql.SQLException:[Microsoft] [ODBC Microsoft Access Driver]標準表達式中的數據類型不匹配。

java.lang.IllegalStateException:無法調用sendRedirect()的反應一直致力於

後,我檢查了數據錄入和正確名稱的文本,文本性別,specie_id號,備註文字我甚至把DOB擱置,直到這項工作我使用access數據庫,這裏是連接代碼:

package content; 


import java.sql.*; 


public class dbConnection { 

    static Connection con; 
    static String url; 

    public static Connection getConnection() 
    { 

     try 
     { 
     String url = "jdbc:odbc:oosd"; 
     // assuming "DataSource" is your DataSource name 

     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 

     try 
     {    
      con = DriverManager.getConnection(url,"",""); 

     // assuming your SQL Server's username is "username"    
     // and password is "password" 

     } 

     catch (SQLException ex) 
     { 
      ex.printStackTrace(); 
     } 
     } 

     catch(ClassNotFoundException e) 
     { 
     System.out.println(e); 
     } 

    return con; 
} 
} 

任何想法,是我的錯嗎?

+1

偏離主題,但如果您沒有編寫任何scriptlet代碼(您不是,也不應該是這樣),那麼在JSP中不需要任何這些import指令。 –

回答

2

as specie_id是一個數字,這就是拋出的異常說明「數據類型在標準表達式中不匹配」。並且由於此異常發生sendRedirect錯誤,因爲已經將SQLException數據寫入響應。 您的查詢應該是這樣

"update animal set aname = '"+aname+"' , gender = '"+gender+"', specie_id = " 
        +Integer.parseInt(breedid)+" , remark = '"+remark+"' where animal_id = '"+id+"'" 

相同的,如果animal_id也是數是必需的。

+0

我改變了,仍然得到相同的錯誤 – user1031152

+0

你能提供動物表 – dpsdce

+0

的模式你到底想要什麼?因爲訪問生成shcema是非常巨大的 – user1031152

0

當您已經將數據寫入響應(如使用forward或直接寫入JSP writer),然後嘗試重定向時,會發生sendRedirect錯誤。

SQL錯誤可能是由於您在SQL中使用了字符串ID(由單引號括起來),而數據庫中的ID很可能定義爲整數。

此外,更新動物後,您執行查詢,但對結果無效。

+0

我刪除了圍繞值的單個qoutes,現在我獲取 java.sql.SQLException:[Microsoft] [ODBC Microsoft Access Driver]參數太少。預計2. – user1031152

+0

現在它已更新我只需要擺脫java.lang.IllegalStateException:在響應已提交後無法調用sendRedirect()錯誤 – user1031152

+0

@ user1031152有太多的代碼讓我經歷。有些東西正在寫入響應,或者通過轉發(如JSP)或直接寫入輸出流。一旦發生這種情況,您無法發送重定向。 –