1.需求
已知如下两个表:
create table publisher(
id char(36) primary key,
name varchar(24) unique,
address varchar(120)
)
create table book(
id char(36) primary key,
isbn varchar(12) unique,
name varchar(24),
publisher_id char(36),
foreign key(publisher_id) references publisher(id)
)完成下面功能:
欢迎进入书籍管理系统
1、出版社管理:增、删、改、查
2、书籍管理:增、删、改、查
3、退出
2. 使用log4j.properties 文件
# DEBUG设置输出日志级别,由于为DEBUG,所以ERROR、WARN和INFO 级别日志信息也会显示出来 log4j.rootLogger=DEBUG,RollingFile #每天产生一个日志文件(RollingFile) log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender #当天的日志文件全路径 log4j.appender.RollingFile.File=d:/logs/sirius.log #服务器启动日志是追加,false:服务器启动后会生成日志文件把老的覆盖掉 log4j.appender.RollingFile.Append=true #日志文件格式 log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout log4j.appender.RollingFile.layout.ConversionPattern=%d [%t] %-5p %-40.40c %X{traceId}-%m%n log4j.appender.RollingFile.Threshold=DEBUG #设置每天生成一个文件名后添加的名称,备份名称:sirius.log.年月日时分.log log4j.appender.RollingFile.DatePattern='.'yyyy-MM-dd-HH-mm'.log'
通过使用Log4j,可以控制日志信息格式及其输送目的地(控制台、文件、数据库等),方便的对项目中的日志进行处理,方便后期查找系统运行期间出现的问题,进而便于维护系统。
3. 使用db.properties 文件
url=jdbc:mysql://127.0.0.1:3306/test user_name=root password=root
通常情况下,我们的项目完成后上线然后通过域名访问。在上线过程中项目组长通常是创建var包打包交给运维处理。为了后期便于配置管理软件,常将诸如数据库连接配置(url、用户名和密码)、上传文件保存路径等配置信息写在Properties文件(拓展名为properties)中。最好不要将用户名、密码等信息写死在一个类中,无法修改数据库信息。将其写入properties文件中可以防止上述情况。
4. PropertiesUtil类
import java.io.IOException; import java.io.InputStream; import java.util.Properties; 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(); } } public String getValue(String key) { return properties.getProperty(key); } }
开发中不止一个Java类需要将某些日志信息写入指定位置,此时每个类中都会重复性地写入如下代码,为了提高代码的重用性,可以将其写入一个PropertiesUtil类中。
5. DBUtil 类
package com.zzu.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.apache.log4j.Logger; /** * 数据库工具类 * * @author 刘莹 */ public class DButil { private static Logger logger=Logger.getLogger(DButil.class); /** * 使用静态代码块加载数据驱动 * * @刘莹 */ static { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { logger.debug(e.getMessage(),e); } } /** * 获取数据库连接 * * @刘莹 */ private static Connection getConnection() { try { PropertiesUtil pu = new PropertiesUtil(); String url = pu.getValue("url"); String user_name = pu.getValue("user_name"); String password = pu.getValue("password"); return DriverManager.getConnection(url, user_name, password); } catch (Exception e) { logger.debug(e.getMessage(),e); } return null; } /** * 数据库更新操作---增删改 * * @author 刘莹 */ public static boolean update(String sql) { Connection connection = null; Statement statement = null; try { connection = getConnection(); statement = connection.createStatement(); return statement.executeUpdate(sql) > 0; } catch (Exception e) { logger.debug(e.getMessage(),e); } finally { close(statement, connection); } return false; } /** * 数据库查询操作 * *