JDBC与连接池

简介

JDBC java数据库连接技术,是Java和数据库之间的一个桥梁,是一个规范,标准接口,而不是一个实现,可以让我们通过Java语言执行sql语句;

全称:Java DataBase Connectivity(Java数据库连接),就是使用Java语言操作关系型数据库的一套API;

JDBC以接口的形式定义了所有操作关系型数据库的规则,而各个数据库厂商根据接口写实现类,我们称之为:驱动;

因此JDBC本质上就是一个接口;我们使用这套接口进行编程,真正执行代码的是驱动jar包中的实现类;

优点:

  1. Java代码不需要针对不同数据库 分别开发

  2. 可随时替换底层数据库,访问数据库的Java代码基本不变

JDBC操作数据库的步骤

操作前不要忘记导入对应的驱动包;

1,注册驱动

//forName方式加载驱动类
Class.forName(className);

2,获取连接

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

3,书写sql语句,创建执行对象(statement对象及其子对象)

String sql="select * from user";
Statement statement=connection.createStatement();

4,执行SQL

List<User>list=statement.executeUpdate(sql); 

5,处理结果

一般只有查询语句需要处理结果;其他的诸如增删改的操作只会返回一个正整数,代表操作影响的行数(方法重写之后可能不会返回),

6,释放资源资源

及时释放资源,提升性能;

JDBC详解

DriverManager(驱动管理类)

作用:

1,注册驱动

forName()方法其实是调用了DriverManager的registerDriver()方法

2,获取数据库连接

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

url:连接地址;username:用户名;password:密码

Connection(数据库连接对象)

作用:

1,获取执行SQL的对象

statement对象

preparedStatement对象

2,管理事务

connection.setAutoCommit(true/false) true表示自动提交事务,false表示手动提交,如果选择了false,则从现在开始你开启了一个事务;

connection.commit(); 提交事务

connection.rollback();程序执行出现问题,回滚;

Statement

最简单的执行sql语句的对象,SQL语句只要是字符串就可以了,字符串符合sql语句的要求就可以;灵活性很差,而且在由参数的情况下,直接使用字符串进行拼接,会出现SQL注入的情况;

执行情况:

指定DML.DDL语句,返回值对象为整形,是受影响的行数,上面也提起过;

int count = statement.executeUpdate(sql);

执行查询语句返回对象为ResultSet对象(接下来就看看ResultSet对象);

ResultSet resultSet=statement.executeQuery(sql):

ResultSet(结果集)

封装了SQL查询语句的结果

如何从ResultSet 对象中获取我们想要的数据

boolean next() :将光标从当前位置向前移动一行,判断当前行是否为有效行;返回值说明:true:当前行有数据;false :无效行,当前行没有数据;

ResultSet对象.get数据类型(参数:数据库查询结果当前列对应的列名)

PreparedStatement

预编译SQL语句并执行:预防SQL注入问题

sql注入:特殊字符作为输入的参数,并且被当作程序代码运行,破坏代码的正确运行;

获取 PreparedStatement 对象:

// SQL语句中的参数值,使用?占位符替代
String sql = "select * from user where username =
? and password = ?";
// 通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt =
conn.prepareStatement(sql);

设置参数值:

pstmt.set(参数1,参数2);参数1?位置的编号 参数2?的值

执行SQL语句集于Statement一样;

executeUpdate(); 执行DDL语句和DML语句

executeQuery(); 执行DQL语句

但是:调用这两个方法时不需要传递SQL语句,因为获取SQL语 句执行对象时已经对SQL语句进行预编译了。

数据库连接池

数据库连接池是一个容器,负责分配,管理数据库的连接;

允许应用程序使用一个现有的数据库连接,而不是再重新建立一个;

释放空闲时间超过最大空闲时间的数据库连接,来避免因为没有释放数据库连接而引起的数据库连接遗漏;

优点:

  1. 资源重用

  2. 提升系统的响应速度

  3. 避免数据库连接遗漏

在没有数据库连接池是,每一次与数据库的连接操作都需要创建一个connection对象,使用完之后再丢弃,每次有应用程序来连接就重复上述的操作,大大消耗了资源,拖慢了性能,而在使用数据库连接池之后,每次有连接就直接分配一个连接,使用完之后再归还支连接池。这样可以消除对象创建和销毁所带来的延迟,从而提高系统的性能;同时每个连接存在时间限制,假如一个对象一直拥有连接池,而没有操作,会立刻收回,然后分配给其他应用对象;

实现:

标准接口:DataSource

官方提供的接口,有一个

Connection getConnection()

方法,提供了获取连接的功能;

常见的数据库连接池:DBCP,C3P0,Druid;

最常使用:Druid(德鲁伊)

  • Druid连接池是阿里巴巴开源的数据库连接池项目

  • 功能强大,性能优秀,是Java语言最好的数据库连接池之一

使用:

导入jar包

定义配置文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///db1?
useSSL=false&useServerPrepStmts=true
username=root
password=1234
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000

加载配置文件

Properties prop=new Properties();
prop.load(new FileInputStream("配置文件地址");

获取数据库连接池对象

DataSource dataSource=DruidDataSourceFactory(prop);

获取连接对象

Connection conn=dataSource.getConnection();

后续操作就和jdbc的操作一样,数据库连接池的作用只是优化与管理数据库连接,是JDBC基础上的升级优化,以前我们需要一步步操作,而现在连接池帮我们做了;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值