JDBC本质上是一个介于应用程序和数据库之间的公共接口,通过对这个接口的实现,我们可以建立应用程序和数据库之间的连接,便捷的访问数据库数据。
不同版本的MySQL连接的参数是有一些小差别的,以下内容基于一个JDBC连接案例讲解连接数据库的过程。
数据库版本:MySQL8.0.29
准备工作(导入MySQL驱动)
首先,得确保你的MySQL版本和你的MySQL驱动是对应的,不要出现装的MySQL5.几版本用的最新8.几驱动的情况。
如果不清楚自己当前安装的MySQL版本的话,可以进入命令行输入mysql --version查看:
知道自己数据库版本之后就可以去MySQL官网下载对应驱动了
MySQL驱动下载地址:MySQL :: Download MySQL Connector/J (Archived Versions)
下载完成后,找到文件,解压之后找到驱动的jar包
赋值当前路径,接下来打开IDEA-进入设置找到Project Structure
点击Libraries,按下面步骤,将刚解压完的驱动路径粘贴找到
选中之后,点击ok,导入驱动。
到这里准备工作就完成了。
案例演示
新建一个jdbc测试类,编写jdbc连接程序,提示异常直接抛出,注意导对包,
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//实现Driver接口
//Driver接口是所有 JDBC 驱动程序需要实现的接口
Driver driver = new Driver();//需要导包,可替换为new com.mysql.cj.jdbc.Driver();
//提供用户信息和url
String url = "jdbc:mysql://localhost:3306/db_demo?useSSL=false&serverTimezone=UTC";
String username = "root";
String password = "123456";
//注册驱动
DriverManager.registerDriver(driver);
//创建连接对象
Connection connection = DriverManager.getConnection(url, username, password);
//创建Statement对象,用于SQL语句
Statement statement = connection.createStatement();
//编写sql
String sql = "SELECT * FROM t_demo";
//接收sql执行结果
//由于此处sql为查询语句,有返回值,所以需要一个接收结果的对象
//当执行的sql为增、删、改操作时,是没有返回值的,也就不需要接收结果这一步
ResultSet resultSet = statement.executeQuery(sql);
//打印结果验证
while(resultSet.next()){
System.out.print("id="+resultSet.getObject("id")+" ");
System.out.print("stuname="+resultSet.getObject("stuname")+" ");
System.out.print("seat="+resultSet.getObject("seat")+" ");
System.out.println();
}
//释放连接
resultSet.close();
statement.close();
connection.close();
}
db_demo数据库表内容
程序执行结果
以上是一个基本的jdbc程序,各项连接属性值都是写死的,一般在使用过程中都是将连接属性放在配置文件内,通过读取配置文件来获取连接信息,方便后续修改连接信息。
可修改为:
public static void main() throws IOException, SQLException, ClassNotFoundException {
//创建问价输入流
InputStream is = jdbcTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
//将配置文件内容加载到properties集合
Properties pros = new Properties();
pros.load(is);
String url = pros.getProperty("url");
String username = pros.getProperty("user");
String password = pros.getProperty("password");
String driverClass = pros.getProperty("driverClass");
//加载mysql驱动,会自动注册DriverManager
Class.forName(driverClass);
//获取连接
Connection connection = DriverManager.getConnection(url, username, password);
//创建Statement连接对象 用于执行SQL
Statement statement = connection.createStatement();
//编写sql语句
String sql = "SELECT * FROM t_demo";
//执行SQL并接受返回结果
ResultSet resultSet = statement.executeQuery(sql);
//遍历输出
while(resultSet.next()){
System.out.println("id="+resultSet.getObject("id"));
System.out.println("stuname="+resultSet.getObject("stuname"));
System.out.println("seat="+resultSet.getObject("seat"));
}
//释放连接
resultSet.close();
statement.close();
connection.close();
}
}
获取文件输入流语句分析
InputStream is = jdbcTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
InputStream is = jdbcTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
jdbcTest.class:类名,jdbcTest 是一个示例类名,表示当前代码所在的类。通过 getClass() 方法获取到当前类的运行时类对象。
getClassLoader():是一个类加载器方法,通过运行时类对象的 getClassLoader() 方法获取到当前类的类加载器。
getResourceAsStream("jdbc.properties"):类加载器的方法,用于加载资源文件。
getResourceAsStream() 接受一个资源的路径参数(相对于类路径),返回一个输入流(InputStream)对象。
配置文件内容
#配置文件放在src下,不能放在功能分块儿中,部署的时候会丢失
user=root
password=123456
url=jdbc:mysql://localhost:3306/db_demo?useSSL=false&serverTimezone=UTC
driverClass=com.mysql.cj.jdbc.Driver
自动注册原理
通过查看Driver源码,可以发现在类加载的时候,就已经自动注册驱动了,所以我们在使用的使用,只需要加载一下即可。
over!