MySQL(七)JDBC编程
一、驱动包
1.性质
1.1底层差异性
应用程序 都是用代码写出来的,不同的应用程序,其设计时的编程模范 会不同,所以 为编程语言 代码操作使用层 设计给的驱动包里 类与接口的范式 也就会随着 对应上底层程序的代码 而不同
1.2JDBC接口统一性
在数据库应用程序里,Java规定了 必须以Java设计的 数据库编程接口JDBC 来操作使用数据库,所以各数据库厂商 就多设计了 底层接口 等效形式转化成 JDBC接口的 驱动程序,使得Java 用JDBC统一了 所有数据库的API接口
2.导入
任何应用程序的 编程层操作使用,都需要将 应用程序设计好的 实现使用功能的 类与接口 通过驱动包导入 进编程项目中 作为第三方库使用
2.1复制导包
将驱动包 复制导入 要作为第三方库的 目录里
所有的.java文件 加载成 许多.class文件,所有的.class文件 整理打包好 到一个.jar压缩包文件 进行程序发布的
2.2标记作库
将驱动包所处的目录 标记成 第三方库
二、JDBC编程
1.寻找资源
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setUrl(String_URL);
mysql数据源 通过URL网址 找到mysql服务器 所在网络上的 具体资源位置
1.1URL
"jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false"
1.1.1网址作用
jdbc:mysql 表明该网址 是用来给 jdbc程序操作mysql 使用的
1.1.2主机IP
127.0.0.1 是jdbc要操作的 mysql服务器的 所处主机的 网络IP地址,当jdbc应用程序 本身所处的主机 就同是mysql服务器所处的 同台主机时,使用127.0.0.1环回IP 指向应用程序自己所处的主机 即就指向了 mysql服务器主机的位置
1.1.3端口号
一台主机上 有许多的应用程序 都要操作网络,3306 是mysql与网络对接的 端口号
1.1.4数据库名
确定jdbc 要操作mysql服务器里的 哪个数据库
1.1.5访问资源参数
以 键对应填值 的形式填写参数,键值对之间 用&分隔
characterEncoding=utf8 — 以utf8字符集 进行数据库与应用程序的 数据传输
useSSL=false — 数据库与应用程序之间的网络通信 中间是否要加密
2.访问认证
2.1身份
((MysqlDataSource)dataSource).setUser(String_Ident);
mysql数据源 确定jdbc 访问数据库的身份,root 是mysql默认自带有的用户(管理员)
2.2密码
((MysqlDataSource)dataSource).setPassword(String_Passworld);
mysql数据源 确定jdbc 访问数据库的密码
3.连接通道
dataSource.getConnection();
—> return Connection
数据源 寻找并成功访问上之后,数据源 向jdbc 建立连接通道,后续在通道中进行 请求-响应 的交互
4.数据传输
4.1创建传输包
connection.prepareStatement(String_sql);
—> return PreparedStatement
在连接通道中 创建传输包,将要发送的 sql语句字符串 存储在传输包中,传输包 会进行sql语句的 预处理解析、检查 并把解析的结构化数据打包,在应用程序这边 完成解析检查这部分的工作,减少了mysql服务器的 开销负担
4.1.1创建sql
4.1.1.1+拼接变量
String sql = "insert into student values("+id+",' "+name+" ')";
变量 可直接+拼接进sql语句字符串,但这样会使得 可以通过在sql语句中 对变量输入非法内容 实现对数据库的攻击,不安全
4.1.1.2?替换变量
String sql = "insert into student values(?,?)"; connection.prepareStatement(sql);
preparedStatement.setDatatype(下标,变量);
使用占位符? 先替入 后规范换 的方式 可将变量安全替换进 sql字符串中,占位符的下标是从1开始的
4.2发送传输包
4.2.1发送写sql
preparedStatement.executeUpdate();
—> return int
传输包 以写的形式 将自己发送到数据库服务器 执行,返回数据库中 影响到的行数
4.2.2发送读sql
preparedStatement.executeQuery();
—> return ResultSet
传输包 以读的形式 将自己发送到数据库服务器 执行,返回 查询结果临时表的 结果集合
4.2.2.1遍历记录
while (resultSet.next()) { }
resultSet.next();
—> return boolean
从临时表的 第0个记录开始,往后 保存光标位置遍历 取得一个记录,遍历到表尾空时 返回false
4.2.2.2读取记录
result.getDatatype("col_name");
—> return Datatype
获取 遍历所处记录的 指定字段数据
5.回收资源
按 后获取到的资源先释放 的顺序 回收资源
5.1销毁结果集合
resultSet.close();
5.2销毁传输包
preparedStatement.close();
5.3销毁通道
connection.close();