1
我正在使用java servlets和oracle sql建立一個酒店管理。
我從數據庫打印一個html表,如果我更改將值傳遞給另一個servlet,我需要更新一行。
這是我的第一個servlet
if(request.getParameter("hotelTableBtn") != null){
String query = "select * from Hotels";
response.setCharacterEncoding("utf-8");
Connection conn;
try{
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","system","root");
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query);
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
pw.println("<table border=1 style=border-collapse:collapse>");
pw.println("<tr>");
for(int i = 1; i <= columnCount; i++){
pw.println("<th>" + metaData.getColumnName(i));
}
pw.println("</tr>");
pw.println();
String name = "";
while(rs.next()){
int i;
int row = rs.getRow();
pw.write("<form action=/ThesisAdmin/PrintTables method=post target=_self>");
pw.println("<tr>");
for(i = 1; i <= columnCount; i++){
if(i == 1)
name = "name";
else if (i == 2)
name = "category";
else if (i == 3)
name = "address";
else if (i == 4)
name = "phone";
else
name = "email";
pw.println("<td style=border:none> <input type=text value=" + rs.getString(i) + " name=" + name + "> </td>");
}
pw.println("<td> <input type=submit value=update name=updateBtn> </td>");
pw.println("</tr>");
pw.write("</form");
pw.println();
}
pw.println("</table>");
}catch (Exception e){
pw.write("" + e);
}
}
,這是HTML表格
現在,我需要更新的行值,並將其發送到數據庫的樣本,這裏是第二個servlet PrintTables
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
Writer writer = response.getWriter();
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch(Exception e){
writer.write("" + e);
}
if(request.getParameter("updateBtn") != null){
String hotelName = request.getParameter("name");
String hotelCategory = request.getParameter("category");
String hotelAddress = request.getParameter("address");
String hotelPhone = request.getParameter("email");
String hotelEmail = request.getParameter("phone");
try{
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","system","root");
String update = "update Hotels set Name=?,Category=?,Address=?,Phone=?,Email=? where Name= '"+hotelName+"' ";
PreparedStatement pst = conn.prepareStatement(update);
pst.setString(1, hotelName);
pst.setString(2, hotelCategory);
pst.setString(3, hotelAddress);
pst.setString(4, hotelPhone);
pst.setString(5, hotelEmail);
pst.executeUpdate();
}catch(Exception e){
writer.write("" + e);
}
}
}
我更新了我這樣的代碼,但只有第一個按鈕works.Any想法? 預先感謝您。
(更新)
最後我的程序中加入一個新表每row.AlsoΙ添加deletion.Solution多了一個按鈕的工作:在
pw.println("<table border=1 style=border-collapse:collapse>");
pw.println();
String name = "";
int cnt = 0;
while(rs.next()){
int i;
//int row = rs.getRow();
pw.println("<tr>");
pw.println("<table><tr><td>");
pw.println("<tr>");
if(cnt == 0){
for(i = 1; i <= columnCount; i++){
pw.println("<th>" + metaData.getColumnName(i));
}
cnt = 1;
}
pw.println("</tr>");
pw.write("<form action=/ThesisAdmin/PrintTables method=post target=_self>");
for(i = 1; i <= columnCount; i++){
if(i == 1)
name = "name";
else if (i == 2)
name = "category";
else if (i == 3)
name = "address";
else if (i == 4)
name = "phone";
else
name = "email";
pw.println("<td style=border:none> <input type=text value=" + rs.getString(i) + " name=" + name + "> </td>");
}
pw.println("<td> <input type=submit value=update name=updateBtn> </td>");
pw.println("<td><input type=submit value=delete name=deleteBtn> </td>");
pw.write("</form>");
pw.write("</td></tr></table>");
pw.println("</tr>");
pw.println();
}
pw.println("</table>");
你忘了實際的問題。 「我需要」不是一個問題。 – Kayaman
張貼編輯,謝謝.. – Papadakis
請你可以更詳細地解釋你是什麼意思的「動態行值」?也許一個例子會有所幫助。 – vanje