day09
JDBC概述
JDBC(Java DataBase Connectivity,java动态数据库连接技术)是一种用于执行SQL语句的Java API。
API : application Interface 程序的接口 一套几口可以有N套实现类(Mysql Oracle SqlServer)
JDBC是Java访问数据库的标准规范,可以为不同的关系型数据库提供统一访问,它由一组用Java语言编写的接口和类组成。
JDBC需要连接驱动,驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。
今天我们使用的是mysql的驱动mysql-connector-java-5.1.6
JDBC与数据库驱动的关系:接口与实现的关系。
JDBC操作数据库 的步骤:
- 加载驱动(通过反射了加载驱动)
- 获取连接对象 Connection
- 得到编译sql的对象
- 执行sql
- 返回结果集
- 关闭资源
Statement
Preparestatement
lib:
目录主要是存放 jar包
JDBC 的相关的类与接口:
Driver: 这个数据库厂商提供的驱动类 (数据库的基本信息)
DriverManager :驱动管理类: 用于获取连接 需要传递三个参数
Connection :得到数据库连接对象,才能对数据库进行 增加 删除 修改 查询等等
Statement 给数据库发送sql 的对象
PreparedStatement 也是发送sql 的对象 是Statement 对象的子类
ResultSet 返回的结果集对象
index.html?uname=‘张三’& upwd=‘122333’
注意点:所有的jar包都是导入的sql包
- Class.forName(“com.mysql.jdbc.Driver”); 通过反射来加载驱动 灵活度更高
- 获取连接对象 url 地址jdbc:mysql://localhost:3306/student?characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false 用户名 与密码
-
jdbc+表示主协议:也就是使用jdbc来进行连接的 mysql:表示子协议:也就是连接的数据库是mysql数据库 localhost:表示本机的地址 3306 数据库的端口号 student 表示连接的库名 ? 后面都表示拼接的参数 characterEncoding=utf-8 设置编码格式 serverTimezone=GMT%2B8 设置时区 相差8个小时 useSSL=false 解决兼容性问题
如果是本地进行连接:jdbc:mysql:///数据库的库名
Statement: 给数据库发送sql 的对象 executeQuery() executeUpdate() 这两个方法来发送sql
ResultSet 就是一个结果集(迭代器)
next 类似于迭代器的hasnext()判断是否有下一个元素 获取值:第一种是更根据 列名来进行获取, rs.getInt(“GradeID”);
执行增加 删除 修改 num 是返回的影响的行数
int num = sta.executeUpdate(sql);
使用jdbc 实现增删改查操作:
使用传统方式的弊端:
1.需要拼接sql 语句(比较麻烦)
2.对sql语句没有基本的检查,不管sql语法是否正确都抛给数据库处理(效率就会慢)
3.sql语句会被入侵,会被更改
Statement ==> PreparedStatement 功能更加强大 (使用这个)
SQL注入:
PreparedStatement 使用这个类的注意点:
1.占位符跟你赋值的个数必须是一致(包括其类型)
2.赋值必须在 调用这个方法的前面进行操作executeUpdate()
JDBC封装:
1.不想修改java 代码来适应任何数据库
==>可以把这个固定的放入到配置文件 Properties :
驱动的包名,url,用户名,密码
Junit test 测试
作用:局部测试 其实就是写一个方法
对这个方法的要求:
1. 用 public void 进行修饰
2. 没有返回值
3. 没有参数
三个注解 @Test @Before @After