一、JDBC驱动教程
1. 下载JDBC jar 包
1.下载8,0的jar包可以支持之前的 5.6, 5.7, 8.0 mydql版本,请对应你自己的版本
2.下载链接如下
https://dev.mysql.com/downloads/connector/j/
3.选这个
4.下载zip
2. 配置教程
1,解压并复制 jar包
2.idea软件你的项目和src同级的目录新建 lib目录
3.将jar包复制粘贴到lib目录,(注意这里是jar包不是整个zip文件)
4.右键添加到Library
ok,
**没有报错提示,恭喜你配置成功! **
二、第一个JDBC程序
1.建表:
(这个只是例子,你也可以用你自己的表)
1.数据库
CREATE DATABASE `bmft_blog` DEFAULT CHARACTER SET utf8 ;
2.表
USE `bmft_blog`
CREATE TABLE `user` (
`id` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT COMMENT 'user,id主键',
`user_name` varchar(30) NOT NULL COMMENT 'user_name 用户名,唯一',
`password` varchar(30) NOT NULL COMMENT 'password 密码',
`introduction` varchar(100) DEFAULT '什么介绍也没有哦' COMMENT '简介',
`phone_number` varchar(11) DEFAULT NULL COMMENT '绑定手机号',
`mailbox` varchar(30) DEFAULT NULL COMMENT '绑定邮箱',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
3.数据:
insert into `user`(`id`,`user_name`,`password`,`introduction`,`phone_number`,`mailbox`) values (0000000001,'张三','111111','法外狂徒','0315313',''),(0000000002,'电瓶','111111','打工是不可能打工的',NULL,NULL),(0000000003,'王二','111111','隔壁来了新的邻居',NULL,NULL);
4.效果:
2. 步骤分析
* 我的第一个JDBC程序.
* 1.加载JDBC驱动
* 2.填(新建)连接的信息,URL,账号,密码
* 3.连接数据库,获取数据库Connection对象,
* (1)DriverManager.getConnection(url,user,password);
* 4.通过Connection数据库对象,创建createStatement(),statement执行对象.
* 5.使用执行对象执行SQL语句,获得ResultSet,Set数据集合
* 6.使用数据集合取出getObject(columnLabel 列名)想要的数据并打印
* 7.关闭资源,先开后关。result -- statement -- connection.
3. 实现代码:(具体看注释)
import java.sql.*;
/**
* 我的第一个JDBC程序.
* 1.加载JDBC驱动
* 2.填(新建)连接的信息,URL,账号,密码
* 3.连接数据库,获取数据库Connection对象,
* (1)DriverManager.getConnection(url,user,password);
* 4.通过Connection数据库对象,创建createStatement(),statement执行对象.
* 5.使用执行对象执行SQL语句,获得ResultSet,Set数据集合
* 6.使用数据集合取出getObject(columnLabel 列名)想要的数据并打印
* 7.关闭资源,先开后关。result -- statement -- connection.
*
*/
public class Demo {
public static void main(String[] args) {
//声明定义分离
Connection connection = null;
Statement statement = null;
ResultSet resultset = null;
try {
//1.固定写法,加载驱动
Class.forName("MYSQL.myFirstJdbcDemo.Demo");
//2.填(新建)连接的信息,URL,账号,密码
//(1)ulr
String url = "jdbc:mysql://localhost:3306/" +//(1.1)连接地址,
"bmft_blog" + //(1.2)连接的数据库
"?useUnicode=true&" + //(1.3)附加条件:支持中编码
"characterEncoding=utf8&"+ // (1.4)附加信息:设置utf-8 字符集
"useSSL=true&"+ //(1.5)附加信息3:SSL安全连接
"serverTimezone=UTC"; //解决报错You must configure either the server or JDBC driver
//(2)账号
String user = "root";
//(3)密码
String password = "123456";
//3. 连接数据库并获取Connection对象
connection = DriverManager.getConnection(url, user, password);
//4.通过Connection对象获得SQL执行对象statement
statement = connection.createStatement();
//5.通过执行对象执行SQL语句获得,ResultSet 结果集
//SQL dialect is not configured.没有配置SQL语言是什么鬼,还警告。
resultset = statement.executeQuery("select * from `user`");
//6.使用resultSet结果集获并打印结果.resultSet 是一个链表,
while (resultset.next()){
System.out.print("账号="+resultset.getObject("id")+" , ");
System.out.print("名字="+resultset.getObject("user_name")+" , ");
System.out.print("密码="+resultset.getObject("password")+" , ");
System.out.print("介绍="+resultset.getObject("introduction")+" , ");
System.out.print("手机号"+resultset.getObject("phone_number")+" , ");
System.out.print("邮箱"+resultset.getObject("mailbox")+" , ");
System.out.println();
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}finally {
//一次关闭资源,先开后关,ResultSet -- statement -- connection
if (resultset != null){
try {
resultset.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement != null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
Run:
账号=1 , 名字=张三 , 密码=111111 , 介绍=法外狂徒 , 手机号0315313 , 邮箱 ,
账号=2 , 名字=电瓶 , 密码=111111 , 介绍=打工是不可能打工的 , 手机号null , 邮箱null ,
账号=3 , 名字=王二 , 密码=111111 , 介绍=隔壁来了新的邻居 , 手机号null , 邮箱null ,
Process finished with exit code 0
三、7个驱动步骤的详细解析
1.为什么要用加载类的方式(Class.forName)加载JDBC驱动 ?
Class.forName("MYSQL.myFirstJdbcDemo.Demo");
1.首先我们源码分析,原来的正规的加载驱动的办法.
DriverManager.registerDriver(new MYSQL.myFirstJdbcDemo.Demo());
(1)registerDriver()方法
这是,DriverManager类下的静态方法,静态方法,会在类加载的时候就,自动执行。
(2)在看方法中的执行的registerDriver(driver, null);方法
2.所以,如果您使用原方法加载驱动,方法就会执行2次,类加载的时候和,在main方法中调用的时候,
而,使用Class.forName()直接加载驱动,只用加载一次。
2url的组成是什么?
url = “协议://主机地址:端口号/数据库名称?参数1&参数2…&参数n”;
String url = "jdbc:mysql://localhost:3306/" +//(1.1)连接地址,
"bmft_blog" + //(1.2)连接的数据库
"?useUnicode=true&" + //(1.3)附加条件:支持中编码
"characterEncoding=utf8&"+ // (1.4)附加信息:设置utf-8 字符集
"useSSL=true&"+ //(1.5)附加信息3:SSL安全连接
"serverTimezone=UTC"; //解决报错You must configure either the server or JDBC driver
了解更多:Oracle数据库的URL格式,Oracle没有数据库,只有 表,一个表就是一个数据库,默认端口1521
jdbc:oracle:thin:@localhost:1521:sid
3. Connection 对象的功能?
总结就是
- 1.数据库层级的一些操作,比如(已经连接)断开数据库
- 2.设置数据库事务的提交和回滚比如:
connection.setautoCommit(false);
connection.rollback();
connection.commit();
- 3.解决异常读取的问题
- 4.构造一些奇怪的接口(这个有用?)
- 5.创建statement执行SQL的对象,用来执行增删改查SQL
2.数据库层面解决读取异常的一些字段
3.
4.statement SQL执行对象的功能?
顾名思义就是用来执行SQL语句的
1.概述
2.statement常用方法
方法 | 结果 |
resultSet executeQuery() | 执行查询,返回resultSet结果集 |
int executeUpdate() | 执行增删改,返回一个受影响的行数 1 row is … |
boolean exucute() | 如果第一个结果是ResultSet对象,则返回true;如果第一个结果是执行语句后更新的行数或者没有结果,则返回false。 |
5. ResultSet对象的功能?
resultSet对象就是一个结果集对象。
1.综述
2.resultSet常用方法
具体和更多查看,jdk文档。这个只是方便记忆和列举些常用的。
(1)滚动结果集的方法
方法 | 描述 |
previous() | 向前滚动 |
next() | 向后滚动 |
int getRow() | 获取行号 |
absolute() | 滚动到指定行号 |
relative() | 相对移动多少行, |
first() | 移动到第一行 |
last() | 移动… |
beforeFirst() | 移动到 -1 行 |
afterLast() | n + 1 行 |
moveToInsertRow() | 移动到插入行 |
moveToCurrentRow()移回到调用行
(2)测试光标的位置
方法 | 描述 |
isFirst() | 是否第一行 |
isLast() | |
isBeforeFirst() |
isAfterLast()
(3) 更新结果集,和底层数据库的数据(新增**,只有单表可用)**
insertRow()|插入行,到ResulteSet 和 数据库
deleteRow()|删除行,到…
updateRow|改行数据…具体
(具体的字段使用查看,文档或者源码!这里只做介绍!)
6. ResultSet 的 getObject方法
知道具体的字段的类型就用具体的字段的类型,不知道就可以使用Object接受。
7.关闭资源:先开后关即可,特别是connection资源特别浪费内存.