Sql学习6-5_JDBC

JDCB

一、介绍

Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。

在JDK1.x版本中,JDBC只是一个可选部件,到了JDK1.1公布时,SQL类包(也就是JDBCAPI)就成为 Java语言的标准部件。

二、使用步骤

2.1 引入jar文件

2.1.1 使用jar包

以Mysql为例

8.0和5.0不兼容,需要根据数据库版本下载

2.1.2 Maven
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.22</version>
</dependency>

2.2 加载驱动

JavaSE项目中可以省略 , JavaWeb项目必须编写此步骤

Class.forName("com.mysql.cj.jdbc.Driver");
  • 驱动名称:
    • oracle:oracle.jdbc.driver.OracleDriver
    • mysql 5.0:com.mysql.jdbc.Driver
    • mysql 8.0:com.mysql.cj.jdbc.Driver
    • Sql Server2000:com.microsoft.jdbc.sqlserver.SQLServerDriver

2.3 获取JDBC连接对象

Connection conn = DriverManager.getConnection(url,account,password);
2.3.1 数据库连接地址
  • 格式: 主协议:子协议://ip地址:端口号/数据库名称
    • mysql的连接地址: jdbc:mysql://localhost:3306/java35
    • oracle的连接地址: jdbc:oracle:thin:@localhost:1521:ORCL
    • Sql Server2000:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dbname

2.4 创建SQL执行对象

通过连接对象, 创建SQL执行对象 (SQL执行环境)

Statement state = conn.createStatement();

2.5 执行SQL语句

通过SQL执行对象 ,执行SQL语句

state.execute(String sqlstr); 

2.6 释放资源

state.close();
conn.close();
re.close();

2.7 操作结果集

//1. 控制游标移动的常用方法:
boolean next()
//作用: 控制游标向下一行移动.
//返回值: 移动成功返回true , 下一行不存在移动失败, 返回false
    
boolean privious()
//作用: 控制游标向上一行移动.
//返回值: 移动成功返回true , 上一行不存在移动失败, 返回false
    
boolean absolute(int 行号)
//作用: 控制游标向指定行移动
//返回值: 移动成功返回true , 行不存在移动失败, 返回false
    
boolean beforeFirst()
//作用: 控制游标移动到第一行
//返回值: 移动成功返回true, 没有第一行数据返回false
    
boolean afterLast()
//作用: 控制游标移动到最后一行
//返回值: 移动成功返回true, 没有最后一行数据返回false

//2. 获取游标指向行的字段值的常用方法:
XXX getXXX(String 列名)
//根据字段名, 得到此字段的值
    
XXX getXXX(int 字段的索引)
//根据字段的索引, 得到字段的值 , 索引从1开始

三、DAO

DAO(Data Access Object)是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务 逻辑与数据库资源中间。

DAO模式是标准的JavaEE设计模式之一.开发人员使用这个模式把底层的数据访问操作和上层的商务逻辑分 开.一个典型的DAO实现有下列几个组件:

  1. 一个DAO工厂类;
  2. 一个DAO接口;
  3. 至少一个实现DAO接口的具体类;
  4. 数据传递对象(有些时候叫做Bean对象)。

四、SQL注入

4.1 SQL注入类型

4.1.1 数字型注入 1 and 1 = 1
SELECT * FROM table WHERE id=1 and 1 = 1;
4.1.2 字符型注入 admin' and 1 = 1 --
SELECT * FROM table WHERE username = 'admin' and 1 = 1 -- ;

4.2 防止SQL注入

将SQL语句与参数分离,将参数作为SQL的特殊部分进行预处理

使用 PreparedStatement 预编译的SQL执行环境,只是对象不同,操作简单,几乎与Statement一样

五、事件

在Java中的操作方式

//JDBC事务通过连接对象开启, 回滚 ,提交. 只针对当前连接对象生效

//开启事务
conn.setAutoCommit(false);

//回滚事务
conn.rollback();

//提交事务
conn.commit();

六、批处理

将多条语句,放到一起批量处理

批1处理的原理:将多条SQL语句转换为一个SQL指令,显著的提高大量SQL语句执行时的数据库性能

6.1 Statement对象使用

//1. 得到Statement对象
Statement state = conn.createStatement();

//2. 将一条SQL语句, 加入到批处理中.
state.addBatch(String sql);

//3. 执行批处理
state.executeBatch();

//4. 清空批处理
state.clearBatch();

6.2 PreparedStatement对象使用

//1. 得到PreparedStatement对象
PreparedStatement state = conn.prepareStatement("预编译的SQL");

//2. 填充预编译的参数
state.setXXX(1,填充参数);

//3. 将一条填充完毕参数的SQL, 加入到批处理中.
state.addBatch();

//4. 执行批处理
state.executeBatch();

//5. 清空批处理
state.clearBatch();

七、数据库连接池

7.1 概念

连接池其实就是一个容器(集合),存放数据库连接的容器。当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问之后,会将连接对象归还给容器

7.2 实例Druid

  1. 导入 jar 包
  2. 定义配置文件
  3. 手动加载配置文件
  4. 通过工厂获取 DruidDataSourceFactory 数据连接池对象
  5. 获取连接
  6. 归还连接

配置文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test
username=root
password=root
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 延迟时间
maxWait=3000

实例

public class DruidDemo1 {
	public static void main(String[] args) throws Exception {
        //1.导入jar包
        //2.定义配置文件

        //3.加载配置文件
        Properties prop = new Properties();
        InputStream is = DruidDemo1.class.getClassLoader().getResourceAsStream("druid.properties");
        prop.load(is);

        //4.获取连接池对象
        DataSource ds = DruidDataSourceFactory.createDataSource(prop);


        //5.获取连接
        Connection conn = ds.getConnection();
        System.out.println(conn);

        // 6.归还连接
        conn.close();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在上一篇文章中,我们介绍了JDBC中的PreparedStatement和ResultSet类的使用。在本文中,我们将介绍Apache Commons DbUtils库中的QueryRunner类。 QueryRunner类是Apache Commons DbUtils库中的一个类,它封装了大量的JDBC操作,简化了JDBC编程的复杂度。使用QueryRunner类可以避免编写大量的JDBC代码,提高开发效率。 使用QueryRunner类需要引入以下依赖: ```xml <dependency> <groupId>commons-dbutils</groupId> <artifactId>commons-dbutils</artifactId> <version>1.7</version> </dependency> ``` 接下来我们来看一下如何使用QueryRunner类。 1. 建立连接 在使用QueryRunner类之前,需要先建立与数据库的连接。这可以通过JDBC中的DriverManager类来实现。例如: ```java Connection conn = DriverManager.getConnection(url, user, password); ``` 其中,url、user和password分别表示数据库的URL、用户名和密码。 2. 执行SQL语句 QueryRunner类中提供了多个方法来执行SQL语句。其中,最常用的方法是query()和update()方法。 query()方法用于查询数据,它的使用方式如下: ```java QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM user WHERE id=?"; Object[] params = {1}; ResultSetHandler<List<User>> rsh = new BeanListHandler<>(User.class); List<User> userList = qr.query(conn, sql, rsh, params); ``` 其中,第一个参数conn表示与数据库的连接,第二个参数sql表示要执行的SQL语句,第三个参数rsh表示查询结果的处理器,第四个参数params是一个数组,表示SQL语句中的参数。 update()方法用于更新数据,它的使用方式如下: ```java QueryRunner qr = new QueryRunner(); String sql = "UPDATE user SET name=? WHERE id=?"; Object[] params = {"张三", 1}; qr.update(conn, sql, params); ``` 其中,第一个参数conn表示与数据库的连接,第二个参数sql表示要执行的SQL语句,第三个参数params是一个数组,表示SQL语句中的参数。 3. 释放资源 在使用QueryRunner类完成数据库操作后,需要释放相应的资源,包括ResultSet、Statement和Connection等。这可以通过调用DbUtils类中的close()方法来实现。例如: ```java DbUtils.close(resultSet); DbUtils.close(statement); DbUtils.close(connection); ``` 4. 示例代码 下面是一个完整的示例代码,演示了如何使用QueryRunner类完成数据库操作: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.ResultSetHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; public class QueryRunnerDemo { public static void main(String[] args) throws SQLException { String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "123456"; Connection conn = DriverManager.getConnection(url, user, password); // 查询数据 QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM user WHERE id=?"; Object[] params = {1}; ResultSetHandler<List<User>> rsh = new BeanListHandler<>(User.class); List<User> userList = qr.query(conn, sql, rsh, params); for (User user : userList) { System.out.println(user); } // 更新数据 sql = "UPDATE user SET name=? WHERE id=?"; params = new Object[]{"张三", 1}; qr.update(conn, sql, params); conn.close(); } } ``` 以上就是QueryRunner类的使用方法。QueryRunner类封装了大量的JDBC操作,可以避免编写大量的JDBC代码,提高开发效率。同时,使用QueryRunner类也需要注意资源的释放,避免出现资源泄漏的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值