1、Java的数据库编程:JDBC
JDBC(Java Database Connectivity)是Java中用来与数据库进行交互的一种标准API(应用程序编程接口)。它为开发人员提供了一种统一的方式来访问各种类型的数据库管理系统(DBMS),如 MySQL, Oracle, SQL Server, PostgreSQL 等。
通过 JDBC,Java 应用程序可以执行 SQL 语句来查询、更新或管理关系型数据库中的数据。JDBC API 定义了一系列的接口和类,这些接口和类通常由数据库供应商提供的驱动程序实现。不同的数据库可能需要不同类型的驱动程序。
2、使用 JDBC 进行数据库操作的基本步骤:
2.1 加载驱动
在使用 JDBC 之前,需要先加载合适的数据库驱动程序。
在项目中创建文件夹lib,并将依赖包mysql-connector-java-5.1.47.jar复制到lib中,右键依赖包
点击 add as libarary...
2.2 建立连接
Connection接口实现类由数据库提供,获取Connection对象通常有两种方式:
DriverManager(驱动管理类)的静态方法获取:
// 加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 创建数据库连接
Connection connection = DriverManager.getConnection(url);
DataSource(数据源)对象获取。实际应用中会使用DataSource对象。
//1、初始化一个数据源DataSource dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root"); ((MysqlDataSource) dataSource).setPassword("123456");
setUrl() , setUser() , setPassword()
setUrl()
setUrl()
方法通常用于配置 Java 数据源(DataSource)对象,以便指定与数据库建立连接所需的 URL。这个 URL 是 JDBC(Java Database Connectivity)连接字符串,它包含了数据库服务器的位置、端口、数据库名以及可能的一些其他的连接参数。
参数说明:
jdbc:mysql://
表示使用 MySQL 驱动程序。127.0.0.1:3306
是 MySQL 数据库的默认端口地址。db_test
是要连接的数据库的名字。?characterEncoding=utf8&useSSL=false
是一些额外的参数,比如设置字符编码为 UTF-8 并且禁用 SSL 加密。
setUser()
setUser()
方法通常是在配置 Java 数据源 (DataSource) 对象时使用的方法之一,用于设置数据库连接的用户名。这个方法通常与 setPassword()
方法一起使用,以便完整地配置数据库连接所需的认证信息。
参数说明:
root : 一个字符串,表示用于连接数据库的用户名
setPassword()
setPassword()
方法通常是在配置 Java 数据源 (DataSource) 对象时使用的方法之一,用于设置数据库连接的密码。这个方法与 setUser()
方法一起使用,以便完整地配置数据库连接所需的认证信息。
参数说明:
password
:一个字符串,表示用于连接数据库的密码。
以上两种方式的区别是:
1. DriverManager类来获取的Connection连接,是无法重复利用的,每次使用完以后释放资源 时,通过connection.close()都是关闭物理连接。
2. DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接 是可以复用的,每次使用完数据库连接,释放资源调用connection.close()都是将 Conncetion连接对象回收。
2.3 创建Statement和PreparedStatement对象
使用 Connection 对象创建 Statement 或 PreparedStatement 对象。
//2、与数据库服务器建立连接Connection connection = dataSource.getConnection();
2.4 执行SQL语句
通过 Statement 或 PreparedStatement 对象执行 SQL 查询、插入、更新等操作。
插入操作:
//编写SQLString sql = "insert into student0 values (?,?);";PreparedStatement statement = connection.prepareStatement(sql); //4、预编译statement.setInt(1, id); // 第一个 ? = 1statement.setString(2, name);// 第二个 ? = name//打印拼接后的SQLSystem.out.println(statement);
查询操作:
//3、构造sqlString sql = "select * from student0";PreparedStatement statement = connection.prepareStatement(sql);//4、打印拼接后的SQLSystem.out.println(statement);
2.5 处理结果集
执行插入操作:
//执行SQLint ret = statement.executeUpdate();System.out.println("ret = " + ret);
执行查询操作:
需要通过 ResultSet 对象来处理返回的数据。
//ResultSet就表示查询的结果集合(临时表) 此处就需要针对表进行遍历ResultSet resultSet = statement.executeQuery();//遍历结果集合//通过next() 可获得临时表中的每一行数据,如果获取到最后一行之后,返回falsewhile (resultSet.next()) {int id = resultSet.getInt("id");String name = resultSet.getString("name");System.out.println("id = " + id + ", name = " + name);}
2.6 关闭资源
最后,确保所有打开的资源都被正确关闭,包括 ResultSet、Statement 和 Connection。
完整代码:
插入数据:
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;public class ConnectDemo {public static void main(String[] args) throws SQLException {Scanner scan = new Scanner(System.in);//1、初始化一个数据源DataSource dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("123456");//2、与数据库服务器建立连接Connection connection = dataSource.getConnection();//3、编写SQLSystem.out.println("请输入学生姓名:");String name = scan.next();System.out.println("请输入学生的学号:");int id = scan.nextInt();String sql = "insert into student0 values (?,?);";PreparedStatement statement = connection.prepareStatement(sql); //4、预编译statement.setInt(1, id); // 第一个 ? = 1statement.setString(2, name);// 第二个 ? = name//4、打印拼接厚的SQLSystem.out.println(statement);//5、执行SQLint ret = statement.executeUpdate();System.out.println("ret = " + ret);//6、释放资源statement.close();connection.close();}
}
查询数据:
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;public class ConnectDemo2 {public static void main(String[] args) throws SQLException {Scanner scan = new Scanner(System.in);//1、初始化一个数据源DataSource dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("123456");//2、与数据库服务器建立连接Connection connection = dataSource.getConnection();//3、构造sqlString sql = "select * from student0";PreparedStatement statement = connection.prepareStatement(sql);//4、打印拼接后的SQLSystem.out.println(statement);//5、执行sql//ResultSet就表示查询的结果集合(临时表) 此处就需要针对表进行遍历ResultSet resultSet = statement.executeQuery();//6.遍历结果集合//通过next() 可获得临时表中的每一行数据,如果获取到最后一行之后,返回falsewhile (resultSet.next()) {int id = resultSet.getInt("id");String name = resultSet.getString("name");System.out.println("id = " + id + ", name = " + name);}}
}