JDBC入门笔记(个人笔记)

快速了解JDBC

什么是JDBC

Java数据库连接 JAVA DateBase Connectivity

JDBC可以让Java通过程序操作关系型数据库

JDBC基于驱动程序实现与数据库的连接与操作

JDBC驱动程序(是一个标准,由数据库厂商进行实现)

Java程序

JDBC API JDBC API             JDBC API

mysql驱动程序 oracle驱动程序 其他驱动程序

mysql oracle 其他

JDBC优点

统一的API,提供一致的开发过程

易于学习,容易上手,代码结构稳定

功能强大,执行效率高,可处理海量数据

快速上手JDBC

JDBC开发流程

imooc-jdbc中的StandardJDBCSample工程

  1. 加载并注册JDBC驱动  jar包下载 Class.forName(“com.mysql.cj.jdbc.Driver)
  2. 创建数据库连接
  3. 创建Statement对象
  4. 遍历查询结果
  5. 关闭连接,释放资源

精讲JDBC开发细节

JDBC驱动的秘密

如何获取JDBC驱动Jar

在各个开发商的官网上下载  一般都是 .. driver  ..驱动

创建数据库连接代码

String dbDriver = “com.mysql.cj.jdbc.Driver”;  //JDBC驱动类

String dbURL = “jdbc:mysql://localhost:3306/imooc”;  //连接字符串

String dbUsername = “root”; //数据库用户名

String dbPassword = “123456”; // 数据库密码

//1.加载并初始化JDBC驱动

Class.forName(dbDriver);

//2.创建数据库连接

Connection cnn = DriverManager.getConnection(dbURL, dbUsername,dbPassword);

Class.forName的作用

Class.forName 用于加载指定的JDBC驱动类

Class.forName 本质是通知JDBC注册这个驱动类

驱动由数据库厂商自行开发,连接字符串也不同

数据库与连接字符串

数据库

JDBC驱动类

连接字符串

MySQL 5

com.mysql.jdbc.Driver

jdbc:mysql://主机ip:端口号/数据库名

MySQL 8

com.mysql.cj.jdbc.Driver

jdbc:mysql://主机ip:端口号/数据库名

Oracle

oracle.jdbc.driver.OracleDriver

jdbc:oracle:thin:@主机ip:端口号:数据库名

SQL Server

com.mircosoft.sqlserver.jdbc.SQLServerDriver

jdbc:mircosoft:sqlserver:主机ip:端口;databasename=数据库名

DriverManager

DriverManager用于注册/管理JDBC驱动程序

DriverManager.getConnection(连接字符串,用户名,密码)

返回值是Connection对象,对应数据库的物理网络连接

Connection对象

Connection对象用于JDBC与数据库的网络通信对象

java.sql.Connection是一个接口,具体由驱动厂商实现

所有数据库的操作都建立在Connection基础上

MySQL连接字符串

格式: jdbc:mysql://主机ip:端口号/数据库名称?参数列表

主机ip与端口号是可选设置,默认值为127.0.0.1与3306

参数列表采用url编码,格式:参数1=值1&参数2=值2&...

MySQL连接字符串常用参数

参数名

建议参数值

说明

useSSL

true(生产)

false(开发)

是否禁用ssl

useUnicode

true

启用Unicode编码传输数据

characterEncoding

UTF-8

使用UTF-8编码传输数据

serverTimezone

Asia/Shanghai

使用东8时区时间,UTC+8

allowPublicKeyRetrieval

true

允许从客户端获取公钥加密传输

实现按部门筛选员工数据

imooc-jdbc中的 command包 和HumanResourceApplication类

预防注入攻击

SQL注入攻击

会让数据库数据泄露, 写的sql语句加上单引号加上一个永远可以成立的条件,提取出所有数据

SQL注入攻击本质是未对原始SQL中的敏感字符做特殊处理

解决方法:放弃Statement改用PreparedStatement处理SQL

PreparedStatement

PreparedStatement 预编译Statement是Statement的子接口

PreparedStatement 对SQL进行参数化,预防SQL注入攻击

PreparedStatement比Statement执行效率更高

PreparedStatement pstm = conn.prepareStatement(sql)

pstm.setString(1,dname);

错误使用方式

select * from employee where ?= ‘abc’  问号应该在=后面才对

select * from employee where salary = ? + 100  sql参数不允许被二次计算 在等号后面只有一个? 在传参过程中 加100

select ? from employee where ename = ? 只能在值得地方写? 在字段名的地方不能加?

JDBC实现写数据

JDBC执行INSERT语句

String sql = “insert into employee(eno, ename) value(?,?)”;

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setInt(1,10);

ostmt.setString(2,”张三”);

int cnt= pstmt.executeUpdate();

System.out.println(“数据新增成功”);

JDBC执行UPDATE语句

String sql = “update employee set salary = salary+1000 where dname = ?”;

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setString(1,”研发部”);

int cnt = pstmt.executeUpdate();

System.out.println(“研发部”+cnt+”员工提薪1000元”);

JDBC执行DELECT语句

String sql = “delete from employee where eno = ?”;

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setInt(1,3395);

int cnt = pstmt.executeUpdate();

System.out.println(cnt+”名员工数据已被删除”);

JDBC中的事务管理

什么是事务

事务是以一种可靠的、一致的方式,访问和操作数据库的程序单元

要么把事情做完,要么什么都不做,不能做一半

事务依赖于数据库实现,MySQL通过事务作为数据缓冲地带

JDBC两种事务模式

JDBC允许两种事务模式

自动提交事务模式

手动提交事务模式

自动提交事务模式

自动提交事务模式是指每执行一次写操作SQL,自动提交事务

自动提交开启方法: conn.setAutoCommit(true)

自动事务是JDBC默认行为,此模式无法保证多数据一致性

手动提交事务模式

手动提交模式是指显示调用commit()与rollback()方法管理事务

手动提交开启方法:conn.setAutoCommit(false)

手动提交事务可保证多数据一致性,但必须手动调用提交/回滚方法

案例: 实现批量增加员工

imooc-jdbc中的TransactionSample类

基于实体类实现分页数据封装

imooc-jdbc中的PaginationCommand类

JDBC中Date日期对象的处理

imooc-jdbc中的insert和Query类

重点是java.util.Date转换为java.sql.Date

从String 转换为java.util.Date:

SampleDateFormat sdf = new SampleDateFormat(“yyyy-MM-dd”);

java.util.Date date = sdf.parse(String hiredate);

java.util.Date转换为java.sql.Date

long time = date.getTime();

java.sql.Date date1 = new java.sql.Date(time);

JDBC数据批处理

imooc-jdbc中的BatchSample类

  1. sql语句在for循环以外
  2. for循环内的最后加上个pstmt.addBatch();
  3. for循环完了 在外面加上个 pstmt.executeBatch();

连接池与JDBC进阶使用

现实中的概念

把原料放在开发附近,到时候利用比较高效,就相当于物资仓库。

阿里巴巴Druid连接池

Druid是阿里巴巴开源连接池组件,是最好的连接池之一。

Druid对数据库连接进行有效管理与重用,最大化程序执行效率。

连接池负责创建管理连接,程序只负责从连接池中取用,归还。

Druid连接池配置与使用

  1. 需要增加Druid.jar包
  2. 创建druid-config.properties文件, 在文件中设置driverClassName、url、username、password
  3. 加载属性文件

Properties properties = new Properties();

String propertiesFile = 当前类.class.getResource(“/文件名”);

propertiesFile = new URLDecoder().decode(propertiesFile,”UTF-8”);

properties.load(new FileInputStream(propertiesFile));

  1. 获取DataSource 数据源对象

DataSource datasource = DruidDataSourceFactory.createDataSource(properties);

  1. 创建数据库连接

conn = datasource.getConnection();

  1. 关闭数据库

C3P0连接池

imooc-jdbc中的C3P0Sample类与c3p0-config.xml文件

Apache Commons DBUtils

commons-dbutils 是Apache提供的开源JDBC工具类库

它是对JDBC的简单封装,学习成本极低

使用commons-dbutils可以极大简化JDBC编码工作量

QueryRunner qr = new QueryRunner(dataSource);
List<Employee> list = (List<Employee>) qr.query("select * from employee limit ?,10",
        new BeanListHandler(Employee.class),
        new Object[]{10});

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JDBC,即Java数据库连接,是Java语言操作数据库的标准API。从入门到熟练使用JDBC,需要掌握以下几个方面的功能。 1. 数据库连接:通过JDBC可以与各种数据库建立连接,如MySQLOracleSQL Server等。首先要了解数据库的连接URL、用户名和密码等信息,然后使用`DriverManager`类的`getConnection()`方法建立与数据库的连接。 2. SQL语句执行:使用JDBC可以执行SQL语句对数据库进行增、删、改、查等操作。通过`Connection`接口的`createStatement()`方法创建执行SQL语句的`Statement`对象,然后使用该对象的`executeUpdate()`方法执行更新语句,或者使用`executeQuery()`方法执行查询语句,获取结果集。 3. 事务控制:在一些复杂的业务场景,需要保证事务的一致性和完整性。JDBC通过`Connection`接口的`setAutoCommit()`方法设置是否自动提交事务,`commit()`方法提交事务,`rollback()`方法回滚事务。 4. 预编译SQL语句:预编译SQL语句可以提高SQL执行效率,减少数据库的负担。使用`PreparedStatement`接口可以先预编译SQL语句,然后再执行多次绑定不同参数值的操作。 5. 批处理操作:当需要执行一批相同类型的SQL语句时,使用批处理可以提高执行效率。通过`Statement`或`PreparedStatement`的`addBatch()`方法添加批处理操作,再使用`executeBatch()`方法执行批处理。 6. 结果集处理:JDBC通过`ResultSet`接口表示查询的结果集,可以通过该接口的方法获取结果集的数据,如使用`next()`方法遍历结果集的每一行,使用`getInt()`、`getString()`等方法获取具体的字段值。 7. 连接池管理:在高并发访问数据库的情况下,使用连接池可以减少连接创建的开销和资源的消耗。通过一些开源的连接池框架,如C3P0、Druid等,可以配置连接池的属性,提供可复用的数据库连接。 总结起来,JDBC入门到熟练使用,需要理解数据库连接、SQL语句执行、事务控制、预编译SQL语句、批处理操作、结果集处理和连接池管理等功能,并能熟练运用API进行操作。不断实践和积累经验,才能掌握JDBC的使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值