JDBC学习记录
以此记录自己的学习历程
2024年7月9日09:12:49
JDBC全称:Java DataBase ConnectivityJDBC学习的是使用Java语言来操作关系型数据库的一套API。
这一套标准接口使得同一套Java代码,操作不同的关系型数据库
一、JDBC简单了解
JDBC实际上就是一套定义的操作所有关系型数据库的接口。各数据库厂商去实现这套接口,提供的数据库驱动jar包其实本质就是实现类,这也是我们实际执行的代码。这正是所谓的面向接口编程。
二、JDBC快速入门
1.创建工程,导入驱动jar包并注册驱动
首先点击新建项目。
新建一个空项目,便于我们后面选择使用的JDK版本和语言级别。
点击右上角小齿轮->项目结构。
项目设置->项目->SDK,SDK选择Java1.8版本;
语言级别选择对应的8版本,点击左下角的**“应用”**。
接着我们切换到项目设置->模块(Modules),点击"+"号,新建一个模块,起名为jdbc-demo,点击**“确定”**。
接下来我们需要导入驱动jar包,在项目新建一个文件夹../jdbc-demo/lib
,用于存放驱动jar包。
可以去MVN Repository网站下载所需要的jar包(Maven Repository: mysql » mysql-connector-java (mvnrepository.com)),在搜索框输入MySQL-Connecter-Java,下载所需要的版本,这里下载的是5.1.48版本。
接着需要让工程能够识别这个jar包,右键点击这个jar包,点击**“添加为库*(Add as Library)*”**。跳出下面的界面。我们选择模块库即可,即在这个模块生效。
接下来我们开始编写代码,首先新建一个Java类。
前面是包名,后面是类名。创建完成之后在JDBCDemo中编写代码注册驱动。(用到的快捷操作:Ctrl+shift+/
注释代码块、输入psvm按回车自动补全变成主方法、Alt+Enter
选择抛出异常选项,这里选择添加异常到方法签名、Ctrl + D
:这个快捷键用于复制当前行并粘贴到下一行。)遇到异常,抛出就可以了,可以是程序最起码跑起来。
注册驱动这里的com.mysql.jdbc.Driver是固定的。不过在MySQL 5之后是会自动注册的。
2. 获取连接
用到了DriverManager
类的静态方法getConnection
.
可以看到有三个参数,顺便提一嘴,URL是统一资源定位符。
DriverManager.getConnection(url,username,password)
会报错提示需要先创建对应的局部变量,并且getConnection还有一个返回值。均还是使用Alt+Enter补全即可。
完整代码如下:
//2.获取连接
String url="jdbc:mysql://localhost:3306/db";
String username="root";
String password="Aa@123456789";
Connection conn = DriverManager.getConnection(url, username, password);
3. 定义SQL语句
//3.定义sql
String sql = "select * from houselist";
4. 获取执行SQL对象
//4.获取执行sql的对象 Statement
Statement stmt = conn.createStatement();
接下来调用连接对象的方法来创建一个Statement
类对象。
5.执行SQL
一开始的语句会发生SQLException报错,有两个问题:
SSL 连接警告: 警告信息建议显式设置 useSSL=false
,以避免没有服务器身份验证的 SSL 连接。(因为MySQL是默认要求SSL连接的)
执行 SELECT 语句的错误: executeUpdate
方法不能用于执行 SELECT
语句,应该使用 executeQuery
方法。
至于为什么采用ResultSet
,因为 ResultSet
是用于处理 SELECT
查询返回的结果集。SELECT
查询会返回一组记录,而 ResultSet
提供了一种机制来遍历这些记录并访问每一列的数据。别忘了在开头import块那里加上语句import java.sql.ResultSet;
如果是Update操作,使用int没有问题。
//5.执行sql
//int count =stmt.executeUpdate(sql); //返回值是受影响的行数
ResultSet rs = stmt.executeQuery(sql);
6. 处理执行结果
根据需求自定义。
//6.处理结果
//System.out.println(count);
while (rs.next()) {
int id = rs.getInt("houseid");
String address = rs.getString("address");
System.out.println("ID: " + id + ", Address: " + address);
}
7.释放资源
由于栈的特性,先开的Connection需要后关闭。
//7.释放资源
stmt.close();
conn.close();
测试程序,能够正常输出结果。