目录
JDBC的导入
JDBC:通过jAVA 操作数据库
数据库的驱动:java.sql.Driver 接口,所有驱动程序包都需要实现的接口
如何加载驱动类?(前提:导入jar包才能加载类)
利用反射:Class.forName("com.mysql.jdbc.Driver")
导入外部依赖
需要引入MySQL的驱动(指的是MySQL的jar包)
import org.junit.Test;
//导入jar包就是引入外部资源
@Test
public void test01(){
}
1.数据的持久化
将数据永久的保存起来,主要的方式还是储存在硬盘上。
持久化的实现过程大部分是通过数据库来完成的。
2.URL地址
连接地址有关的jdbc协议:就叫jdbc
形式为:
jdbc:mysql://主机名称:端口号/数据库名
例:jdbc:mysql://127.0.0.13306/jsoft?useUnicode=true&characterEncoding=utf8
8.0版本mysql还需要传参useSSL=false&serverTimezone=UTC(指定时差,否则差8小时)
oracle的协议形式:
jdbc:oracle:thin:@主机名称:oracle端口:数据库名
sqlServer的协议形式:少用,微软旗下 (微软旗下还有C#:类似java)
jdbc:sqlserver://127.0.0.1:端口号:DatabaseName=xxxx
3.用户名root
4.密码root
JDBC是死代码,连什么mysql都是这个代码,只是数据库名、账号、密码可能不同。
@Test
public void test01() throws ClassNotFoundException,
NoSuchMethodException,
InvocationTargetException,
InstantiationException,
IllegalAccessException,
SQLException {
// 数据库的url
String url = "jdbc:mysql://127.0.0.1:3306/jsoft?useUnicode=true&characterEncoding=utf8" +
"&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true";
String username = "root";
String password = "root";
// 驱动的全类名
String driverName = "com.mysql.cj.jdbc.Driver";
// 1.加载驱动类
Class clazz = Class.forName(driverName);
// 2.实例化Driver对象
Driver driver = (Driver) clazz.getDeclaredConstructor().newInstance();
// 3.注册驱动
DriverManager.registerDriver(driver);
// 4.获取连接
Connection connection = DriverManager.getConnection(url, username, password);
System.out.println(connection);
System.out.println(Objects.nonNull(connection) ? "数据库连接成功" : "数据库连接失败");
}
}
重点:四要素
// 数据库的url
String url = "jdbc:mysql://127.0.0.1:3306/jsoft?useUnicode=true&characterEncoding=utf8" +
"&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true";
//账号
String username = "root";
//密码
String password = "root";
// 驱动的全类名
String driverName = "com.mysql.cj.jdbc.Driver";
执行数据库的DML语句---也就是增删改
Java有三个接口,分别定义了对数据库调用的不同方式
1.Statement:用来执行静态sql语句,并返回它所生成的结果对象
2.PreparedStatement:预编译,可以使用此对象多次高效的执行该语句
(重点学习前两个)
3.CallableStatement:用来执行sql存储过程
开发中可能要进行多次连接和关闭资源,可封装成一个类:
//连接
public static Connection getConnection(){
Properties properties = new Properties();
Connection connection = null;
try {
properties.load(Ch01.class.getClassLoader().getResourceAsStream("jdbc.properties"));
String url = properties.getProperty("mysql.url");
String driverName = properties.getProperty("mysql.driverName");
String username = properties.getProperty("mysql.username");
String password = properties.getProperty("mysql.password");
Class.forName(driverName);
connection = DriverManager.getConnection(url, username, password);
System.out.println(connection);
System.out.println(Objects.nonNull(connection) ? "数据库连接成功" : "数据库连接失败");
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return connection;
}
//关闭资源
public static void close(Connection c, Statement s){
if (Objects.nonNull(s)){
try {
s.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (Objects.nonNull(c)){
try {
c.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
增加/修改表中数据:
@Test
public void test01(){
// 1.获取连接
Connection conn = null;
Statement stmt = null;
try {
conn = JDBCUtil.getConnection();
stmt = conn.createStatement();
// 2.执行sql语句
String sql = "INSERT INTO ee (cname) VALUES ('Jay')";
// 修改
sql = "UPDATE ee SET cname = 'JJ' where id = 7";
sql = "select * from ee";
// 返回值是执行sql语句影响的行数
int i = stmt.executeUpdate(sql);
// 3.处理执行sql的返回值
System.out.println(i);
System.out.println("操作成功...");
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
JDBCUtil.close(conn,stmt);
}
}
查询表中数据:
@Test
public void test01() {
// 1.获取连接
Connection conn = JDBCUtil.getConnection();
Statement stmt = null;
ResultSet rs = null;
try {
// 2.获取可以执行sql语句的stmt对象
stmt = conn.createStatement();
// 3.定义sql
String sql = "select `id`,`cname` from ee where id = 7";
// 4.执行查询的sql,会得到一个ResultSet
// ResultSet就是封装了查询结果的一个对象
rs = stmt.executeQuery(sql);
// 5.遍历结果集ResultSet
while(rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("cname");
System.out.println("id:" + id + ",name:" + name);
}
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
// 6.关闭资源
JDBCUtil.close(conn,stmt,rs);
}
}
课后:对表中数据的增删改查也可封装成类。