恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Java之使用JDBC
首页
资讯中心
/
Java之使用JDBC
Java之使用JDBC
发布时间:2026/8/5 8:53:12
学习内容怎么在Idea里面使用jdbc文章目录学习内容前言什么是JDBCjdbc的使用步骤1.注册驱动为什么需要注册驱动三种注册方式2.获取连接连接的核心要素获取连接的方式3.获取操作对象三种操作对象对比代码演示SQL注入解决方法4.执行SQL三种执行方法代码演示5.处理结果集ResultSet核心概念ResultSet常用方法获取元数据信息6.关闭资源资源关闭顺序基础关闭方式1.try-catch-finally2.try-with-resources总结前言什么是JDBCJDBCJava Database Connectivity 是Java提供的一套用于执行SQL语句的API它允许Java程序与各种关系型数据库如MySQL、Oracle、PostgreSQL等进行交互。jdbc的使用步骤1.注册驱动是将数据库驱动程序加载到Java虚拟机JVM中并告知DriverManager驱动管理器这个驱动可用。为什么需要注册驱动不同的数据库有不同的通信协议MySQL、Oracle、SQL Server等DriverManager需要知道使用哪个驱动来建立连接相当于告诉Java“我要连接MySQL数据库请加载对应的驱动程序”三种注册方式方式代码优点缺点Class.forName()Class.forName(“com.mysql.cj.jdbc.Driver”)兼容性好推荐需要处理ClassNotFoundExceptionDriverManager.registerDriver()DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver())直观会创建驱动实例两次自动注册JDBC 4.0无需代码简单依赖META-INF/services2.获取连接获取连接 是通过DriverManager与数据库建立网络连接返回一个Connection对象。连接的核心要素URL数据库的位置和协议jdbc:mysql://localhost:3306/database_name?参数1值1参数2值2协议 子协议 主机地址 端口 数据库名 连接参数常见参数及介绍参数名说明默认值示例useSSL是否使用SSL加密连接falseuseSSLfalseserverTimezone服务器时区系统默认serverTimezoneAsia/ShanghaiuseUnicode是否使用Unicode编码trueuseUnicodetruecharacterEncoding字符编码无characterEncodingutf8allowPublicKeyRetrieval是否允许获取公钥falseallowPublicKeyRetrievaltrue用户名数据库登录账号密码数据库登录密码获取连接的方式// 方式1使用URL 用户名 密码ConnectionconnDriverManager.getConnection(url,user,password);// 方式2使用URL Properties对象PropertiespropsnewProperties();props.setProperty(user,*****);props.setProperty(password,*****);ConnectionconnDriverManager.getConnection(url,props);// 方式3仅使用URL需要URL中包含用户信息Stringurljdbc:mysql://user:passwordlocalhost:3306/jdbc;ConnectionconnDriverManager.getConnection(url);结束时需要关闭conn3.获取操作对象获取操作对象 是创建用于执行SQL语句的对象。三种操作对象对比类型用途特点适用场景Statement执行静态SQL每次都需要编译SQL固定SQL无参数PreparedStatement执行带参数的SQL预编译防SQL注入动态SQL有参数CallableStatement调用存储过程支持存储过程调用执行存储过程代码演示Statementstmtconn.createStatement();结束时需要关闭stmtSQL注入解决方法使用prepare statement进行预编译再将需要传入的数据作为值传进去语法1.写sql语句用代替所要传入的值String sql select * from tuser where name ? and password ? ;2.进行预编译PreparedStatement pstmt conn.prepareStatement(sql)3.将值传入pstmt.setString(1,name);pstmt.setString(2,password);代码演示packagejbdc;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.sql.*;/* 1.在JDBC中Statement有一个子接口叫PreparedStatement(预编译的数据库操作对象) 2.它是如何解决sql注入的问题的 它会对sql语句进行预先编译然后再给sql传值即使用户提供的信息含有sql语句的关键字 这些关键字也只会被当作“值”来处理不会参与sql语句的编译进而解决sql注入的问题 */publicclassjdbctest06{staticvoidmain()throwsException{BufferedReaderbrnewBufferedReader(newInputStreamReader(System.in));System.out.println(请输入姓名);Stringnamebr.readLine();System.out.println(请输入密码);Stringpasswordbr.readLine();try{Class.forName(com.mysql.cj.jdbc.Driver);Stringurljdbc:mysql://localhost:3306/jbdc;Stringuser******;Stringpassword1******;try(ConnectionconnDriverManager.getConnection(url,user,password1)){Stringsqlselect * from tuser where name ? and password ? ;try(PreparedStatementpstmtconn.prepareStatement(sql)){pstmt.setString(1,name);pstmt.setString(2,password);try(ResultSetrspstmt.executeQuery()){if(rs.next()){System.out.println(登陆成功);}else{System.out.println(登陆失败);}}}}}catch(Exceptione){e.printStackTrace();}}}4.执行SQL执行行SQL 是将SQL语句发送到数据库执行并获取执行结果。三种执行方法方法返回值适用场景executeQuery()ResultSetSELECT查询语句executeUpdate()int影响行数INSERT/UPDATE/DELETEexecute()boolean不确定SQL类型或DDL语句代码演示StringsqlINSERT INTO tuser (id, name, password, gender, phone) VALUES (?, ?, ?, ?, ?);ResultSetrsstmt.executeQuery(sql);###5.处理结果集处理结果集 是从ResultSet中提取查询结果数据。ResultSet核心概念1.游标Cursor指向当前数据行的指针2.列索引从1开始计数3.数据获取按列名或列索引获取ResultSet常用方法方法作用next()移动到下一行getString(“列名”)获取字符串类型数据getInt(“列名”)获取整数类型数据getDouble(“列名”)获取浮点数类型数据getDate(“列名”)获取日期类型数据wasNull()判断上一列是否为NULL获取元数据信息ResultSetMetaData .getMetaData()6.关闭资源关闭资源 是JDBC编程中至关重要的一步它负责释放数据库连接、语句对象和结果集等资源防止内存泄漏和数据库连接耗尽。资源关闭顺序正确的关闭顺序从里到外ResultSet结果集 ← 最先关闭Statement/PreparedStatement语句对象 ← 其次Connection连接 ← 最后关闭原因ResultSet依赖StatementStatement依赖Connection基础关闭方式1.try-catch-finally// 先关闭ResultSetif(rs!null){try{rs.close();System.out.println(✅ ResultSet已关闭);}catch(SQLExceptione){System.err.println(❌ ResultSet关闭失败: e.getMessage());e.printStackTrace();}}// 再关闭Statementif(stmt!null){try{stmt.close();System.out.println(✅ Statement已关闭);}catch(SQLExceptione){System.err.println(❌ Statement关闭失败: e.getMessage());e.printStackTrace();}}// 最后关闭Connectionif(conn!null){try{conn.close();System.out.println(✅ Connection已关闭);}catch(SQLExceptione){System.err.println(❌ Connection关闭失败: e.getMessage());e.printStackTrace();}}2.try-with-resources核心要点1.自动关闭资源在使用完毕后自动调用 close() 方法2.必须实现 AutoCloseable只有实现了 AutoCloseable 接口的资源才能使用3.声明在括号内资源在 try 后的括号中声明和初始化4.逆序关闭多个资源会按照声明的逆序关闭代码演示try(ConnectionconnDriverManager.getConnection(URL,USER,PASSWORD);Statementstmtconn.createStatement();ResultSetrsstmt.executeQuery(SELECT id, name FROM tuser LIMIT 3)){System.out.println(【资源创建顺序】);System.out.println( 1️⃣ Connection 已创建);System.out.println( 2️⃣ Statement 已创建);System.out.println( 3️⃣ ResultSet 已创建);System.out.println(\n【使用资源】);while(rs.next()){System.out.printf( ID: %d, 姓名: %s%n,rs.getInt(id),rs.getString(name));}System.out.println(\n【退出 try 块自动关闭资源】);System.out.println( 关闭顺序逆序);System.out.println( 3️⃣ → 2️⃣ → 1️⃣);System.out.println( ResultSet → Statement → Connection);}catch(SQLExceptione){System.err.println(❌ 错误: e.getMessage());}也可以使用try嵌套总结