图书管理系统后台的简单实现
这就是一个简单的练手小Demo,前端已经写好,完成后端即可
环境为:jdk1.8 + mysql(5.7) + eclipse+tomcat8.5
建立数据库表
- admin表
CREATE TABLE `admin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`ausername` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,sdf
`phone` varchar(50) NOT NULL,
`touxiang` varchar(200) NOT NULL,
PRIMARY KEY (`id`)
);
ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8
- book表
CREATE TABLE `book` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fid` int(11) DEFAULT NULL,
`name` varchar(50) DEFAULT NULL,
`money` varchar(50) DEFAULT NULL,
`press` varchar(50) DEFAULT NULL,
`reader` varchar(50) DEFAULT NULL,
`status` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
);
ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8
- fenlei表
CREATE TABLE `fenlei` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
);
ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8
- user表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`username` varchar(50) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
`phone` varchar(50) DEFAULT NULL,
`regtime` varchar(50) DEFAULT NULL,
`touxiang` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
);
ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 |
表结构定义完成,接下来是具体的代码实现
实现
采用的是MVC三层结构,Servlet充当控制器
建立工程目录结构
- 新建工程book(Dynamic Web Project)
- 定义包结构
service是服务层
dao是持久层
controller控制器
domain是对应数据库的实体类
utils是里面是一些工具类
factory工厂,返回流程对应的服务对象
带有impl的是各自的实现类
建立数据库连接
- 导入mysql驱动包(
WebContend/WEB-INF/lib/mysql-connector-java-5.1.15-bin.jar
) - 在
com.oracle.utils
下建立DBUtil.java文件 - 在src下建立数据库配置文件
jdbc.properites
- 测试数据库是否连接成功
jdbc.properites文件如下
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=UTF-8
username=root
password=123456
DBUtil.java
package com.oracle.utils;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import org.eclipse.jdt.internal.compiler.parser.RecoveredStatement;
public class DBUtils {
private static String driver;
private static String url;
private static String username;
private static String password;
//静态代码块,最先执行的
static {
//加载资源文件
Properties p= new Properties();
InputStream in = null;
try {
in = DBUtils.class.getClassLoader().getResourceAsStream("jdbc.properites");
p.load(in);
driver = p.getProperty("driver");
url = p.getProperty("url");
username = p.getProperty("username");
password = p.getProperty("password");
//注册驱动
Class.forName(driver);
} catch (IOException | ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(in!=null) {
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//得到连接
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, username, password);
}
//增删改的,关闭资源
public static void close(Connection conn,PreparedStatement ps) {
if(ps!=null) {
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//查询的,关闭资源
public static void close(Connection conn,PreparedStatement ps,ResultSet rs) {
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ps!=null) {
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
坑1: jdbc.properites文件中的 driver,url,username,password
driver = p.getProperty("driver"); url = p.getProperty("url"); username = p.getProperty("username"); password = p.getProperty("password");
一定要和代码里的相对应。
坑2: 写完代码发现从表单里提交的数据到数据库总是乱码(已经检查过数据库和表单编码都是UTF-8了),那么在连接数据库的url中手动指定编码,通过添加参数的方式
url=jdbc:mysql://localhost:3306/bookuseUnicode=true&characterEncoding=UTF-8
坑3: 数据库的连接,先打开的要最后关闭,后打开的要先关闭。
测试连接
DBTest.java
package com.oracle.test;
import java.sql.Connection;
import java.sql.SQLException;
import org.junit.jupiter.api.Test;
import com.oracle.utils.DBUtils;
public class DBTest {
@Test
public void testConnection() {
try {
Connection conn = DBUtils.getConnection();
if(conn!=null) {
System.out.println("数据库连接成功");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("连接失败");
e.printStackTrace()