项目要求
要求编写符合下列要求的网站
注意事项:
1.表格中的数据是显示数据库中的,需要通过JavaWeb以及sql语句调用数据库
2.添加图书信息,修改以及删除都为超链接,分别跳转到add.jsp、edit.jsp以及del.jsp
需要创建的文件:
- booksql.sql:建立数据库和表
- index.jsp:该系统的主页面,展示并管理信息
- add.jsp:添加书籍信息
- edit.jsp:修改书籍信息
- del.jsp:删除书籍信息
- createbook.jsp:进行信息中转
- Book.Java:存储书籍信息
- BookDao.Java:对图书数据库信息操作
- BookSave.Java:判断对数据更新是否成功
搭建步骤
1.建立并连接数据库
注意事项:需要将相关资源导入到库中
建立booksql.sql创建数据库
create database book;
//建立名为book的数据库
use book;
create table book(title char(20) primary key not null,author char(20) not null,publish char(20) not null,price double not null)charset=utf8
//建立包含书名(主键)、作者、出版社、价格的Book表
连接数据库:
右键点击数据库"新建连接"->驱动程序选择MySQL ->选择所建数据库进行连接
2.创建Book.Java存储书籍信息
该文件为Javabean文件,右键新建Java文件即可
public class Book {
private String title;
private String author;
private String publish;
private double price;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPublish() {
return publish;
}
public void setPublish(String publish) {
this.publish = publish;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Book{" + "title=" + title + ", author=" + author + ", publish=" + publish + ", price=" + price + '}';
}
}
3.创建BookDao.Java对数据库信息进行操作
该文件为Javabean文件
package Book;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class BookDao {
private String driver;
private String dburl;
private Connection con=null;
private String user="root";
private String password="lhw12138";
public BookDao() {
driver="com.mysql.jdbc.Driver";
dburl="jdbc:mysql://localhost:3306/book";
}
构造函数,用于获得数据库驱动以及数据库信息
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getDburl() {
return dburl;
}
public void setDburl(String dburl) {
this.dburl = dburl;
}
public Connection getCon() {
try{
Class.forName(driver);
}catch(ClassNotFoundException ex){
System.out.println("驱动程序加载失败!");
return con;
}
try{
con=DriverManager.getConnection(dburl,user,password);
}catch(SQLException ex){
System.out.println("数据库失败!");
}
return con;
}
public void setCon(Connection con) {
this.con = con;
}
获得数据库连接,第一个try catch获得驱动程序,第二个获得数据库连接
public int saveBook(Book b){
String sql="insert into book values(?,?,?,?)";
int k=0;
try{
if(con!=null){
PreparedStatement pst=con.prepareStatement(sql);
pst.setString(1,b.getTitle());
pst.setString(2,b.getAuthor());
pst.setString(3,b.getPublish());
pst.setDouble(4, b.getPrice());
k=pst.executeUpdate();
pst.close();
}
}catch(SQLException ex){
System.out.println("插入(error from BookDao)");
}
return k;
}
保存书籍数据
public ResultSet searchBook(String sql){
ResultSet rs=null;
try{
if(con!=null){
Statement st=con.createStatement();
rs=st.executeQuery(sql);
}
}catch(SQLException ex){
System.out.println("查询失败(error from BookDao)");
}
return rs;
}
搜索数据库内图书信息
public int updatebook(Book b,String oldtitle){
int k=0;
try{
if(con!=null){
Statement st=con.createStatement();
k+=st.executeUpdate("update book set title='"+b.getTitle()+"'where title='"+oldtitle+"'");
String title=b.getTitle();
//先修改书名,然后再根据新的书名对其余信息进行修改
k+=st.executeUpdate("update book set author='"+b.getAuthor()+"'where title='"+title+"'");
k+=st.executeUpdate("update book set publish='"+b.getPublish()+"'where title='"+title+"'");
k+=st.executeUpdate("update book set price='"+b.getPrice()+"'where title='"+title+"'");
st.close();
}
}catch(SQLException ex){
System.out.print("修改失败(error from BookDao)");
}
return k;
}
}
根据主键(书名)对该图书信息进行修改,并更新数据库
4.创建add.jsp对数据库数据进行添加
<body>
<form action="createBook.jsp?flag=add" method="post">
书名:<input type="text" name="title"><br>
作者:<input type="text" name="author"><br>
出版社:<input type="text" name="publish"><br>
价格:<input type="text" name="price"><br>
<input type="submit" value="提交">
</form>
</body>
将文本框内读取的数据发送给createBook.jsp
flag标记:
add.jsp和edit.jsp都会将数据传给createBook.jsp,为了对二者传的数据进行区分,设置不同的flag值,通过if语句进行判断执行哪种操作
5.创建index.jsp管理系统主页面
css:
<style>
h2,h3{
color:blue;
text-align: center;
}
table{
margin: 0px auto
//表格居中
}
.a1{
color: blue;
background-color: #999999;
}
.a2{
background-color: #cccccc;
}
</style>
body:
<body>
<h2>图书管理系统</h2>
<h3><a href="add.jsp">添加图书信息</a></h3>
<%
BookDao bd=new BookDao();
bd.getCon();
ResultSet rs=bd.searchBook("select * from book");
ResultSetMetaData rsm=rs.getMetaData();
out.print("<table border=1>");
out.print("<tr class='a1'>");
out.print("<td>");
out.print("书名");
out.print("</td>");
out.print("<td>");
out.print("作者");
out.print("</td>");
out.print("<td>");
out.print("出版社");
out.print("</td>");
out.print("<td>");
out.print("价格");
out.print("</td>");
out.print("<td >");
out.print("管理");
out.print("</td>");
out.print("</tr>");
while(rs.next()){
out.print("<tr class='a2'>");
for(int i=1;i<=rsm.getColumnCount();i++){
out.print("<td>");
out.print(rs.getString(rsm.getColumnName(i))+" ");
//按列输出数据库内的图书信息
out.print("</td>");
}
out.print("<td><a href=edit.jsp?sm="+rs.getString(1)+">修改</a>");
out.print(" <a href=del.jsp?sm="+rs.getString(1)+">删除</a></td>");
out.print("</tr>");
//将该行的图书书名发送,根据该书名执行相关操作
}
rs.close();
out.print("</table>");
%>
</body>
6.创建edit.jsp对数据库数据进行修改
<body>
<%
request.setCharacterEncoding("UTF-8");
//将utf-8导入,使得数据库可以识别中文字符
String title=request.getParameter("sm");
//获得从index.jsp发送的title值
BookDao bd=new BookDao();
bd.getCon();
ResultSet rs=bd.searchBook("select * from book where title='"+title+"'");
if(rs.next()){
%>
<form action="createBook.jsp?flag=edit&title=<%=title%>" method="post">
//将获取的title值发送给createBook.jsp
书名:<input type="text" name="title" value="<%=rs.getString(1)%>"/><br>
作者:<input type="text" name="author" value="<%=rs.getString(2)%>"/><br>
出版社:<input type="text" name="publish" value="<%=rs.getString(3)%>"/><br>
价格:<input type="text" name="price" value="<%=rs.getDouble(4)%>"/><br>
<input type="submit" value="保存">
</form>
<%
}
else{
out.print("未找到要修改的图书");
out.print("<br><a href=index.jsp>返回上一步</a>");
}
%>
</body>
7.创建del.jsp对数据库的信息进行删除
<body>
<%
request.setCharacterEncoding("UTF-8");
String title=request.getParameter("sm");
BookDao bd=new BookDao();
Connection cn=bd.getCon();
Statement st=cn.createStatement();
int k=st.executeUpdate("delete from book where title='"+title+"'");
if(k>0){
out.print("删除成功");
out.print("<br><a href=index.jsp>继续操作</a>");
}
else{
out.print("删除失败");
out.print("<br><a href=index.jsp>返回上一步</a>");
}
st.close();
%>
</body>
8.创建createBook.jsp进行信息中转
jsp:useBean
- 表示装载一个将在JSP页面中使用的JavaBean
- id表示定义的JavaBean的唯一标识,class表示定义的JavaBean的类。定义了一个JavaBean就可以为其属性赋值了
jsp:setProperty
- 与jsp:useBean搭配使用,为JavaBean的属性进行赋值
- property = "*"表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。
<body>
<%
request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="book" class="Book.Book"/>
//将Book包下的Book.java导入该页面
<jsp:setProperty name="book" property="*"/>
//使用book类赋值,id和name需相同
<%
request.setAttribute("msg", book);
String flag=request.getParameter("flag");
String title=request.getParameter("title");
//获取从add和edit传的值
%>
<jsp:forward page="bookSave">
<jsp:param name="flag" value="<%=flag%>"/>
<jsp:param name="oldtitle" value="<%=title%>"/>
//将获取的值发送给bookSave
</jsp:forward>
</body>
9.创建BookSave.Java对数据库操作是否成功进行判断
由于代码较多,只截取更改后的函数代码
public class BookSave extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding(“UTF-8”)的作用是设置对客户端请求和数据库取值时的编码
response.setCharacterEncoding(“UTF-8”)的作用是指定服务器响应给浏览器的编码
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
Book bookmsg=(Book)request.getAttribute("msg");
//用bookmsg接受createBook发送的Book类型的msg
String flag=request.getParameter("flag");
String oldtitle=(String)request.getParameter("oldtitle");
System.out.println(oldtitle);
BookDao bd=new BookDao();
bd.getCon();
if(flag.equals("add")){
int bc=bd.saveBook(bookmsg);
if(bc>0){
out.print("保存成功");
out.print("<br><a href=index.jsp>查看结果</a>");
}
else{
out.print("保存失败");
out.print("<br><a href=index.jsp>返回上一步</a>");
}
}
if(flag.equals("edit")){
int xg=bd.updatebook(bookmsg, oldtitle);
//调用BookDao里面的更新数据库函数
if(xg==4){
out.print("修改成功");
out.print("<br><a href=index.jsp>查看结果</a>");
}
else{
out.print("修改失败");
out.print("<br><a href=index.jsp>返回上一步</a>");
}
}
}catch(Exception ex){
out.println("所查图书不存在");
}
}