A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 15736709271 初级黑马   /  2016-8-27 22:15  /  1454 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,是操作数据库的规范。我在写代码时使用的是mysql。
那么在开始介绍方法之前呢,首先,我们要有一个数据库,以及连接数据库的驱动,相信这些大家都已经掌握了,那么接下来就给大家介绍一下本人封装JDBCUtils的方法。
配置文件:在项目src文件夹下新建.properties结尾的配置文件,并写入以下内容
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/reflect
user=root
password=026457
这里driver指的是数据库驱动类的路径,在你导入mysql-connector-java-5.1.37-bin的jar包之后,在这个包中相应的路径下(com.mysql.jdbc)可以找到Driver这个类。url代表的是你的数据库,前面jdbc:mysql://的格式是固定的,localhost指的是数据库所在计算机的IP地址,3306是数据库采用的接口(数据库默认一般是3306,也有特殊情况。),后面的reflect是数据库名,我mysql数据库里面有一个叫做reflect的数据库,这里需要改成你需要连接的数据库名。user是你安装数据库时使用的用户名,默认的是root,安装时是没有修改的。password是连接数据库的密码。
JDBCUtils类代码:
[AppleScript] 纯文本查看 复制代码
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
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.Properties;

public class JDBCUtils {
	
	private static String driver;		//数据库驱动,在配置文件中读取。
	private static String url;			//指向你自己的数据库。
	private static String user;			//连接数据库的账号
	private static String password;		//连接数据库的密码
	private static Statement statement;	//用于接收sql语句执行平台
	private static Connection conn;		//用于接收数据库连接对象
	private static ResultSet rs;		//用于接收结果集

	static {
		//创建Properties对象
		Properties prop = new Properties();
		try {
			//读取配置文件,获取配置信息。
			prop.load(new BufferedReader(new FileReader("src/mysql.properties")));
			driver = prop.getProperty("driver");
			url = prop.getProperty("url");
			user = prop.getProperty("user");
			password = prop.getProperty("password");
			//注册驱动
			Class.forName(driver);
		} catch (FileNotFoundException e) {
			System.out.println("找不到配置文件.");
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			System.out.println("找不到驱动.");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("读取数据库配置文件错误");
			e.printStackTrace();
		}
	}
	
	
	/**
	 * 获取数据库连接
	 * @return Connection连接对象
	 */
	public static Connection getConnection() {
		try {
			conn = DriverManager.getConnection(url, user, password);
			return conn;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	
	/**
	 * 执行sql语句并返回结果集
	 * @param sql 要执行的sql语句
	 * @return ResultSet结果集
	 */
	public static ResultSet executeQuery(String sql) {
		try {
			statement = getConnection().createStatement();
			rs = statement.executeQuery(sql);
			return rs;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	
	/**
	 * 执行增、删、改sql语句
	 * @param sql 要执行的sql语句
	 * @return 数据库中受影响的行数
	 */
	public static int executeUpdate(String sql) {
		try {
			statement = getConnection().createStatement();
			int count = statement.executeUpdate(sql);
			return count;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}
	
	
	/**
	 * 获取预编译对象
	 * @param sql  预编译对象要编译的sql语句
	 * @return PreparedStatement预编译对象
	 */
	public static PreparedStatement getPreparedStatement(String sql) {
		try {
			return getConnection().prepareStatement(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 关闭连接
	 */
	public static void close() {
		if(rs!=null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			rs = null;
		}
		if(statement!=null) {
			try {
				statement.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			statement = null;
		}
		if(conn!=null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			conn = null;
		}
	}
}

在这个JDBCUtils里面,我把注册驱动的动作封装到了静态代码块里面,不用每次获取数据库连接对象都要注册一遍,封装了getConnection()、executeQuery(String sql)、executeUpdate(String sql)、getPreparedStatement(String sql)和close()5个方法,其中getConnection()返回的是数据库连接对象,方便我们获取数据库连接对象。executeQuery(String sql)在使用的时候可以自动获取数据库连接对象,并执行sql语句,返回结果集,我们只需要直接操作结果集就可以了。executeUpdate(String sql)跟executeQuery(String sql)方法区别就在于返回值类型不同,其他基本类似。getPreparedStatement(String sql)可以直接自动获取PreparedStatement预编译对象,并通过它自己的setXXX()方法完成sql语句的预编译,同时PreparedStatement还可以有效地处理sql注入的问题,提高了数据库的安全性。close()用于关闭结果集、sql语句执行平台和连接,在关闭的同时将它们的值赋值为null,方便下次调用。
以下是测试类代码(只测试了三个方法,其他方法读者可以自行测试):
[AppleScript] 纯文本查看 复制代码
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import cn.itcast.utils.JDBCUtils;

public class JDBCUtilsTest {

	public static void main(String[] args) throws SQLException {
		
		//JDBCUtils.executeQuery(String sql)测试
		String sql1 = "select * from table01;";
		ResultSet rs1 = JDBCUtils.executeQuery(sql1);
		while(rs1.next()) {
			System.out.println(rs1.getObject(1));
		}
		JDBCUtils.close();
		
		//JDBCUtils.getPreparedStatement(String sql)测试
		String sql2 = "select * from table01 where id=?;";
		PreparedStatement ps = JDBCUtils.getPreparedStatement(sql2);
		ps.setInt(1, 1);
		ResultSet rs2 = ps.executeQuery();
		while(rs2.next()) {
			System.out.println(rs2.getObject("name"));
		}
		JDBCUtils.close();
	}
}


以上便是本人封装的JDBCUtils工具了,希望可以帮到你们。

1 个回复

倒序浏览
求加精。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马