JDBC (java database connection)
java的数据库连接
连接步骤
1.引入jar文件
2.加载数据库驱动(javase项目可以省略)
mysql 6.0以后的版本,Driver存在在com.mysql.jdbc.cj.Driver文件内
3. 通过驱动管理器,获得jdbc连接对象
jdbc:mysql://地址:端口号/库名 , 用户名,密码;
为了避免乱码 也可加上编码
4.通过连接对象 创建SQL执行对象(SQL执行环境)
使用 Statement没办法解决SQL的注入问题
可用预编译解决
5.通过执行对象执行SQL语句
6.释放资源(切记)
整体如下
特别的
state.execute() 返回boolean类型 但不表示语句是否执行成功 而是代表是否执行查询语句;
查询成功与否 使用 state.executeupdate() 返回Int 类型,表示影响的行数
(如果零就是失败)
对于 查询语句![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/cc2941055b7d1955166b9fafe05e839e.png#pic_center)
re.next 和迭代器类似, 由 游标 指向下一个数据,如果下一行没有返回false
有返回true
get后加类型 如 getInt getDate 等,() 里面加获取的字段名
最后ResultSet 也需要释放
SQL 预编译——Preparedstatement
解决SQL的注入问题
把statement 中excute中的语句写在preparstatement里 并且where参数换成 ? 并在后面 通过 set+类型设置参数 参数前Int类型表示第几个?号的参数
和statement相比性能并不比后者高,但解决了注入问题
java中的事务
开始
java中SQL都是自动提交 使用事务需要把自动提交关闭
连接对象.setAutocommit(false);
回滚
如果发生异常或者其他导致失败 可以在finnally里回滚 (也可以不)
连接对象。rollback();
提交
连接对象。commit();
java事务和数据库类似 也会发生,脏读,不可重复读,幻读。
查看数据库当前的隔离级别:
select @@tx_isolation;
数据库设置隔离级别:
set global transaction isolation level 级别字符串;(一般不修改)
批处理
statement
对于statement
对于prepraedstatement
连接池(DataSource)
和线程池类似 需要数据连接时直接从连接池中获取空闲连接
DBCP连接池
1:引入jar文件
2:引入配置文件(properties文件)
没有密码就空着 写 “” 会登不进数据库 会把 “” 当成密码
格式如图 直接粘贴到src文件下
3. 从配置文件获得配置对象
先获取输入流 然后加载
4.通过连接池的工厂类(BasicDataSourceFactory)的创建连接池的方法(createDataSource())
5.从连接池中 获取连接对象
德鲁伊连接池
飘红不是异常 只是日志
数据连接池工具类
为了减少代码量 方便连接 提供一个数据连接池的工具类,使用连接时 只需要使用获取连接方法
以 Druid 连接池为例
然后直接使用这个工具类