目录
方法三:使用DriverManager实现数据库的连接。体会获取连接必要的4个基本要素。
方法五:(final版):将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接
-
创建工程,导入驱动jar包
我的idea是8.0.30版本,所以驱动包也是对应版本
-
注册驱动
Class.forName("com.mysql.jdbc.Driver");
-
获取连接
Connection conn = DriverManager.getConnection(url, username, password);
Java代码需要发送SQL给MySQL服务端,就需要先建立连接
-
定义SQL语句
String sql = “update…” ;
-
获取执行SQL对象
执行SQL语句需要SQL执行对象,而这个执行对象就是Statement对象
Statement stmt = conn.createStatement();
-
执行SQL
stmt.executeUpdate(sql);
-
处理返回结果
-
释放资源
配置
### 具体操作
* 创建新的新的项目
* 定义项目的名称,并指定位置
* 对项目进行设置,JDK版本、编译版本
选中项目→右键→打开模块设置(F4)
* 创建模块,指定模块的名称及位置
* 导入驱动包
将mysql的驱动包放在模块下的lib目录(随意命名)下,并将该jar包添加为库文件
复制驱动包mysql-connector-java-8.0.30.jar到刚刚创建的lib里
选中启动,右键→添加为库
* 在添加为库文件的时候,有如下三个选项(生效范围)
* Global Library : 全局有效
* Project Library : 项目有效
* Module Library : 模块有效(选中这个)
获取连接
* 在src下创建类
* 编写代码如下
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
/**
* @author 乱码酱
* @date :2022-09-20 10:02
* @program: JDBC
* @create:JDBC快速入门
*/
public class JDBCdemo {
public static void main(String[] args) throws Exception {
//1. 注册驱动
// Class.forName("com.mysql.jdbc.Driver");
//2. 获取连接
String url = "jdbc:mysql://127.0.0.1:3306/db1";
String username = "root";
String password = "1234";
Connection conn = DriverManager.getConnection(url, username, password);
//3. 定义sql
String sql = "update account set pasword = 111 where id = 1";
//4. 获取执行sql的对象 Statement
Statement stmt = conn.createStatement();
//5. 执行sql
int count = stmt.executeUpdate(sql);//受影响的行数
//6. 处理结果
System.out.println(count);
//7. 释放资源
stmt.close();
conn.close();
}
}
不出意外的话应该是出了意外
报错:
Exception in thread "main"java.sql.sQLException:Access denied for user 'root '@ localhost’ (using password: YES) 线程“main”中的异常java.sql.sQLException:拒绝用户‘root’@localhost‘的访问(使用密码:YES)
新版本类名前要加“cj.”,加上还是报错
换了个方法一:出现第三方库API
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
加载类com.mysql.jdbc.Driver。‘com.mysql.cj.jdbc.Driver’这个驱动程序是通过SPL自动注册的,手动加载驱动程序类通常是不必要的。
//解决方法
把com.mysql.jdbc.Driver 改为com.mysql.cj.jdbc.Driver 即可
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
数据库抛出一个异常: 用户使用密码访问数据库时遭到拒绝
-
密码错误,重设数据库密码再登录
-
数据库并没有给你分配足够的权限
仔细一想我的mysql密码终于想起来了,登录上了
完整代码:
public class ConnectionTest {
@Test
public void testConnection1()throws SQLException {
try {
//1.提供java.sql.Driver接口实现类的对象
Driver driver = new com.mysql.cj.jdbc.Driver();
//2.提供url,指明具体操作的数据
String url = "jdbc:mysql://localhost:3306/jdbc";
//jdbc :mysql:协议
//localhost :ip地址
//3306:默认mysql的端口号
//jdbc:jdbc数据库
//3.提供Properties的对象,指明用户名和密码
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "123321");
//4.调用driver的connect(),获取连接
Connection conn = driver.connect(url, info);
System.out.println(conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
说明:上述代码中显式出现了第三方数据库的API
方法二:反射实例化Driver
// 方法二:反射实例化Driver
@Test
public void testConnection2() throws Exception {
// 一开始是 ClassNotFoundException,去掉前缀,使其范围扩大
try {
//1.使用反射获取Driver实现类对象
Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();
// 2.提供要连接的数据库
String url = "jdbc:mysql://localhost:3306/jdbc";
//3.提供Properties的对象,指明用户名和密码
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "123321");
//4.调用driver的connect(),获取连接
Connection conn = driver.connect(url, info);
System.out.println(conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
方法三:使用DriverManager实现数据库的连接。体会获取连接必要的4个基本要素。
// 方法三:使用DriverManager实现数据库的连接。体会获取连接必要的4个基本要素。
@Test
public void testConnection3() throws Exception {
// 一开始是 ClassNotFoundException,去掉前缀,使其范围扩大
try {
//1.使用反射获取Driver实现类对象
Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();
// 2.提供另外三个连接的基本信息
String url = "jdbc:mysql://localhost:3306/jdbc";
String user = "root";
String password = "123321";
//3.注册驱动
DriverManager.registerDriver(driver);
// 4.获取连接
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
方法四:可以只是加载驱动,不用显示的注册驱动过了
说明:不必显式的注册驱动了。因为在DriverManager的源码中已经存在静态代码块,实现了驱动的注册。
// 方法四:可以只是加载驱动,不用显示的注册驱动过了
@Test
public void testConnection4() throws Exception {
// 一开始是 ClassNotFoundException,去掉前缀,使其范围扩大
// 1.提供数据库连接的4个基本要素
String url = "jdbc:mysql://localhost:3306/jdbc";
String user = "root";
String password = "123321";
String driverName = "com.mysql.cj.jdbc.Driver";
//2.加载Driver实现类对象
Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
// 相较于方法三,可以省略如下操作:
// Driver driver = (Driver) clazz.newInstance();
// //3.注册驱动
// DriverManager.registerDriver(driver);
/*
可以注释掉上述代码的原因,是因为在mysql的Driver类中声明有:
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
*/
// 4.获取连接
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
方法五:(final版):将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接
*此种方式的好处?
*1.实现了数据与代码的分离。实现了解耦
*2.如果需要修改配置文件信息,可以避免程序重新打包
其中,配置文件声明在工程的src目录下:【jdbc.properties】
src右键→新建→文件jdbc.properties
#提供数据库连接的4个基本要素
url = jdbc:mysql://localhost:3306/jdbc
user = root
password = 123321
driverClass = com.mysql.cj.jdbc.Driver
//方式五(final版):将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接
/*此种方式的好处?
*1.实现了数据与代码的分离。实现了解耦
*2.如果需要修改配置文件信息,可以避免程序重新打包。*/
@Test
public void testConnection5() throws Exception {
InputStream is = JDBCdemo.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties();
pros.load(is);
//2.读取配置信息
String user = pros.getProperty("user");
String password = pros.getProperty("password");
String url = pros.getProperty("url");
String driverClass = pros.getProperty("driverClass");
//3.加载驱动
Class.forName(driverClass);
//4.获取连接
Connection conn = DriverManager.getConnection(url,user,password);
System.out.println(conn);
}
说明:使用配置文件的方式保存配置信息,在代码中加载配置文件
**使用配置文件的好处:**
①实现了代码和数据的分离,如果需要修改配置信息,直接在配置文件中修改,不需要深入代码
②如果修改了配置信息,省去重新编译的过程。
最终结果: