一.JDBC开发流程
- 加载并注册JDBC驱动
- 创建数据库连接
- 创建Statement对象
- 遍历查询结果
- 关闭连接,释放资源
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class StandardJDBCSample {
public static void main(String[] args) {
Connection conn = null;
try {
// 1. 加载并注册JDBC驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 创建数据库连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/imooc?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai", "root", "zsj123");
// 3. 创建Statement对象
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from employee where dname='研发部'");
// 4. 遍历查询结果
while (rs.next()) {
Integer eno = rs.getInt(1);
String ename = rs.getString("ename");
float salary = rs.getFloat("salary");
String dname = rs.getString("dname");
System.out.println(dname + "-" + eno + "-" + ename + "-" + salary);
}
}catch (Exception e){
e.printStackTrace();
}finally {
try {
if (conn != null && conn.isClosed() == false) {
// 5. 关闭连接,释放资源
conn.close();
}
}catch (Exception ex){
ex.printStackTrace();
}
}
}
}
运行结果:
研发部-3308-张三-6000.0
研发部-3420-李四-8700.0
1.使用JDBC第一步:注冊驱动有三种方式:
- Class.forName(“com.mysql.jdbc.Driver”);
推荐这样的方式,不会对详细的驱动类产生依赖 - DriverManager.registerDriver(com.mysql.jdbc.Driver);
会对详细的驱动类产生依赖 - System.setProperty(“jdbc.drivers”, “driver1:driver2”);
尽管不会对详细的驱动类产生依赖;但注冊不太方便。所以非常少使用
2.使用JDBC第二步:建立连接
通过Connection建立连接,Connection是一个接口类。其功能是与数据库进行连接(会话)。
建立Connection接口类对象:
Connection conn = DriverManager.getConnection(url, user, password);
当中URL的格式要求为:
JDBC:子协议:子名称//主机名:port/数据库名?属性名=属性值&…
如:"jdbc:mysql://localhost:3306/test“
3.使用JDBC第三步:创建运行对象
运行对象Statement负责运行SQL语句。由Connection对象产生。
Statement接口类还派生出两个接口类PreparedStatement和CallableStatement,这两个接口类对象为我们提供了更加强大的数据访问功能。
创建Statement的语法为:
Statement st = conn.createStatement();
4.使用JDBC第四步:运行SQL语句
运行对象Statement提供两个经常使用的方法来运行SQL语句。
- executeQuery(Stringsql),该方法用于运行实现查询功能的sql语句。返回类型为ResultSet(结果集)。
如:ResultSet rs =st.executeQuery(sql); - executeUpdate(Stringsql),该方法用于运行实现增、删、改功能的sql语句,返回类型为int,即受影响的行数。
如:int flag = st.executeUpdate(sql);
5.使用JDBC第五步:处理运行结果
ResultSet对象
ResultSet对象负责保存Statement运行后所产生的查询结果。
结果集ResultSet是通过游标来操作的。
游标:就是一个可控制的、能够指向随意一条记录的指针。
有了这个指针我们就能轻易地指出我们要对结果集中的哪一条记录进行改动、删除,或者要在哪一条记录之前插入数据。一个结果集对象中仅仅包括一个游标。
6.使用JDBC 第六步——释放资源
Connection对象的close方法用于关闭连接,并释放和连接相关的资源。
二.JDBC驱动的秘密
1.如何获取JDBC驱动Jar
在百度中输入mysql driver
下载链接
将下载好的包放到lib包内:
2.创建数据库连接代码
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 connection = DriverManager.getConnection(dbURL, dbUsername, dbPassword);
3.Class.forName的作用
- Class.forName用于加载指定的JDBC驱动类
- Class.forName本质是通知JDBC注册这个驱动类
- 驱动由数据库厂商自行开发,连接字符串也不同
4.数据库与连接字符串
5.DriverManager 设备管理器
- DriverManager用于注册/管理JDBC驱动程序
- DriverManager.getConnection(连接字符串,用户名,密码)
- 返回值Connection对象,对应数据库的物理网络连接
6.Connection对象
- Connection对象用于JDBC与数据库的网络通信对象
- java.sql.Connection是一个接口,具体由驱动厂商实现
- 所有数据库的操作都建立在Connection基础上
7.MySQL连接字符串
- 格式: jdbc:mysql://[主机ip][:端口]/数据库名?参数列表
- 主机ip与端口是可选设置,默认值为127.0.0.1与3306
- 参数列表采用url编码,格式:参数1=值1&参数2=值2&…
8.MySQL连接字符串常用参数
Statement:使用从此接口创建的对象将SQL语句提交到数据库。除了执行存储过程之外,一些派生接口还接受参数。
ResultSet:在使用Statement对象执行SQL查询后,这些对象保存从数据库检索的数据。它作为一
个迭代器,允许我们移动其数据。
9.连接数据库的常见问题
- ClassNotFoundException - 类未找到异常
原因:有可能这个jar包驱动没有加入到工程中
- Connection refuse - 数据库连接被拒绝异常
原因:ID环境或端口号配置没有配置好,远程连接连不上,服务器的防火墙把3306端口给屏蔽了,必须在防火墙上将3306端口放行。
- Access denied for user - 用户名与密码错误异常
原因:密码或用户名没写对