Java IDEA 进行数据库的连接 (MYSQL)实现数据库交互 及其配置 (基于Mac M1)
文章目录
1 使用 Navicat 进行数据库以及表的创建,下面是本测试中使用的建的数据库和表的情况:
2 进行连接的源代码,进行简单的查询
package DatabaseConnect;
import java.sql.*; //导包
public class JDBC {
public static void main(String[] args) throws SQLException {
try {
// 1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
System.out.println("加载驱动成功!");
// 2.连接数据库 获得连接对象 conn 是连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/data", "root", "111111");
System.out.println("数据库连接成功!");
// 3.创建执行环境
Statement statement = conn.createStatement();
// 4.创建了查询语句 进行语句的执行 得到结果
ResultSet result = statement.executeQuery("select * from info");
// 将查询到的东西进行展示
while (result.next()) {
System.out.println(result.getInt("id"));
System.out.println(result.getString("uname"));
System.out.println(result.getString("upass"));
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
System.out.println("加载驱动失败!");
System.out.println("数据库连接失败!");
}
}
}
3 对于上述代码中出现的部分方法进行简单的整理
连接数据的步骤(别忘了复制jar包)
(1)注册驱动: Class.forName():DriverManager
(2)获得链接对象:Connection (JVM 和 数据库的进程通道打开,结束需要关闭)
(3)创建sql执行环境:Statement(就是执行 SQL 语句的对象)
(4)执行sql语句:
(5)查询操作:遍历结果集:ResultSet
(6)关闭资源:(进程通信,一定要关闭)
(1) Class.forName()
Class.forName()中传入的参数就是类的全限定名,JVM通过该全限定名首先检查该类是否已经被加载,若该类没有被加载则加载该类 ;并返回该类相关的Class对象。
说白了就是对于类的加载,在此处就是所谓的驱动的加载;
(2) 什么是数据库驱动程序?为什么加载驱动?
什么是?
在Java里边也就是一些类.它们在一些特别的包里.它们负责与数据库建立连接,把一些SQL传到数据库里边去.不同的数据库由不同的类来实现,也就产生的不同的"数据库驱动程序包"。
为什么?
加载了驱动也就是建立起来了Java与数据库的联系,可以在Java中书写 SQL 语句,从而对于数据库中的数据进行操作,得到自己需要的数据,并切进行相关的处理操作
(3)Connection类
Connection 用于与数据库“对话”,并由特定提供程序的类(如 SqlConnection)表示
1 、有四种:SqlConnection,OleDbConnection,OdbcConnection和OracleConnection;
2、SqlConnection类的对象连接SQL Server数据库;OracleConnection 类的对象连接Oracle数据库;
3、OleDbConnection类的对象连接支持OLE DB的数据库,如Access;而OdbcConnection类的对象连接任何支持ODBC的数据库。与数据库的所有通讯最终都是通过Connection对象来完成的
(4)Java DriverManager.getConnection()
Java DriverManager.getConnection()
方法用于获得试图建立到指定数据库 URL 的连接;DriverManager
试图从已注册的 JDBC 驱动程序集中选择一个适当的驱动程序。
(5)Statement
建立了到特定数据库的连接之后,就可用该连接发送 SQL 语句,在发送SQL语句的时候,得有一个执行环境,用连接的 conn 对象创建出来执行环境,
Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute,使用哪一个方法由 SQL 语句所产生的内容决定。
- 方法executeQuery
用于产生单个结果集(ResultSet)的语句,例如:被执行最多的SELECT 语句。
这个方法被用来执行 SELECT 语句,但也只能执行查询语句,执行后返回代表查询结果的ResultSet对象。 - 方法executeUpdate
用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。
INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。 - 方法execute:
可用于执行任何SQL语句,返回一个boolean值,表明执行该SQL语句是否返回了ResultSet。
如果执行后第一个结果是ResultSet,则返回true,否则返回false。
(6)ResultSet
封装了结果集的对象:内部有一个可移动的光标,默认情况,指向第一条记录集的上一条记录:
-
next();光标下移动一次:返回的boolean的值;判断是否有结果可以被遍历:
boolean 返回一个真假值,真的话就可以进行下面的输出操作,本文使用了 while 循环操作; -
previous();光标上移动一次:
-
last()移动到最后一行:
-
afterLast();移动到最后一行之后:
-
beforeFirst()移动到第一行的之前:
-
first()
4 将上述的代码封装成为一个工具类
思考:在封装的时候,如果像前面的代码所示,每当数据库发生变化的时候,都需要修改源代码,这是不合适的,也是不方便的,所以将数据库的 url , username , password 单独写成相关的配置文件,使用文件流的形式进行读取即可,用户修改相关的配置文件即可:
4.1 具体的封装的配置文件如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/数据库名字
username=root
password=test
# 此处的键值对中间的 = 不能出现空格;
# 每一句配置的后面都不能加封号
# 配置文件的后缀为:properties,我使用的是 db.properties;
工具类的代码如下所示,本质上与上文的连接数据库操作一样,只是将用户名,密码等配置文件单独出来,方便后期的维护;
代码如下所示:
package DatabaseConnect;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
/**
* @author LuoBin
* @version 1.0
* @date 2021/7/9 10:43 上午
*/
// Utild 表示的是JDBC 的一个工具类
/*
command + shift + t 进行测试类的创建 单击类:JDBCUtils 选中进行操作
*/
public class JDBCUtils {
private static String driver;
private static String url;
private static String username;
private static String password;
// 静态语句块
// 将配置文件中的 driver 进行这里的传输 用流的形式进行读取
static {
// 将文件用流的形式进行读取进来 (核心目的)
// JDBCUtils.class 获得对象
// getClassLoader() 类加载器
// getResourceAsStream("db.properties") 加载源文件放到输入流中
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("db.properties");
// 读取进来进行解析 创建 Property 对象
// 使用对象对于数据流进行操作
Properties properties = new Properties();
// 加载流文件
try {
properties.load(is);
// 加载进了文件之后,读取到相关的值:键值 driver 解析出来
driver = properties.getProperty("driver");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
Class.forName(driver);
System.out.println("驱动加载成功!");
} catch (Exception e) {
e.printStackTrace();
System.out.println("加载流文件失败!");
}
}
// 获得连接对象的方法
public static Connection getConnection(){
try {
System.out.println("数据库连接成功!");
return DriverManager.getConnection(url,username,password);
} catch (SQLException throwables) {
System.out.println("数据库连接失败!");
throwables.printStackTrace();
}
// 保证了连接不成功也有返回值,不然的话只有运行成功才有返回值是不正确的,编译会报错
return null;
}
}
5 小笔记,敲代码过程中
5.1 键值
关于键值,Java 语言的配置文件,数据库的名字,位置,用户名,密码等的配置
1、Properties 类位于 java.util.Properties ,是Java 语言的配置文件所使用的类;
2、Xxx.properties 为Java 语言常见的配置文件,如数据库的配置 jdbc.properties;
3、系统参数配置 system.properties
4、这里,讲解一下Properties 类的具体使用。
以key=value 的 键值对的形式进行存储值 key值不能重复
举例如下:(左边是键。右边是值)
(键值对相当于函数中的映射,键和值进行一一对应,唯一的对应)
username=root
password=9842213764
5.2 idea 中的 target 文件夹的作用
这个是intellij IDEA默认的编译路径,就是存放class或者包文件的地方,是IDE自动生成的
5.3 Utility 表示创建出来的实用工具
所以在开发的时候命名时后面为Utils
5.4 JDBC
全称为Java DataBase Connectivity standard, 它是一个面向对象的应用程序接口(API), 通过它可访问各类关系数据库。JDBC也是java核心类库的一部分
6 附录 本测试的文件组织形式
本测试的目录形式如下:
注:db.properties 的放置位置
数据库的驱动程序放在 lib 中,具体的驱动包参考其他博客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!