這節我在前面三節的基礎上進行整合,將講解一個實例——圖書管理數據庫操作
首先:來看看設計的流程——
- 界面設計
- 註冊登錄界面
- 處理界面(出錯界面、歡迎界面、成功界面、跳轉界面)
- MySQL數據庫操作——建立數據庫和數據表(代碼在文章末尾)
- 對接後臺——數據庫連接和操作
- 定義一個JavaBean(也就是一個實體類)(代碼在文章末尾)
- 依次寫好JSP(index.jsp add.jsp del.jsp edit.jsp error.jsp update.jsp)
注意事項:
1.在數據庫中和JSP文件中要統一字符集格式utf-8/gb2312只能選一個
2.需要準備MySQL驅動的jar包
接下來是具體的代碼:
index.jsp
<%@ page language="java" contentType="text/html; charset=gb2312"
pageEncoding="UTF-8" import="java.sql.*"%>
<!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=gb2312">
<title>圖書管理界面</title>
</head>
<body>
<a href=add.jsp>增加圖書信息</a><p>
<table border="1" >
<tr><td>書名<td>作者<td>價格<td>管理
<jsp:useBean id="db" class="book.bookInfo" scope="page"/><!-- 導入自己的類(Javabean) -->
<%
String s="select * from book_info";
ResultSet rs=db.executeQuery(s);
while(rs.next())
{
int id=rs.getInt(1);
out.println("<tr><td>"+rs.getString(2)+"</td><td>"+rs.getString(3)+"</td><td>"+rs.getString(4)+"</td><td><a href='del.jsp?id="+id+"'>刪除</a> <a href='edit.jsp?id="+id+"'>修改</a></td></tr>");
}
rs.close();
db.close();
%>
</table>
</body>
</html>
add.jsp
<%@ page language="java" contentType="text/html; charset=gb2312"
pageEncoding="UTF-8" import="java.sql.*"%>
<!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=gb2312">
<title>增加圖書</title>
</head>
<body>
<form action="add.jsp" method="post">
<table >
<CAPTION>添加圖書信息</CAPTION>
<tr>
<th width="30%">書名:</th>
<td width="70%"><input name="bookname" type="text"></td>
</tr>
<tr>
<th>作者:</th>
<td><input name="author" type="text"></td>
</tr>
<tr>
<th>價格:</th>
<td><input name="price" type="text">元</td>
</tr>
<tr>
<th colspan="2">
<input type="submit" name="submit" value="添加">
<input type="reset" value="重置">
</th>
</tr>
</table>
</form>
<jsp:useBean id="db" class="book.bookInfo" scope="page"/>
<%
request.setCharacterEncoding("gb2312");
String submit=request.getParameter("submit");
if(submit!=null&&!submit.equals(""))
{
String bookname=request.getParameter("bookname");
String author=request.getParameter("author");
String price=request.getParameter("price");
String sql="insert into book_info(bookname,author,price) values('"+bookname+"','"+author+"',"+price+")";
int i=db.executeUpdate(sql);
if(i!=-1)
{
out.println("<script language='javaScript'> alert('添加成功,點擊確定跳轉到主頁!');</script>");
response.setHeader("refresh","1;url=index.jsp");
}
else{
out.println("<script language='javaScript'> alert('添加失敗,點擊確定返回添加頁面!');</script>");
response.setHeader("refresh","1;url=add.jsp");
}
db.close();
}
%>
</body>
</html>
del.jsp
<%@ page language="java" contentType="text/html; charset=gb2312"
pageEncoding="UTF-8" import="java.sql.*" %>
<!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=gb2312">
<title>刪除圖書</title>
</head>
<body>
<jsp:useBean id="db" class="book.bookInfo" scope="page"/>
<%
request.setCharacterEncoding("gb2312");
String id=request.getParameter("id");
int i=db.executeUpdate("delete from book_info where id="+id);
if(i==1)
{out.println("<script language='javaScript'> alert('刪除成功,點擊確定後自動跳到主頁!');</script>");
response.setHeader("refresh","1;url=index.jsp");
}
else{
out.println("<script language='javaScript'> alert('刪除失敗,點擊確定後自動跳到主頁!');</script>");
response.setHeader("refresh","1;url=del.jsp");
}
db.close();
%>
</body>
</html>
edit.jsp
<%@ page language="java" contentType="text/html; charset=gb2312"
pageEncoding="UTF-8" import="java.sql.*"%>
<!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=gb2312">
<title>修改圖書</title>
</head>
<body>
<jsp:useBean id="db" class="book.bookInfo" scope="page"/>
<%
request.setCharacterEncoding("gb2312");
String id=request.getParameter("id");
ResultSet rs=db.executeQuery("select * from book_info where id="+id);
rs.next();
%>
<form action="update.jsp" method="post">
<table border="1" width="50%" >
<CAPTION>修改圖書信息</CAPTION>
<tr>
<th width="30%">書名:</th>
<td width="70%">
<input name="bookname" type="text" value="<%=rs.getString(2)%>"></td>
</tr>
<tr>
<th>作者:</th>
<td><input name="author" type="text" value="<%=rs.getString(3)%>"></td>
</tr>
<tr>
<th>價格:</th>
<td><input name="price" type="text" value="<%=rs.getString(4)%>">元</td>
</tr>
<tr>
<th colspan="2">
<input type="hidden" name="id" value="<%=id%>">
<input type="submit" value="修改">
<input type="reset" value="重置">
</th>
</tr>
</table>
</form>
<%
db.close();
%>
</body>
</html>
update.jsp
<%@ page language="java" contentType="text/html; charset=gb2312" import="java.sql.*" errorPage="error.jsp"%>
<html>
<head>
<title>圖書修改完成</title>
</head>
<body>
<jsp:useBean id="db" class="book.bookInfo" scope="page"/>
<%
request.setCharacterEncoding("gb2312");
String bookname=request.getParameter("bookname");
String author=request.getParameter("author");
String price=request.getParameter("price");
String id=request.getParameter("id");
String sql="update book_info set bookname='"+bookname+"',author='"+author+"',price="+price+" where id="+id;
int i=db.executeUpdate(sql);
if(i==1)
{out.println("<script language='javaScript'> alert('修改成功,點擊確定後自動跳到主頁。');</script>");
response.setHeader("refresh","1;url=index.jsp");
return;
}
db.close();
%>
</body>
</html>
這是我多加的回收站功能——recycle.jsp
<%@ page language="java" import="java.sql.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>回收站</title>
</head>
<body>
<table border="1" >
<tr><td>書名<td>作者<td>價格<td>恢復
<jsp:useBean id="db" class="book.bookInfo" scope="page"/><!-- 導入自己的類(Javabean) -->
<%!
int i = 0;
int rec_id = 0;
%>
<%
request.setCharacterEncoding("gb2312");
// 獲取已刪除的書籍信息的id
String id=request.getParameter("id");
i=db.executeUpdate("delete from book_info where id="+id);
ResultSet rec_info = db.executeQuery("select * from recycleinfo");
if(i==1)
{
// 向回收信息表中加入已刪除的書籍信息的id
int de_sql = db.executeUpdate("insert into recycleinfo(id) values(i)");
// 遍歷回收信息表中已經存在的刪除的書籍信息的id
ResultSet de_rs = db.executeQuery("select * from recycleinfo where id");
while(de_rs.next()){
rec_id = rec_info.getInt(1);
out.println("<tr><td>"+de_rs.getString(2)+"</td><td>"+de_rs.getString(3)+"</td><td>"+de_rs.getString(4)+"</td><td><a href='del.jsp?id="+rec_id+"'>恢復</a></td></tr>");
}
}else{
out.println("<script language='javaScript'> alert('數據庫內部錯誤,信息回收失敗!');</script>");
};
db.close();
%>
</table>
</body>
</html>
error.jsp
<%@ page language="java" isErrorPage="true" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>錯誤頁面</title>
</head>
<body>
錯誤信息爲:
<%=exception.getMessage()%><br>
<%=exception.toString()%>
</body>
</html>
連接數據的java類——bookInfo.java
package book;
import java.sql.*;
public class bookInfo {
private String driverStr="com.mysql.jdbc.Driver";
private String connStr="jdbc:mysql://localhost:3306/bookinfo?characterEncoding=gb2312";//數據庫名
private String dbusername="root";
private String dbpassword="123456";//密碼和數據庫一致
private Connection conn=null;
private Statement stmt=null;
public bookInfo()
{
try{
Class.forName(driverStr);
conn = DriverManager.getConnection(connStr,dbusername, dbpassword);
stmt = conn.createStatement();
}
catch(Exception ex){System.out.println("無法同數據庫建立連接!");}
}
public int executeUpdate(String s)
{
int result=0;
try{result=stmt.executeUpdate(s);}
catch(Exception ex){System.out.println("執行更新錯誤!");}
return result;
}
public ResultSet executeQuery(String s)
{
ResultSet rs=null;
try{rs=stmt.executeQuery(s);}
catch(Exception ex){System.out.println("執行查詢錯誤!");}
return rs;
}
public void close()
{
try{
stmt.close();
conn.close();
}
catch(Exception e){}
}
}
數據庫建表和插入數據——SQL
# MySQL-Front 3.2 (Build 7.31)
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES 'gbk' */;
# Host: 127.0.0.1 Database: book
# ------------------------------------------------------
# Server version 5.0.15-nt
DROP DATABASE IF EXISTS `book`;
CREATE DATABASE `book` /*!40100 DEFAULT CHARACTER SET gbk */;
USE `book`;
#
# Table structure for table bookinfo
#
CREATE TABLE `bookinfo` (
`id` int(10) unsigned NOT NULL auto_increment,
`bookname` varchar(45) NOT NULL default '',
`author` varchar(45) NOT NULL default '',
`price` float NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
#
# Dumping data for table bookinfo
#
/*!40101 SET NAMES gb2312 */;
INSERT INTO `bookinfo` VALUES (1,' Web開發技術教程','張娜、陳寧等',35);
INSERT INTO `bookinfo` VALUES (2,' Web基礎教程','姜仲等',29);
INSERT INTO `bookinfo` VALUES (3,'數據庫應用原理','張冬青',28);
INSERT INTO `bookinfo` VALUES (4,' Java核心技術技術',' Gray Cornell',50);
INSERT INTO `bookinfo` VALUES (5,'JSP2.0應用教程','陳旭東',29);
/*!40101 SET NAMES gbk */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;