目录
概述JDBC
目标: 使用java 代码操作数据库
不同数据库提供的原生 api,差异较大. 学习使用成本作用: jdbc 统一了各种数据库的 api. 使用 jdbc 这一套 api 就能操作各种数据库
配置:
1)从中央仓库下载 mysql 的 jdbc 驱动包 (jar)
1)创建数据源 DataSource,填写 url, username, password
2)建立连接.
3)构造 sql 语句.
4)执行 sql 语句
5)释放资源. 先申请的资源,后释放.
如何下载驱动包
1. mvnrepository.com中央仓库中搜索MySQL Connector java(老版)(MySQL Connector为新版 建议使用老板)
2.下载与mysql驱动包相同的系列 我使用的是5系列
3. 下载
(.jar是java中常见的后缀类型 将java程序打包发给别人)
如何使用jar包
1把jar复制到当前项目的目录中
2把这个目录标记成库
编写代码(使用)
第一步中先向上转型 再向下转型 是为了让MysqlDataSource这个类名不要扩散到代码其他地方 后续要修改数据库为其他数据库 代码改动小(mysql和程序耦合低)
jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false
① ② ③ ④ ⑤ ⑥
①url是干啥用的?
给jdbc操作mysql使用的
②IP地址,描述网络上一个主机所在位置
127.0.0.1是一个特殊的ip,叫做“环回ip”(当jdbc程序和mysql服务器在同一主机上)
③端口号
④数据库名称(“?”问号后面表示访问资源时,需要哪些具体参数)(“&"表示并且)
⑤字符编码集(不写utf8mb4)
⑥是否要加密 建议不加密 加密需要安装证书
第二步注意
第三步Prepared
先解析检査 sql,看看 sql 是不是有啥问题~~解析完毕之后,也会得到结构化数据,直接把解析好的结构化数据发给数据库服务器,服务器就省下了这部分解析的工作。
需要抛出异常
第四步返回值为影响的行数
第五步释放资源
程序通过代码和服务器进行通信,是需要消耗一定的硬件/软件资源在程序结束的时候, 就需要告知服务器,释放这些资源/客户端也需要释放资源.
修改和删除,代码写法和插入是非常类似的~~ 只要调整 sql 内容即可!!
用户输入学号、姓名进行插入
这种写法不安全 可能导致注入攻击 如输入name );drop database xxxx;
正确方式:
数据库查询
// 1. 创建 DataSource
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("2222");
// 2. 建立连接
Connection connection = dataSource.getConnection();
// 3. 构造 sql
String sql = "select * from student where id = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, 100);
// 4. 执行 sql (和前面不同了)
// ResultSet 就表示查询的结果集合 (临时表). 此处就需要针对表进行遍历.
ResultSet resultSet = statement.executeQuery();
// 5. 遍历结果集合.
// 通过 next 方法就可以获取到临时表中的每一行数据. 如果获取到最后一行之后, 再执行 next 返回 false, 循环结束.
while (resultSet.next()) {
// 针对这一行进行处理了.
// 取出列的数据.
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("id = " + id + ", name = " + name);
}
// 6. 释放资源
resultSet.close();
statement.close();
connection.close();