JDBC连接MySQL操作数据_封装工具类
数据库驱动#
安装数据库后,我们的程序是不可以直接进行数据库连接的,需要对应的数据驱动(就像我们电脑的声卡、网卡也不是插上就能用的,也需要驱动),通过驱动去和数据库打交道,如图:
JDBC#
SUN 公司为了简化、统一对数据的凑在哦、定义了一套 Java 操作数据库的规范(接口),称之为 JDBC(Java DataBase Connection)。这套接口由数据库厂商去实现,这样开发人员只需学习 jdbc 接口,并通过 jdbc 加载具体的驱动,就可以操作数据库。
相关API#
- DriverManager驱动管理类
- Connection连接对象接口(通过 DriverManager 获取对象)
- createStatement():生成命令对象
- preparedStatement():生成预编译命令对象
- Statement命令对象接口(通过 Connection 获取对象)
- executeQuery():执行SQL增删改查语句,返回首影响行数
- executeUpdate():执行SQL查询语句,返回结果集
- execure():执行任何SQL语句,返回boolean
- prearedStatement预编译命令对象接口(Statement 子类,也通过 Connection 获取对象)
- executeQuery():执行SQL增删改查语句,返回首影响行数
- executeUpdate():执行SQL查询语句,返回结果集
- execure():执行任何SQL语句,返回boolean
- setXxxx(占位符索引,占位符的值):设置对应索引的占位符的值,类型为XX类型
- setObject(占位符索引,占位符的值):设置对应索引的占位符的值,类型为Object类型
- CallableStatement : 调用数据库中的 存储过程/存储函数(Statement 子类,也通过 Connection 获取对象)
- ResultSet结果集对象接口(通过 Statement 获取对象)
- next():下移一行返回当前行是否有值(类似java迭代器)
- previous():上移一行,返回当前行是否有值
- getXX(列索引|列名|别名):返回对应列的值,接收类型为XX
- getObject(列索引|列名|别名):返回对应列的值,接收类型为Object
afterLast() :移动到resultSet的最后面。
- 释放资源
Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象,特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。
为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。
JDBC连接步骤:#
- 读取配置文件
- 注册加驱动
- 创建连接
- 执行增删改查
- 关闭资源
将其中1/2/3/5封装成工具类
对JDBC连接过程通用部分封装为工具类:
/**
* @author YH
* 功能:
* 1.获取连接
* 2.释放资源
* @create 2020-03-04 15:27
*/
public class JDBCUtils {
static String user;
static String password;
static String url;
static String driver;
//读取配置属于共有操作,且执行一次即可,所以可以放入static代码块,随着工具类加载执行一次即可,提升效率
static{
//使用try-catch方式处理异常,免去调用者再次处理
try {
//读取配置文件
Properties properties = new Properties();
properties.load(new FileInputStream("JDBC\\src\\JDBCTest2\\jdbc2.properties"));
user = properties.getProperty("user");
password = properties.getProperty("password");
url = properties.getProperty("url");
driver = properties.getProperty("driver");
//注册驱动
Class.forName(driver);
} catch (Exception e) {
//编译时异常转为运行时异常
throw new RuntimeException(e);
}
}
/**功能:用于获取连接
* @return Connection连接对象
* @ throws Exception
*
* */
public static Connection getConnection(){
//获取连接
try {
return DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**功能:释放资源
* 通用的释放资源方法,无用参数留null
* @param connection
* @param statement PreparedStatement是其子类,使用多态,也可引用
* @param resultSet
*/
public static void close(Connection connection, Statement statement, ResultSet resultSet){
//使用try-catch方式处理异常,免去调用者再次处理
try {
if(connection != null){
connection.close();
}
if(statement != null){
statement.close();
}
if(resultSet != null){
resultSet.close();
}
} catch (SQLException e) {
//编译时异常转为运行时异常
throw new RuntimeException(e);
}
}
}
JDBC连接MySQL操作数据实例:
public class Customers {
public static void main(String[] args) throws SQLException, IOException, ClassNotFoundException {
Customers customers = new Customers();
customers.select();//查询数据
}
public void select() {
Scanner info = new Scanner(System.in);
System.out.print("请输入姓名:");
String info_id = info.next();
//调用工具类
Connection connection = JDBCUtils.getConnection();
System.out.println("连接成功");
//执行增删改操作
PreparedStatement statement = null;
try {
String sql = "select * from customers where name=?;";
statement = connection.prepareStatement(sql);
statement.setString(1,info_id);
ResultSet set = statement.executeQuery();
while(set.next()){
String id = set.getString(1);
String name = set.getString(2);
String email = set.getString(3);
String birth = set.getString(4);
System.out.println("编号\t姓名\t邮箱\t生日");
System.out.println(id + "\t" + name + "\t" + email + "\t" + birth+"\t");
}
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
//调用工具类,关闭资源
JDBCUtils.close(connection,statement,null);
}
}
}
作者: "无问西东"
出处:https://www.cnblogs.com/csyh/p/12410528.html
版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!