当前位置: 首页 > news >正文

Java学习记录之JDBC

JDBC

JDBC 是 Java Database Connectivity 的缩写,是允许Java 程序访问并操作关系型数据库数据的一套 应用程序接口。本身就是一种规范,它提供的接口有一套完整的,可移植的访问底层数据库的程序。

JDBC 的架构

JDBC API支持两层和三层处理模型进行数据库访问,但在一般的JDBC体系结构由两层组成:

  1. JDBC API: 提供了应用程序对JDBC的管理连接。

  2. JDBC Driver API: 支持JDBC管理到驱动器连接。

JDBC API的使用驱动程序管理器和数据库特定的驱动程序提供透明的连接到异构数据库。JDBC驱动程序管理器可确保正确的驱动程序来访问每个数据源。

JDBC常用类和接口

类或接口说明
DriverManager这个类管理数据库驱动程序的列表。确定内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求。识别JDBC在一定子协议的第一个驱动器将被用来建立数据库连接
Driver此接口处理与数据库服务器通信。很少直接使用驱动程序(Driver)对象,一般使用DriverManager中的对象,它用于管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息
Connection此接口与接触数据库的所有方法。连接对象表示通信上下文,即与数据库中的所有的通信是通过此唯一的连接对象
Statement / PreparedStatement创建的对象的SQL语句提交到数据库。一些派生的接口接受除执行存储过程的参数
ResultSet这些对象保存从数据库后,执行使用Statement对象的SQL查询中检索数据。它作为一个迭代器,可以通过移动它来检索下一个数据
SQLException用于处理发生在数据库应用程序中的任何错误

常用的JDBC驱动程序名和连接URL

URL的写法为:
jdbc:数据库名称(如mysql)😕/数据库地址:3306/databaseName?参数名:参数值
常用数据库实例:

数据库驱动名称URL格式
MySQL 5.xcom.mysql.jdbc.Driverjdbc:mysql://hostname/databaseName
Oracleoracle.jdbc.driver.OracleDriverjdbc:oracle:thin:@hostname:portNumber:databaseName
PostgreSQLorg.postgresql.Driverjdbc:postgresql://hostname:port/dbname

注意,mysql版本8以上的驱动名为:com.mysql.cj.jdbc.Driver

Connection

Jdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,创建方法为:

Connection conn = DriverManager.getConnection(url,username,password); 

这个对象的常用方法:

方法描述
createStatement()创建向数据库发送sql的statement对象。
prepareStatement(sql)创建向数据库发送预编译sql的PrepareSatement对象。
prepareCall(sql)创建执行存储过程的callableStatement对象。
setAutoCommit(boolean autoCommit)设置事务是否自动提交。
commit()在链接上提交事务。
rollback()在此链接上回滚事务。
示例:
public class DBUtil {private final static String DRIVERCLASS = "com.mysql.cj.jdbc.Driver";private final String userName = "root";private final String passwd = "152887";private final String url = "jdbc:mysql://127.0.0.1:3306/rbas?serverTimeZone=Asia/ShangHai";/*** 加载驱动*/static {try {Class.forName(DRIVERCLASS);} catch (ClassNotFoundException e) {throw new RuntimeException(e);}}public DBUtil() {}/*** 创建数据库连接* @return connection 链接*/Connection connection = null;try {connection = DriverManager.getConnection(url,userName,passwd);} catch (SQLException e) {throw new RuntimeException(e);}}

Statement 和 PreperedStatement

Statement

Jdbc程序中的Statement对象用于向数据库发送SQL语句,创建方法为:

Statement st = conn.createStatement();

Statement对象常用方法:

方法含义
executeQuery(String sql)用于向数据发送查询语句。
executeUpdate(String sql)用于向数据库发送insert、update或delete语句
execute(String sql)用于向数据库发送任意sql语句
addBatch(String sql)把多条sql语句放到一个批处理中。
executeBatch()向数据库发送一批sql语句执行。

示例:

Statement st = null;
//获取用于向数据库发送sql语句的statement
st = conn.createStatement();
//向数据库发sql
String sql = "select id,name,password,email,birthday from users";
st.executeQuery(sql);

PreperedStatement

PreperedStatement是Statement的子接口,它的实例对象可以通过调用:

PreperedStatement st = conn.preparedStatement();

实例:

PreparedStatement preparedStatement = null;
String sql = "select * from users where name=? and password=?";// 获取用于向数据库发送sql语句的Preperedstatement
preparedStatement = conn.preparedStatement(sql);//在此次传入,进行预编译
preparedStatement.setString(1, username);
preparedStatement.setString(2, password);
// 向数据库发sql
preparedStatement.executeQuery();//在这里不需要传入sql

ResultSet

ResultSet用于代表 SQL 语句的执行结果。Resultset 封装执行结果时,采用的类似于表格的方式,ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用 ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。

获取行相关方法

ResultSet提供了对结果集进行滚动的方法:

  • next():移动到下一行
  • Previous():移动到前一行
  • absolute(int row):移动到指定行
  • beforeFirst():移动resultSet的最前面。
  • afterLast() :移动到resultSet的最后面。

获取值相关方法

ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:

  • 获取任意类型的数据

    • getObject(int index)
    • getObject(string columnName)
  • 获取指定类型的数据

    • getString(int index)
    • getString(String columnName)

常用数据类型转换对比表

SQL类型Jdbc对应方法返回类型
bit(1),bit(n)getBoolean,getBytes()Boolean,byte[]
tinyintgetByte()Byte
smallintgetShort()Short
intgetIntInt
bigintgetLong()Long
char,varchar,longvarchargetStringString
text(clob) blobgetClob(),getblob()Clob,blob
dategetDate()java.sql.Date
timegetTime()java.sql.Time
timestampgetTimestampjava.sql.Timestamp

释放资源

Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象。

注意:为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。

示例:

    public void close(Connection connection , PreparedStatement preparedStatement , ResultSet resultSet){try {if (resultSet == null) {resultSet.close();}if (preparedStatement == null) {preparedStatement.close();}if (connection == null) {connection.close();}} catch (SQLException e) {throw new RuntimeException(e);}}//使用 懒 就不写在方法中了try {preparedStatement = connection.prepareStatement(sql);//填充占位符(sql语句的参数)int len = args.size();for (int i = 0; i < len; i++) {preparedStatement.setObject(i+1,args.get(i));}//执行SQL语句并返回影响的数据量count = preparedStatement.executeUpdate();} catch (SQLException e) {throw new RuntimeException(e);}finally {close(connection ,preparedStatement ,null);}

使用时需下载jdbc.jar包,完整程序示例(多表联合查询,SQL语句请自行复习)包括jar包放在资源文件中。

http://www.lryc.cn/news/28218.html

相关文章:

  • 矩阵翻硬币
  • 【C语言跬步】——指针数组和数组指针(指针进阶)
  • 第十四届蓝桥杯模拟赛第三期(Python)
  • css-盒模型
  • Linux | 调试器GDB的详细教程【纯命令行调试】
  • wifi芯片大市场和个人小生活
  • 全国计算机技术与软件专业技术资格(水平)考试 上半年2023年3月13日开始,下半年2023年8月14日开始
  • 大数据框架之Hadoop:MapReduce(六)Hadoop企业优化
  • Spring File Storage的详细文档
  • Java软件开发好学吗?学完好找工作吗?
  • 【独家C】华为OD机试提供C语言题解 - 优秀学员统计
  • 数据仓库、数据中台、数据湖都是什么?
  • 0099 MySQL02
  • 应急响应-ubuntu系统cpu飙高
  • MDK软件使用技巧
  • 3 333333
  • 1528. 重新排列字符串
  • 【8】【用户操作日志】操作日志SpringBootStarter
  • 【游戏逆向】寻路函数隐藏检测点分析
  • 【Zabbix实战之运维篇】Zabbix监控Docker容器配置方法
  • 这款 Python 工具进行数据分析及数据可视化真的很棒啊
  • visual Studio Code常用快捷键
  • 基础(一)十六进制转八进制
  • 梯度提升算法决策过程的逐步可视化
  • Linux系统调用之文件属性操作函数
  • VMware 安装 银河麒麟高级服务器操作系统 V10 + QT 开发环境搭建
  • 2023年疫情开放,国内程序员薪资涨了还是跌了?大数据告诉你答案
  • 太赫兹频段耦合器设计相关经验总结
  • 反弹shell数据不回显带外查询pikaqiu靶场搭建
  • 按键修改阈值功能、报警功能、空气质量功能实现