JDBC介绍
JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。
JDBC核心类(接口)介绍
DriverManager类
常用方法
- getConnection(String url , String user , String password) 指定3个入口参数,依次是连接数据库的URL、用户名、密码,来获取与数据库的连接。
- setLoginTimeout() 获取驱动程序试图登录到某一数据库时可以等待的最长时间,以秒为单位。
- println(String message) 将一条消息打印到当前JDBC日志流中。
Connection类
这个类就代表了经过DriverManager的管理驱动类以后返回出来的数据库接口,我们可以调用返回执行类来执行SQL语句。
常用方法
- close() 立即释放Connection实例占用的数据库和JDBC资源,即关闭数据库连接
- createStatement() 创建并返回一个Statement实例,通常在执行无参的SQL语句时创建该实例 。
- prepareStatement() 创建并返回一个PreparedStatement实例,通常在执行包含参数的SQL语句时创建该实例,并对SQL语句进行了预编译处理。
Statement类
这个类主要是来静态语句执行语句,但他确实实时的所以这个类和我们之后讲述的一个类有着不一样。
常用方法
- executeQuery(String sql) 执行指定的静态SELECT语句,并返回一个永远不能为null的ResultSet实例。
- executeUpdate(String sql) | 执行指定的静态INSERT、UPDATE或DELETE语句,并返回一个int型数值,为同步更新记录的条数 。
- close() 立即释放Statement实例占用的数据库和JDBC资源。
ParedStatement类
扩展了Statement类实现了动态实时执行Sql语句,可运行时提供参数。
常用方法
- executeQuery() 在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。
- execute() 在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT、UPDATE 或 DELETE 语句;或者是无返回内容的 SQL 语句,比如 DDL 语句。 返回值为int类型
- setString(int parameterIndex, String x) | 将指定参数设置为给定 Java String 值。
ResultSet类
现在我们已经知道如何去执行我们的语句,语句执行会带来而结果也有一个特殊的类,来暂时在内存中存放我们从数据库获取来的结果。
- next() 将指针向下移一行
- getInt() 以int形式获取此ResultSet对象的当前行中指定列值。如果列值为NULL,则返回值是0。
- getString() 以String形式获取ResultSet对象的当前行的指定列值。如列值是NULL,则返回null。
案例:
package com.java.demo;
import java.sql.*;
public class Demo1 {
public static void createTable() throws ClassNotFoundException, SQLException {
//1. 加载数据库驱动 (可以省略的. 在JavaEE的web项目中,jar包不可以省略.)
// mysql6以下驱动:com.mysql.jdbc.Driver
// mysql6和6以上驱动:com.mysql.cj.jdbc.Driver
// Class.forName("com.mysql.jdbc.Driver");
Class.forName("com.mysql.cj.jdbc.Driver");
//2. 通过驱动管理器, 获取JDBC的连接对象
// 连接地址格式:
// 主协议:子协议://ip地址:端口号/数据库名称
// mysql: jdbc:mysql://localhost:3306/xiangjie
// oracle: jdbc:oracle:thin:@ip地址:1521/ORCL
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xiangjie", "root", "");
//3. 通过连接对象,创建SQL执行对象 (SQL执行环境)
Statement state = conn.createStatement();
//4. 通过SQL执行对象 执行SQL
state.execute("create table person(id int,nickname varchar(32))");
//5. 释放连接
state.close();
conn.close();
}
public static void insertData() throws Exception {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xiangjie?useUnicode=true&characterEncoding=utf-8", "root", "");
Statement state = conn.createStatement();
state.execute("insert into person values(1,'张三')");
state.close();
conn.close();
}
public static void insertPerson() throws Exception {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xiangjie?useUnicode=true&characterEncoding=utf-8", "root", "");
Statement state = conn.createStatement();
int flag = state.executeUpdate("insert into person values(1,'张三'),(2,'李四'),(3,'王二麻子')");
state.close();
conn.close();
System.out.println("返回:"+flag);
}
public static void deletePerson() throws Exception {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xiangjie?useUnicode=true&characterEncoding=utf-8", "root", "");
Statement state = conn.createStatement();
int flag = state.executeUpdate("delete from person where id=1");
state.close();
conn.close();
System.out.println("返回:"+flag);
}
public static void updatePerson() throws Exception {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xiangjie?useUnicode=true&characterEncoding=utf-8", "root", "");
Statement state = conn.createStatement();
int flag = state.executeUpdate("update person set nickname='haha' where id=2");
state.close();
conn.close();
System.out.println("返回:"+flag);
}
public static void selectPerson() throws Exception {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xiangjie?useUnicode=true&characterEncoding=utf-8", "root", "");
Statement state = conn.createStatement();
ResultSet rs = state.executeQuery("select * from person");
while(rs.next()){
int id = rs.getInt("id");
String nickname = rs.getString("nickname");
System.out.println("id="+id+"\tnickname="+nickname);
}
rs.close();
state.close();
conn.close();
}
}
Junit:
package com.java.demo;
import org.junit.Test;
import java.sql.SQLException;
public class Demo1Test {
@Test
public void createTable() throws SQLException, ClassNotFoundException {
Demo1.createTable();
}
@Test
public void insertData() throws Exception {
Demo1.insertData();
}
@Test
public void insertPerson() throws Exception {
Demo1.insertPerson();
}
@Test
public void deletePerson() throws Exception {
Demo1.deletePerson();
}
@Test
public void updatePerson() throws Exception {
Demo1.updatePerson();
}
@Test
public void selectPerson() throws Exception {
Demo1.selectPerson();
}
}
createTable() 创建名为person的table; insertData() 插入一条person的具体数据; insertPerson() 插入多条person的具体数据; deletePerson() 删除id为1的person数据; updatePerson() 更新id为2的person数据的名字; selectPerson() 展示当前person table下的全部数据.