Java(九)数据库JDBC:1.JDBC的基本使用


一、JDBC

1.简介

JDBC(Java Database Connectivity) 是API,JVM使用JDBC驱动程序将通用JDBC调用转换为特定于供应商的数据库调用,数据库访问和所有数据库供应商的访问方式一样。

2.JDBC Architecture

在这里插入图片描述

3.四种Java驱动程序

在这里插入图片描述

  • 类型1:JDBC-ODBC桥驱动程序
    将JDBC调用转换为访问DBMS协议的ODBC调用。ODBC驱动程序必须安装在客户端计算机上。
  • 类型2:本机协议部分Java驱动程序
    将JDBC调用转换为本机DBMS协议中的调用。由于此转换在客户端进行,因此必须在客户端计算机上安装一些二进制代码。
  • 类型3:一种网络协议全Java驱动程序
    将JDBC调用转换为独立于任何本地DBMS协议的net协议。然后,在服务器上运行的中间件软件将网络协议转换为本机DBMS协议。
  • 类型4:本机协议所有Java驱动程序
    将JDBC调用转换为本机DBMS协议。此转换在服务器端进行。

二、导入mysql的jar包驱动

1.DBMS

2.jar包位置

mysql安装在D盘,但这个jar包在C盘下的MySQL/Connector J 8.0
在这里插入图片描述
将这个jar包导入项目中:https://blog.csdn.net/be_your1/article/details/88111462

三、JDBC编程

1.步骤

①加载数据库驱动程序
②获得连接
③创建和执行语句(SQL查询)
④从表中获取结果集(表)
⑤浏览结果集
⑥Exception处理和关闭连接

2.加载数据库驱动程序

/**
 * String driver:数据库驱动的类名
 */
Class.forName(driver);

比如mysql的:

// MySQL 8.0 以下版本
String JDBC_DRIVER_8DOWN = "com.mysql.jdbc.Driver";
// MySQL 8.0 以上版本
String JDBC_DRIVER_8UP = "com.mysql.cj.jdbc.Driver";
Class.forName(JDBC_DRIVER_8UP);

3.获得连接

/**
 * String url:数据库的Url链接
 * String user:用户名
 * String password:密码
 */
Connection con = DriverManager.getConnection(url, user, password);

比如mysql的:

// MySQL 8.0 以下版本
String DB_URL_8DOWN = "jdbc:mysql://localhost:3306/tablename";
// MySQL 8.0 以上版本
// MySQL 8.0 以上版本不需要建立 SSL 连接的,需要显示关闭。[但true好像也没有报错]
String DB_URL_8UP = "jdbc:mysql://localhost:3306/tablename?useSSL=false&serverTimezone=UTC&&allowPublicKeyRetrieval=true";

String user = "root";

String password = "1234";

Connection con = DriverManager.getConnection(DB_URL_8UP, user, password);

4.创建和执行语句

(1)方法1:Statement语句类型

  1. 先创建语句
Statement stmt= con.createStatement();
  1. 执行语句
  • 查询select语句,返回一个结果集
String sql = "SELECT * FROM authors";
ResultSet rs = stmt.executeQuery(sql);
  • 返回执行标志(失败0,成功1)的语句(insert,delete,update)
String sql = "DALETE FROM authors";
int flag = stmt.executeUpdata(sql);

(2)方法2:PreparedStatement语句类型

  1. 填充PreparedStatement语句中的参数
// ?表示待填充的参数
String sql = "select * from	customer where account = ? and password = ?";
PreparedStatement pstmt = con.prepareStatement(sql);
// 第几个参数,下标从1开始
pstmt.setInt(1, user.getAcccount());
pstmt.setString(2, user.getPassword());
  1. 执行语句
  • 查询select语句,返回一个结果集
ResultSet rs = pstmt.executeQuery();
  • 返回执行标志(失败0,成功1)的语句(insert,delete,update)
int flag = pstmt.executeUpdata();

【易错点】:

  • 注意executeQuery()executeUpdata()内是没有参数的
  • ?号不能被单引号包围。
    如报错Parameter index out of range (1 > number of parameters, which is 0).是因为"INSERT INTO `pimtodo` (`id`, `text`) VALUES ('?', '?')"语句,此时?会被作为参数传入,而setString里面的值不会再传入。
  • sql语句中没有?号,此时无需传值。传值就会出错。
    select * from pimtodo;
  • 中英文问号:?
    中文问号无法识别。

5.从表中获取结果集(表)

ResultSet rs = statement.executeQuery (sql);
ResultSet rs = pstmt.executeQuery();

6.浏览结果集

/**
 * 使用目的:用next()看看有没有找到
 * next()作用:将光标从当前位置移动到下一行。
 * next()机制:结果集光标最初位于第一行之前;
 * 对方法next的第一次调用使第一行成为当前行;
 * 第二次调用使第二行成为当前行,依此类推。
 */
while(rs.next()) {
	// 方法1:输入列名,大小写不敏感
	int id = rs.getInt("id");
	// 方法2:输入第几列,下标从1开始
	String name = rs.getString(2);
}

rs.next()查询时,还得保持连接(constatementpstmtrs只要有用到过,此时就不能关闭),在查询ResultSet完后关闭才不会报错
Java(九)数据库JDBC:2.Operation not allowed after ResultSet closed结果集关闭异常

7.Exception处理和关闭连接

constatementpstmtrs都需要异常处理和关闭,在有关数据库操作结束后关闭。

try{

}catch(Exception e){
	e.printStackTrace();
}finally{
	if(con!=null) {
		con.close();
	}
	if(statement!=null) {
		statement.close();
	}
	if(pstmt!=null) {
		pstmt.close();
	}
	if(rs!=null) {
		rs.close();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值