参考
什么是JDBC?
JDBC是Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。
使用Java程序访问数据库时,Java代码并不是直接通过TCP连接去访问数据库,而是通过JDBC接口来访问,而JDBC接口则通过JDBC驱动来实现真正对数据库的访问。
JDBC接口 JDBC接口是Java标准库自带的
JDBC驱动 需要自己下载,可以maven下载,也可以导入jar包
使用JDBC的好处是:
各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发;
Java程序编译期仅依赖java.sql包,不依赖具体数据库的jar包;
可随时替换底层数据库,访问数据库的Java代码基本不变。
建立一个简单的连接
import java.sql.*;public class Main { public static void main (String[] args) { try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mylearn" ,"root" ,"root" ); Statement statement = connection.createStatement()){ ResultSet set = statement.executeQuery("select * from student" ); while (set.next()){ System.out.println(set.getString(1 )); } }catch (SQLException e){ e.printStackTrace(); } } }
三个基本对象
DriverManager 管理数据库驱动
通过调用getConnection()来进行数据库的链接
connection 数据库的连接对象
通过连接对象来创建一个Statement用于执行SQL语句
Statement 用来执行SQL语句
查询到的数据就放在ResultSet对象
可以使用executeUpdate()
方法来执行一个DML或是DDL语句,它会返回一个int类型,表示执行后受影响的行数,可以通过它来判断DML语句是否执行成功。
通过excute()
来执行任意的SQL语句,它会返回一个boolean
来表示执行结果是一个ResultSet还是一个int,我们可以通过使用getResultSet()
或是getUpdateCount()
来获取。
简单的数据库操作
DML操作
student表如下
ID
Name
Age
Score
201721
小明
18
100
201722
小红
20
99
201723
小刚
16
60
201724
小白
24
70
import java.sql.*;public class Main { public static void main (String[] args) { try ( Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mylearn" ,"root" ,"root" ); Statement statement = connection.createStatement()){ int i = statement.executeUpdate("insert into student values(201725,'小亚',21,78),(201726,'小兵',18,100)" ); System.out.println("生效了" + i + "行" ); } catch (SQLException e){ e.printStackTrace(); } } }
更新后的表格为:
ID
Name
Age
Score
201721
小明
18
100
201722
小红
20
99
201723
小刚
16
60
201724
小白
24
70
201725
小亚
21
78
201726
小兵
18
100
DQL操作
通过如下的方法,我们可以打印数据库中的内容
import java.sql.*;public class Main { public static void main (String[] args) { try ( Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mylearn" ,"root" ,"root" ); Statement statement = connection.createStatement()){ ResultSet set = statement.executeQuery("select * FROM student" ); while (set.next()){ System.out.println(set.getInt(1 )); System.out.println(set.getString(2 )); System.out.println(set.getInt(3 )); System.out.println(set.getInt(4 )); } } catch (SQLException e){ e.printStackTrace(); } } }
批处理操作
当我们要执行很多条语句时,可以不用一次一次地提交,而是一口气全部交给数据库处理,这样会节省很多的时间。
public static void main (String[] args) throws ClassNotFoundException { try (Connection connection = DriverManager.getConnection(); Statement statement = connection.createStatement()){ statement.addBatch("insert into user values ('f', 1234)" ); statement.addBatch("insert into user values ('e', 1234)" ); statement.executeBatch(); }catch (SQLException e){ e.printStackTrace(); } }
将查询结果映射为对象