文章目录
一、项目需求
已知如下两个表:
publisher:id、name(唯一)、address
book:id、isbn、name(唯一)、publisher_id
实现如下功能:
欢迎进入书籍管理系统
1、出版社管理:增、删(name)、改(name)、查(name)
2、书籍管理:增、删(name)、改(name)、查(name)
3、退出
二、创建表
//创建publisher表
CREATE TABLE `publisher` (
`id` char(36) NOT NULL,
`name` varchar(16) NOT NULL,
`address` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
//创建book表
CREATE TABLE `book` (
`id` char(36) NOT NULL,
`name` varchar(16) NOT NULL,
`isbn` char(11) NOT NULL,
`publisher_id` char(36) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
UNIQUE KEY `isbn` (`isbn`),
KEY `publisher_id` (`publisher_id`),
CONSTRAINT `book_ibfk_1` FOREIGN KEY (`publisher_id`) REFERENCES `publisher` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
三、项目结构
四、log4j.properties
因为在控制台打印的信息有限,所以需要把相关的日志文件保存在一个日志文件中,便于查找问题。导入log4j的jar包并配置log4j.properties。
# DEBUG设置输出日志级别,由于为DEBUG,所以ERROR、WARN和INFO 级别日志信息也会显示出来
log4j.rootLogger=DEBUG,Console,RollingFile
#将日志信息输出到控制台
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern= [%-5p]-[%d{yyyy-MM-dd HH:mm:ss}] -%l -%m%n
#将日志信息输出到操作系统D盘根目录下的log.log文件中
log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingFile.File=D://log.log
log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern=%d [%t] %-5p %-40.40c %X{traceId}-%m%n
五、db.properties
使用JDBC连接数据库的时候有时候需要修改连接的配置信息,如果每次修改都更改源代码不利于项目的维护,所以这里是使用db.properties文件把JDBC的配置信息保存在其中。
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=0314
六、PropertiesUtil.java
上面已经把数据库的相关配置信息保存在了db.properties文件中。然后再使用一个PropertiesUtil类读取db.properties文件。
/**
* 获取db.properties文件的工具类
*
* @author Administrator
*/
public class PropertiesUtil {
private static Properties properties = new Properties();
static {
InputStream inputStream = PropertiesUtil.class.getClassLoader().getResourceAsStream("db.properties");
try {
properties.load(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 依据key获取value值
*
* @author Administrator
*/
public String getValue(String key) {
return properties.getProperty(key);
}
}
七、DBUtil.java
在上面已经获得了数据库连接的配置信息,创建一个DBUtil类来对数据库进行增删改查。
/**
* 数据库工具类
*
* @author Administrator
*/
public class DBUtil {
private static Logger logger = Logger.getLogger(DBUtil.class);
static Connection connection = null;
static Statement statement = null;
static ResultSet result = null;
static PreparedStatement pStatement = null;
/**
* 加载驱动
*/
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
logger.debug(e.getMessage(), e);
}
}
/**
* 获取连接
*
* @author Administrator
*/
private static Connection getConnection() {
try {
PropertiesUtil pUtil = new PropertiesUtil();
String url = pUtil.getValue("jdbc.url");
String username = pUtil.getValue("jdbc.username");
String password = pUtil.getValue("jdbc.