Java基础-JDBC相关知识点
前言
Java基础篇JDBC,JDBC操作是比较常见的,但是因为我们想在一般都是用Spring+SpringMVC + Mybatis,和连接池C3p0(Spring一般是这个)。存的JDBC操作在工作中是很少见的。但是我们了解下下。不能只知道黄焖排骨好吃,但是不知道猪长啥样吧。
比较简单
1. JDBC概述
JDBC API是Java与数据库交互的接口
接口是由各类数据厂商实现的,(这篇博客用的是MySQL数据库)。JDBC定义了接口。Connecion,Statement,ResultSet都是接口。具体的实现得看数据库厂商的。就是那个jar包。
说到Jar包,估计想在一般都是用idea,Maven工具,都是自动管理jar包,我们在pom.xml写点配置,人家自然帮我搞定。许多人估计都不知道不同maven该怎么做。不知道耶没关系,因为这并不是什么特殊或者说非常重要的小操作。需要的时候再去做就好了。我这里给个链接,用的其实很少IDEA导入JDBC驱动的jar包。这个是我看到的一篇博客,总结的挺不错的。包括下载jar包,如何导入
1.1 JDBC操作步骤
- 导入MySQL驱动包 ---->IDEA导入JDBC驱动的jar包。
- 注册驱动程序(现在驱动程序会自动注册) ~
~ 这一步其实可以省略,在Java核心技术卷二看到的,鲜为人知。小tipsClass.forName("com.mysql.cj.jdbc.Driver");
- 获取与数据库的连接
Connection connection = DriverManager.getConnection(url,username,password);
- 编辑SQL语句
- 执行SQL语句,(以及获取SQL结果)
resultSet = statement.executeQuery(sql);
- 关闭连接
resultSet.close(); statement.close(); connection.close();;
1.2 JDBC操作示例
package com.java.basic.jdbc;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.*;
import java.util.Properties;
//连接数据库
public class MyMySQLConnect {
//原来是用的直接给链接的型,后面又练习了下读取配置表的方式
/*private final static String MySQL_USERNAME = "root";
private final static String MySQL_PASSWORD = "[email protected]";
private final static String MySQL_URL = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
*/
public Connection getConnection() throws IOException, SQLException {
//读取配置表方式获取链接
Properties jdbc_properties = new Properties();
try(InputStream in = Files.newInputStream(Paths.get("D:\\workproject\\MyNote\\sources\\MySQL.properties"))) {
jdbc_properties.load(in);
}
String url = jdbc_properties.getProperty("jdbc.url");
String username = jdbc_properties.getProperty("jdbc.username");
String password = jdbc_properties.getProperty("jdbc.password");
return DriverManager.getConnection(url,username,password);
}
public static void main(String[] args) throws SQLException, IOException {
MyMySQLConnect myMySQLConnect = new MyMySQLConnect();
Connection connection = myMySQLConnect.getConnection();;
Statement statement = null;
ResultSet resultSet = null;
try {
//我在Java核心技术卷二里看到说JDBC文件会自动注册,然后我试了下,把下面这一行删除掉,程序还是可以运行的
//作者说自动注册是个鲜为人知的特性
//Class.forName("com.mysql.cj.jdbc.Driver");
//connection = DriverManager.getConnection(MySQL_URL,MySQL_USERNAME,MySQL_PASSWORD);
String sql = "select * from user";
statement = connection.createStatement();
//execute()没有返回值
//statement.execute("INSERT into USER(username,mobilenum,remarks)VALUES('李四','18871719999','第二次插入数据');");
//executeQuery增删改查都可以用,但是查询只能用这个,因为就这个有返回值 ResultSet型的
resultSet = statement.executeQuery(sql);
while (resultSet.next()){
System.out.println(resultSet.getInt("id"));
System.out.println(resultSet.getString("username"));
System.out.println(resultSet.getString("mobilenum"));
System.out.println(resultSet.getString("remarks"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
resultSet.close();
statement.close();
connection.close();;
}
}
}
2. 主要使用对象
JDBC操作的主要就是下面三个接口对应的对象。接口是用数据库厂商实现的,Java只提供了接口。可以看看源码包java.sql下面。主要就这三个。用IEDA 的【ctrl+鼠标左键 】需要选择对象,就可以直接跳到源码了,很方便。我下面的东西也是吧源码扣出来一部分
2.1 Connection对象
原文:
A connection (session) with a specific database. SQL statements are executed and results are returned within the context of a connection.
意思就是说:与特定数据库的连接(会话)。执行SQL语句并在连接的上下文中返回结果。
是一个一个数据库连接。主要用来连接数据库,以及提交会话
常用方法:
**close()**关闭连接
**createStatement()**返回Statement对象
**prepareStatement(String)**返回prepareStatement对象
还有一些和事务相关的方法,下面事务会写
2.2 Statement对象
原文:
The object used for executing a static SQL statement and returning the results it produces.
意思是:用于执行静态语句的对象,以及返回一个ResultSet结果集
就是一个用来执行语句的对象
常用方法:
void close() 关闭该对象
ResultSet executeQuery(String sql) 执行语句 增删改查都可以,但是查询只能用这个,因子只有它有返回值
int executeUpdate(String sql) 增删改
下面连个方法得配合着用,上面一个执行的语句,下面方法查看结果(得是一个statement)
boolean execute(String sql)
ResultSet getResultSet()
用于批处理方法
void addBatch( String sql ) 可以添加多个语句
int[] executeBatch() 多个语句一起执行
void clearBatch() 情况批处理语句
2.3 ResultSet对象
原文:
A table of data representing a database result set, which is usually generated by executing a statement that queries the database.
意思是:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
用来存储结果集的,但是一般我们只关注查询语句的结果,其他语句其实也没啥结果给我们看。
3. 事务和数据库连接池
其实就是利用Connection对象的方法
commit()提交事务
rollback()回滚事务
setSavepoint()事务的保存点
setAutoCommit(boolean autoCommit)设置事务是否自动提交
事务隔离级别 看另外一篇------》基础篇-MySQL简介 (Java面试,MySQL高频知识点:事务特点ACID,事务隔离级别,存储引擎,数据库锁)
数据库连接池可以参照线程池理解,我不是很想写这个
一般有DBCP和C3P0两种,后者用的普遍些
4. 小结
JDBC内容其实比较简单,但是很多人以为自己不知道,因为用的都是SSM框架,已经封装的比较好。但是我们肯定都用过,不然怎么CRUD
其实没什么内容
后续想到什么东西在补充把
总目录:Java进阶之路-目录
水不在深,有龙则灵
《陋室铭》
博主:五更依旧朝花落
首次发布时间:2020年4月16日23:29:23
末次更新时间: