Javaweb08-JDBC数据库连接技术

JDBC数据库连接技术

**原理:**JDBC在应用程序与数据库之间起到了一个桥梁作用,当应用程序使用JDBC访问特定的数据库时,需要通过不同数据库驱动与不同的数据库进行连接,连接后即可对数据库进行相应的操作。

image-20240617165440625

一.Jdbc API

1.Driver接口

**作用:**Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用。

2.DriverManager类

**作用:**DriverManager类用于加载JDBC驱动并且创建与数据库的连接。

  • 注册驱动

方法一:

方法名称功能描述
registerDriver(Driver driver)该方法用于向DriverManager中注册给定的JDBC驱动程序
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
此方式会使数据库驱动被注册两次。这是因为Driver类的源码,已经在静态代码块中完成了数据库驱动的注册。所以,为了避免数据库驱动被重复注册,需要在程序中使用Class.forName()方法加载驱动

方法二:

Class.forName("com.mysql.jdbc.Driver")
//注意:MySQL 5.6以及之后的版本需要更新到新版驱动,使用Class.forName("com.mysql.cj.jdbc.Driver")方式加载驱动类
  • 获取数据库连接对象
方法名称功能描述
getConnection(String url,String user,String pwd)该方法用于建立和数据库的连接,并返回表示连接的Connection对象
//注意:
url:表示要连接的数据库的url
连接本地mysql的url:
jdbc:mysql://localhost:3306/数据库名
jdbc:mysql://127.0.0.1:3306/数据库名    
jdbc:mysql://127.0.0.1:3306/数据库名?serverTimezone=GMT%2B8    
user:是数据库的用户名
pwd:是数据库的密码

3.Connection接口

  • 事务管理(Connection接口定义了三个对应的方法)
开启事务:setAutoCommit(boolen) ture:自动提交 false:手动
提交事务:commit()
回滚事务:rollback()

Connection conn=DriverManager.getConnection(String url,String user,String password)
    
try{
	conn.setAutoCommit(false);
	操作mysql;
	conn.commit();
}catch(exception e){
	conn.rollback();
}
  • 获取Statement对象
方法名称功能描述
createStatement()创建一个Statement对象,并将此SQL语句发送到数据库
prepareStatement(String sql)创建一个PreparedStatement对象,并将带参数的SQL语句发送到数据库
prepareCall(String sql)创建一个CallableStatement对象调用数据库存储过程

4.Statement接口

**作用:**Statement接口用于执行静态的SQL语句,并返回一个结果对象。利用Statement接口把静态的SQL语句发送到数据库编译执行,然后返回数据库的处理结果。

方法名称功能描述
execute(String sql)用于执行各种SQL语句,该方法返回一个boolean类型的值,如果为true,表示所执行的SQL语句有查询结果,可通过Statement的getResultSet()方法获得查询结果
executeUpdate(String sql)用于执行SQL中的insert、update和delete语句。该方法返回一个int类型的值,表示数据库中受该SQL语句影响的记录条数 。执行DDL或DML语句,DML语句影响的行数0表示执行成功;DDL返回0
executeQuery(String sql)用于执行SQL中的select语句,该方法返回一个表示查询结果的ResultSet对象

5.PreparedStatement接口

**作用:**PreparedStatement是Statement的子接口,用于执行预编译的SQL语句。PreparedStatement接口扩展了带有参数的SQL语句的执行操作,应用该接口中的SQL语句可以使用占位符“?”代替参数,然后通过setter()方法为SQL语句的参数赋值

  • 执行带参数的Sql语句
方法名称功能描述
executeUpdate()在此PreparedStatement对象中执行SQL语句,该语句必须是一个DML语句或者DDL
executeQuery()在此PreparedStatement对象中执行SQL查询,该方法返回的是ResultSet对象
  • 给参数赋值
方法名称功能描述
setInt(int parameterIndex, int x)将指定参数设置为给定的int值
setFloat(int parameterIndex, float x)将指定参数设置为给定的float值
setString(int parameterIndex, String x)将指定参数设置为给定的String值
setDate(int parameterIndex, java.sql.Date x)将指定参数设置为给定的Date值
addBatch()将一组参数添加到此PreparedStatement对象的批处理命令中
setCharacterStream(int parameterIndex, java.io.Reader reader,int length)将指定的输入流写入数据库的文本字段
setBinaryStream(int parameterIndex, java.io.InputStream x, int length)将二进制的输入流数据写入到二进制字段中
//preparedStatement预编译的功能
PreparedStatement对象可以对SQL语句进行预编译,预编译的信息会存储在PreparedStatement对象中。当相同的SQL语句再次执行时,程序会使用PreparedStatement对象中的数据,而不需要对SQL语句再次编译去查询数据库,这样就大大提高了数据的访问效率。
//对于自增属性id无需插入
String sql1 = "INSERT INTO dept(name) VALUES(?)";
preparedStatement = conn.prepareStatement(sql1);
preparedStatement.setString(1, "软件工程");
int i = preparedStatement.executeUpdate();
if (i > 0) System.out.println("插入成功");
else System.out.println("插入失败");

6.ResultSet接口

**作用:**ResultSet接口用于保存JDBC执行查询时返回的结果集,该结果集封装在一个逻辑表格中。在ResultSet接口内部有一个指向表格数据行的游标(指针),ResultSet对象初始化时,游标在表格的第一行之前,调用next()方法可将游标移动到下一行。如果下一行没有数据,则返回false。

  • 通过索引或字段获取参数
方法名称功能描述
getString(int columnIndex)用于获取指定字段的String类型的值,参数columnIndex代表字段的索引
getString(String columnName)用于获取指定字段的String类型的值,参数columnName代表字段的名称
getInt(int columnIndex)用于获取指定字段的int类型的值,参数columnIndex代表字段的索引
getInt(String columnName)用于获取指定字段的int类型的值,参数columnName代表字段的名称
getDate(int columnIndex)用于获取指定字段的Date类型的值,参数columnIndex代表字段的索引
getDate(String columnName)用于获取指定字段的Date类型的值,参数columnName代表字段的名称
//注意:
通过索引获取值时,索引从1开始
  • 通过指针指向表格位置
方法名称功能描述
next()将游标从当前位置向下移一行
absolute(int row)将游标移动到此 ResultSet 对象的指定行
afterLast()将游标移动到此 ResultSet 对象的末尾,即最后一行之后
beforeFirst()将游标移动到此 ResultSet 对象的开头,即第一行之前
previous()将游标移动到此 ResultSet 对象的上一行
last()将游标移动到此 ResultSet 对象的最后一行
//注意:
ResultSet主要用于存储结果集,可以通过next()方法由前向后逐个获取结果集中的数据,如果想获取结果集中任意位置的数据,则需要在创建Statement对象时,设置两个ResultSet定义的常量
    
Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = st.executeQuery(sql);
rs.absolute(2);  
//在上述方式中,常量“Result.TYPE_SCROLL_INSENITIVE”表示结果集可滚动,常量“ResultSet.CONCUR_READ_ONLY”表示以只读形式打开结果集。

二.Jdbc快速入门案例

  • 导入mysql-connector-java-8.0.31.jar包(要保持与mysql相同的版本)

  • 通过反射注册驱动,使得JDK可以识别相应的jar包

  • 获取JDBC对数据库的连接(DriverManager.getConnection(String url, String username, String password))

  • 定义SQL语句

  • 获取执行SQL对象(connection.createStatement())

  • 执行SQL语句(statement.execute())

  • 处理返回结果

  • 释放资源(close)

0.创建工程导入驱动jar包

1.注册驱动#识别jar包 
Calss.forName("com.mysql.cj.jdbc.Driver");

2.获取连接
Connection conn=DriverManager.getConnection
            (String url,String user,String password);
            
3.定义SQL语句
String sql=" ";

4.获取执行SQL对象
Statement stmt=conn.createStatement();

5.执行SQL
int count=stmt.executeUpdate(sql);//返回受影响行数

6.处理返回结果

7.释放资源
stmt.close();
conn.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值