JDBC是一种用于执行sql语句的API,可以使开发人员操作不同的数据库。下面介绍我对jdbc学习。小白学习过程,大佬勿喷。
一.JDBC使用一般步骤
1.导入jar包。可以到对应的数据库官网进行下载。复制jar包到目录下,右键add as librar
2.注册驱动 Class.forName("com.mysql.jdbc.Driver");
3.获取数据库的连接对象。 DriverManager.getConnection("url","user","password")
url:指定连接的路径 语法 以mysql为例 jdbc:mysql://ip地址(域名):端口号/数据库名称
本机 url可以简写jdbc:mysql:///数据库名称
user:数据库的用户名
password:数据库的密码
4.书写sql语句 String sql=" sql语句";
5.创建想数据库发送sql语句的对象
建议先学习createStstement();再学习prepareStstement();由浅入深学习
6.执行sql语句
7.释放资源
close()
二,JDBC工具类(想必我们在学习jdbc的过程中也都已经发现,里面的代码重复率过多,进而导致代码的可读性不强。所以jdbc的工具类对我们学习java有着不可小觑的作用。)
每次使用JDBC的时候都要书写冗长的代码段,不符合复用的理念,于是要单独写一个类,将通用的JDBC操作写到一个类中,便于重复使用和精简代码。
1.传统的jdbc工具类(DBUtil.java)(更换数据库时,要更换加载驱动代码。不同账号时也要修改代码。跨平台型不高,不建议使用)
import java.sql.*;
public class DBUtil {
public static Connection getcon() {
Connection con = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql:///b","root","123456");
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
public static void close(Connection con, Statement stmt) {
if (stmt != null){
try {
stmt.close();
} catch (SQLException exception) {
exception.printStackTrace();
}
if (con != null) {
try {
con.close();
} catch (SQLException exception) {
exception.printStackTrace();
}
public static void close(Connection con, Statement stmt , ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException exception) {
exception.printStackTrace();
}
if (stmt != null){
try {
stmt.close();
} catch (SQLException exception) {
exception.printStackTrace();
}
if (con != null) {
try {
con.close();
} catch (SQLException exception) {
exception.printStackTrace();
}
}
}
}
}
}
2.标准的jdbc工具类(换数据库时,无需修改代码,只需修改配置文件中的内容即可。建议使用)
1)注册驱动与获取链接
首先创建一个文件,放到项目中,要更换别的连接时,只需修改配置文件即可,无需修改类文件和重新编译。配之文件的内容如下
driver=数据库驱动路径
url=url连接字符串
user=用户名
password=密码
然后就需要将配置文件中键值对中的值取出,并注册了驱动。因为驱动和取出配置文件只需要一次就可以,所以就写入到静态代码块中,在程序运行的开始就处理好了,无需以后再冗余执行。
// 特别提醒定义变量时要定义为静态变量
private static String url;
private static String user;
private static String password;
private static String driver;
// 我们每次连接数据库时加载驱动静态变量只使用一次,所以推荐使用静态代码注册驱动并给静态变量赋值
static{
try {
// 创建Properties集合类
Properties pro = new Properties();
// 获取src路径下文件,使用ClassLoader类加载器
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
// URL定位了文件的绝对路径
URL res = classLoader.getResource("jdbc.properties");
// 获取字符串路径
String path = res.getPath();
// 读取文件
pro.load(new FileReader(path));
// 给静态变量赋值
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");
// 注册驱动
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
获取连接
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
2)释放资源
‘由于执行sql语句时分为有无结果集两种情况,所以释放资源时分为两种情况,进而有两种重载形式。
public static void close(Statement stmt, Connection conn){
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rs, Statement stmt, Connection conn){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}