java+jdbc简单实现图书,出版社管理

这篇博客介绍了一个使用Java JDBC实现的图书与出版社管理系统的详细步骤,包括log4j的日志配置、数据库连接参数的管理、DBUtil工具类、IRowMapper接口以及出版社和图书管理的相关操作。
摘要由CSDN通过智能技术生成

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、出版社管理:增、删(name)、改(name)、查(name)
	2、书籍管理:增、删(name)、改(name)、查(name)
	3、退出

2. log4j.properties

程序运行所出现的异常信息有助于我们修改代码,而控制台所展示的信息有限,所以我们使用 log4j来打印异常日志文件帮助我们处理异常。
引入log4j-1.2.15.jar包,配置log4j.properties文件

# DEBUG\u8BBE\u7F6E\u8F93\u51FA\u65E5\u5FD7\u7EA7\u522B\uFF0C\u7531\u4E8E\u4E3ADEBUG\uFF0C\u6240\u4EE5ERROR\u3001WARN\u548CINFO \u7EA7\u522B\u65E5\u5FD7\u4FE1\u606F\u4E5F\u4F1A\u663E\u793A\u51FA\u6765
log4j.rootLogger=DEBUG,Console,RollingFile

#\u5C06\u65E5\u5FD7\u4FE1\u606F\u8F93\u51FA\u5230\u63A7\u5236\u53F0
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
#\u5C06\u65E5\u5FD7\u4FE1\u606F\u8F93\u51FA\u5230\u64CD\u4F5C\u7CFB\u7EDFD\u76D8\u6839\u76EE\u5F55\u4E0B\u7684log.log\u6587\u4EF6\u4E2D
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

3. db.properties

jdbc连接数据库时在DriverManager.getConnection(url, user, password)中的url,user,password经常需要修改,因此我们需要一个配置文件专门配置这些信息。

url=jdbc:mysql://127.0.0.1:3306/test
user_name=root
password=

4. PropertiesUtil

package com.jd.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
 * 
 *
 * @author zzs
 */
public class PropertiesUtil {
   

	private static Properties properties = new Properties();
	static {
   
		InputStream inputStream = PropertiesUtil.class.getClassLoader().getResourceAsStream("db.properties");
		try {
   
			properties.load(inputStream);//将properties文件中的每对key=value变为map集合中的键值对
		} catch (IOException e) {
   
			e.printStackTrace();
		}
	}
	/**
	 * 获取key的value值
	 *
	 * @author zzs
	 */
	public static String getValue(String key) {
   
		return properties.getProperty(key);
	}
}

5. DBUtil

关于DButil工具类的描述详见简单实现DButil工具类

package com.jd.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 java.util.Scanner;

import org.apache.log4j.Logger;

/**
 * 数据库工具类
 *
 * @author zzs
 */
public class DButil {
   
	static Connection con =null;
	static Statement sta =null;
	static String sql =null;
	static ResultSet result = null;
	/**
	 * 获取连接
	 *
	 * @author zzs
	 */
	private static Logger logger = Logger.getLogger(DButil.class);
	public static Connection getConnection() {
   
		try {
   
			Class.forName("com.mysql.jdbc.Driver");
			String url = PropertiesUtil.getValue("url");
			String userName = PropertiesUtil.getValue("user_name");
			String password = PropertiesUtil.getValue("password");
			return DriverManager.getConnection(url,userName,password);	
		} catch (Exception e) {
   
			logger.debug(e.getMessage(),e);
		}
		return null;
	}
	
	/**
	 * 数据库修改方法
	 *
	 * @author zzs
	 */
	public static boolean upDate(String sql) {
   
		con = getConnection();	
		try {
   
			sta = con.createStatement();
			return sta.executeUpdate(sql)>0;
		} catch (SQLException e) {
   
			e.printStackTrace();
		}finally {
   
			close(result, sta, con);
		}
		return false;
	}
	/**
	 * 数据库修改方法,防止SQL注入
	 *
	 * @author zzs
	 */
	public static boolean upDate(String sql,Object...array) {
   
		con = getConnection();
		PreparedStatement preparedStatement =null;
		try {
   
			preparedStatement = con.prepareStatement(sql);
			for (int i = 1; i <=array.length; i++) {
   
				preparedStatement.setObject(i, array[i-1]);
			}
			return preparedStatement.executeUpdate()>0;
		}catch(SQLException e) {
   
			e.printStackTrace();
		}finally {
   
			close(result, preparedStatement, con);
		}
		return false;
	}	
	/**
	 * 数据库查询方法
	 *
	 * @author zzs
	 */
	public static void sel(IRowMapper rowMapper,String sql) {
   
		try {
   
			con = getConnection();
			sta = con.createStatement();
			result = sta.executeQuery(sql);
			rowMapper.rowMapper(result);
		} catch (Exception e) {
   
			e.printStackTrace();
		}finally {
   
			close(result, sta, con);
		}
	}
	/**
	 * 数据库查询方法,防止SQL注入
	 *
	 * @author zzs
	 */
	public static void sel(IRowMapper rowMapper,String sql
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值