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工具了,希望可以帮到你们。
|