Java Database Connectivity(JDBC)是Java语言中用于访问关系型数据库的标准接口。它定义了一组API,使得Java程序能够以统一的方式连接、访问和操作不同的关系型数据库。JDBC不仅简化了数据库操作,还提高了Java应用程序的可移植性和可维护性。
1. 下载并导入MySQL驱动jar包
一键直达:https://mvnrepository.com/
下载方法:
简单粗暴版导入方式:
2. 使用JDBC的基本步骤
在Java中使用JDBC与数据库交互,通常包括以下步骤:
- 创建数据源对象,描述了数据从哪里来,数据库服务器的位置
- 和数据库服务器建立网络连接
- 使用PreparedStatement构造SQL语句
- 把SQL发送到服务器上执行
- 释放资源
2.1. 创建数据源对象
首先需要创还能数据源对象,描述了数据从哪里来,数据库服务器的位置
url说明:
2.2. 建立连接
把上面的信息都补充完毕之后就可以和数据库服务器建立网络连接了
Connection connection = mysqlDataSource.getConnection();
如果说上面创建数据源对象或是设置信息时有误,这里的连接就会抛出异常
同时要注意选择的是java.sql下的Connection接口
2.3. 创建SQL语句
String sql = "insert into student values('赵六',80)"; PreparedStatement statement = connection.prepareStatement(sql);
这里创建sql语句时不需要加 ‘;’,在控制台中添加分号是因为控制台需要知道当前输入的enter是换行还是执行当前sql,如果说字符串中包含多条sql是需要加的
2.4. 执行SQL
int l = statement.executeUpdate(); System.out.println(l);
这里的方法返回值代表有几行数据受到了影响
2.5. 释放资源
statement.close(); connection.close();
释放资源还是采用先开后关的原则
public class TestJDBC1 { public static void main(String[] args) throws SQLException { //创建数据源对象,描述了数据从哪里来,数据库服务器的位置 MysqlDataSource mysqlDataSource = new MysqlDataSource(); mysqlDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/test2?characterEncoding=utf8&useSSL=false"); mysqlDataSource.setUser("root"); mysqlDataSource.setPassword("1234"); //和数据库服务器建立网络连接 Connection connection = mysqlDataSource.getConnection(); System.out.println(connection); //使用PreparedStatement构造SQL语句 String sql = "insert into student values('赵六',80)"; PreparedStatement statement = connection.prepareStatement(sql); //把SQL发送到服务器上执行 int l = statement.executeUpdate(); System.out.println(l); //释放资源 statement.close(); connection.close(); } }
3. 使用Set系列方法设置值
在上面的演示中,我们是把一条SQL语句写死了,不够灵活,可以添加键盘录入的方式
但是这样的方式也有弊端,首先就是编写容易出错,其次就是可能会引起“sql注入攻击”,推荐使用下面的方式:
public class TestJDBC2 { public static void main(String[] args) throws SQLException { Scanner sc = new Scanner(System.in); String name = sc.nextLine(); int grade = sc.nextInt(); //这里采用另一种方式来创建数据源对象 DataSource dataSource = new MysqlDataSource(); ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test2?characterEncoding=utf8&useSSL=false"); ((MysqlDataSource) dataSource).setUser("root"); ((MysqlDataSource) dataSource).setPassword("ljl0909"); //和数据库服务器建立网络连接 Connection connection = dataSource.getConnection(); System.out.println(connection); //使用PreparedStatement构造SQL语句 String sql = "insert into student values(?,?)"; PreparedStatement statement = connection.prepareStatement(sql); statement.setString(1, name); statement.setInt(2, grade); //把SQL发送到服务器上执行 int l = statement.executeUpdate(); System.out.println(l); //释放资源 statement.close(); connection.close(); } }
可以根据具体类型选取不同的方法
4. 使用get系列方法获取值
update / delete操作和insert into 方法类似,都是使用executeUpdate(),查询操作使用的是executeQuery()方法,返回值肯定就不是影响的行数了,而是把查询到的数据存放在结果集合中,通过遍历结果集合,就可以达到查询的效果
public class TestJDBC3 { public static void main(String[] args) throws SQLException { //创建数据源对象 MysqlDataSource mysqlDataSource = new MysqlDataSource(); mysqlDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/test2?characterEncoding=utf8&useSSL=false"); mysqlDataSource.setUser("root"); mysqlDataSource.setPassword("ljl0909"); //和数据库建立网络连接 Connection connection = mysqlDataSource.getConnection(); //使用PreparedStatement构造SQL语句 String sql = "select * from student"; PreparedStatement statement = connection.prepareStatement(sql); //执行SQL,查询结果存储在结果集中 ResultSet resultSet = statement.executeQuery(); //遍历结果集 while (resultSet.next()) { System.out.println(resultSet.getString("name")); System.out.println(resultSet.getInt("grade")); } //关闭资源 resultSet.close(); statement.close(); connection.close(); } }
在使用get方法获取值时要根据具体类型选择相应的get方法,并且传入的参数要和目标列的列名对应
在关闭资源时,比更新操作还多了一个ResultSet对象需要关闭