JDBC连接MySQL操作数据_封装工具类

数据库驱动#

Copy
安装数据库后,我们的程序是不可以直接进行数据库连接的,需要对应的数据驱动(就像我们电脑的声卡、网卡也不是插上就能用的,也需要驱动),通过驱动去和数据库打交道,如图:

JDBC#

Copy
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. 创建连接
  4. 执行增删改查
  5. 关闭资源

将其中1/2/3/5封装成工具类

对JDBC连接过程通用部分封装为工具类:

Copy
/** * @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操作数据实例:

Copy
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); } } }
posted @   "无问西东"  阅读(457)  评论(0编辑  收藏  举报
编辑推荐:
· 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代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
网络创业项目 123how出海导航
点击右上角即可分享
微信分享提示
CONTENTS