JDBC概念
什么是JDBC
jdbc(java database connection):java应用程序连接数据库的技术
java提供了jdbc技术的标准,各个数据库供应商遵从标准提供各自的实现,如果想连接数据库就需要引入对应数据库的第三方jar包
JDBC基本的类和接口
一个类:
DriverManager:DriverManager是Java JDBC API中的一个类,用于管理数据库驱动程序。它提供了一组静态方法,用于注册和获取数据库驱动程序,并创建数据库连接。 DriverManager的主要功能如下: 注册数据库驱动程序:在使用特定的数据库之前,需要先注册对应的数据库驱动程序。通过调用registerDriver()方法,可以向DriverManager注册一个特定的数据库驱动程序。例如:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
获取数据库连接:通过DriverManager可以获取与数据库的连接。使用getConnection()方法,可以根据指定的数据库URL、用户名和密码创建一个Connection对象。例如:
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "user";
String password = "password";
Connection connection = DriverManager.getConnection(url, username, password);
加载驱动程序:在早期版本的JDBC中,需要显式加载驱动程序。使用Class.forName()方法可以加载并注册驱动程序。例如:
Class.forName("com.mysql.jdbc.Driver");
DriverManager简化了驱动程序的加载和数据库连接的获取过程,为Java应用程序提供了与数据库进行交互的基本功能。
三个接口
Connection:通过使用数据库特定的驱动程序,可以创建一个Connection对象,它代表与数据库的物理连接。使用Connection对象,可以执行SQL语句并处理数据库的事务。
Statement/子接口:JDBC提供了Statement和PreparedStatement两个主要的接口来执行SQL语句。Statement用于执行静态的SQL语句,而PreparedStatement则用于执行带有参数的SQL语句。通过这些接口,可以向数据库发送SQL语句并接收执行结果。
ResultSet:当执行一个查询语句时,可以通过ResultSet对象获取查询结果。ResultSet提供了对查询结果的访问和处理方法,可以遍历结果集中的行,并获取每行中的列数据。
建立连接
示例代码:
public static void main(String[] args) {
//数据库相关信息
String url="jdbc:mysql://localhost:3306/spring_db";
String username="root";
String password="123456789";
try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//开启数据库连接
Connection con = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException | SQLException e) {
throw new RuntimeException(e);
}
}
注意:在MySQL 8.0之前的版本中,需要使用Class.forName("com.mysql.jdbc.Driver")语句来加载MySQL的JDBC驱动程序。在 MySQL 8.0 以及更新的版本中,引入了MySQL原生的JDBC驱动程序(称为MySQL Connector/J),不再需要显式加载驱动程序。
数据更新和查询
示例代码:
public static void main(String[] args) {
//数据库相关信息
String url="jdbc:mysql://localhost:3306/spring_db";
String username="root";
String password="123456789";
Connection con=null;
try {
//开启数据库连接
con = DriverManager.getConnection(url, username, password);
Statement sta = con.createStatement();
//新增数据
String name="小明";
double money=4100;
String sql = "insert into account(name,money) values('"+name+"','"+money+"')";
int i = sta.executeUpdate(sql);
if(i>0){
System.out.println("添加成功");
}else {
System.out.println("添加失败");
}
//查询
ResultSet resultSet = sta.executeQuery("select * from account");
while (resultSet.next()){
System.out.println(resultSet.getString("name")+" "+resultSet.getDouble("money"));
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
更新数据(增删改)用的是Statement中的executeUpdate()方法,返回值为受影响的行数
查询数据用的是Statement中的executeQuery()方法,返回值是查询的结果集,查看需要进行遍历
具体代码示例
数据库中Account表:
Java中Account实体类:
package org.example;
public class Account {
int id;
String name;
double money;
public Account() {
}
public Account(String name, double money) {
setName(name);
setMoney(money);
}
public Account(int id, String name, double money) {
this.id = id;
this.name = name;
this.money = money;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "Account{" +
"id=" + id +
", name='" + name + '\'' +
", money=" + money +
'}';
}
}
实现类:
package org.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class AccountManager {
//连接数据库信息
public static final String URL = "jdbc:mysql://localhost:3306/spring_db";
public static final String USERNAME = "root";
public static final String PASSWORD = "123456";
private Connection conn = null;
private Statement stmt = null;
private ResultSet rs = null;
//关闭连接
private void myClose(){
try {
if(rs != null)
rs.close();
if(stmt != null)
stmt.close();
if(conn != null)
conn.close();
}catch (Exception e){
e.printStackTrace();
}
}
//新增数据
public int add(Account account){
int count = 0;
String sql = "insert into account(name,money) values('" + account.getName() + "'," + account.getMoney() + ")";
try {
//获取连接
conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
//得到statement对象
stmt = conn.createStatement();
//得到返回结果
count=stmt.executeUpdate(sql);
}catch (Exception e){
e.printStackTrace();
}finally {
myClose();
}
return count;
}
//查询数据
public List<Account> findAll(){
String sql = "select * from account";
List<Account> list = new ArrayList<>();
try {
conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
stmt = conn.createStatement();
//获取查询结果集
rs = stmt.executeQuery(sql);
while (rs.next()){
//加到集合中
Account account = new Account();
account.setId(rs.getInt("id"));
account.setName(rs.getString("name"));
account.setMoney(rs.getDouble("money"));
list.add(account);
}
}catch (Exception e){
e.printStackTrace();
}finally {
myClose();
}
//返回集合
return list;
}
}