目录
JDBC: Java DataBase Connective
Java连接数据库的规范 - 接口
java.sql -> JDBC 规范相关的接口,类
实现类: 各个数据库厂商来提供
Connection - 数据库的连接
1.Connection - 连接
a.引入jar包
mysql-connector-java-5.1.8-bin.jar(推荐数据库版本: 5.5 5.7 5.x )
mysql-connector-java-8.0.16.jar(推荐数据库版本: 8.x)
b.加载驱动 - 类
Class.forName(“驱动类名”);
连接mysql与oracle sql的驱动类名不同:
1.oracle: oracle.jdbc.driver.OracleDriver
2.mysql: com.mysql.jdbc.Driver
c.获得连接
DriverManager.getConnection(url, username, password);
url: jdbc:mysql://ip:port/database ?serverTimezone=GMT
注: jdbc连接的url中配置的时区有问题可将?serverTimezone=GMT加到上述位置
username: 数据库账号
password: 数据库密码
Connection conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/db_day01",
"root", "123456");
d.获得执行SQL语句的Statement对象
e.执行SQL, 获得结果 boolean int ResultSet
f.释放资源
连接案例:
package com.zzxx.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCDemo01 {
public static void main(String[] args) {
// 1.导入jar包
/* 2.加载驱动
可能产生异常: ClassNotFoundException
原因: 1.没有导入jar包
2.类名写错
*/
try {
Class.forName("com.mysql.cj.jdbc.Driver");
// 3.获得连接对象 DriverManager
/* DriverManager 提供了一个静态方法 getConnection
参数1: 连接数据库的url地址
jdbc:mysql://ip:port/dataBase
参数2: 连接数据库的账号
参数3: 连接数据库的密码
可能产生异常: SQLException
1.dataBase 指定错误
2.账号/密码错误
3.端口错误 -> Connection refused
4.ip错误 -> Network is unreachable
5.jdbc:mysql 错误 -> No suitable driver
结论: 连接数据库url需要匹配合适的驱动类
*/
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_day01", "root", "root");
// 4.获得操作数据库的Statement对象 - 执行sql语句
Statement stmt = conn.createStatement();
// 5.执行sql语句 DDL DML DQL
String sql = "create table u (id int primary key, name varchar(20))";
stmt.execute(sql);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
Statement 中执行sql语句的方法有三个(execute)
boolean execute(String sql)
DDL DML: 返回false DQL: 返回true
因为DML 和 DQL有专门的执行方法, 所以该方法通常用来执行DDL
返回值: 有没有结果
int executeUpdate(String sql)
只能执行 DML
返回值: 影响了几行
ResultSet executeQuery(String sql)
只能执行 DQL
返回值: 查询出来的结果集
package com.zzxx.jdbc;
import org.junit.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCDemo02 {
@Test
public void testDDL() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_day01", "root", "root");
Statement stmt = conn.createStatement();
// 5.执行sql语句 DDL DML DQL
/* Statement 中执行sql语句的方法有三个
boolean execute(String sql)
DDL DML: 返回false DQL: 返回true
因为DML 和 DQL有专门的执行方法, 所以该方法通常用来执行DDL
返回值: 有没有结果
int executeUpdate(String sql)
只能执行 DML
返回值: 影响了几行
ResultSet executeQuery(String sql)
只能执行 DQL
返回值: 查询出来的结果集
*/
// 执行DDL
String sql = "create table u1 (id int primary key, name varchar(20))";
boolean b = stmt.execute(sql); // false
System.out.println(b);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
@Test
public void testDML() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_day01", "root", "root");
Statement stmt = conn.createStatement();
// 5.执行sql语句 DDL DML DQL
// 执行DML
String sql = "insert into u values(1, 'lucy')";
boolean b = stmt.execute(sql); // false
System.out.println(b);
} catch (ClassNotFoundException e) {
e.printStackTrace()