【Java】JDBC的使用详解

JDBC概述

JDBC的全称是Java数据库连接(Java Database Connectivity),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系型数据库,并使用SQL语句来完成对数据库中数据的查询、新增、更新和删除等操作。说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。

Java使用JDBC详细步骤

IDEA中创建maven工程,然后导入mysql jar包

 <dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>8.0.20</version>
 </dependency>

1、加载数据库驱动

 // 1.加载驱动程序
 Class.forName("com.mysql.cj.jdbc.Driver");

如果是mysql 8.0一下的版本

Class.forName("com.mysql.jdbc.Driver");

2、获得数据库链接

  // 2.获得数据库链接
String URL = "jdbc:mysql://localhost:3306/springtest?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false";
String USER = "root";
String PASSWORD = "123456";
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);

Connection对象常用方法

方法描述
prepareStatement(sql)创建向数据库发送预编译sql的PrepareSatement对象。
prepareCall(sql)创建执行存储过程的callableStatement对象。
createStatement()创建向数据库发送sql的statement对象。
setAutoCommit(boolean autoCommit)设置事务是否自动提交。
commit()在链接上提交事务。
rollback()在此链接上回滚事务。

3、执行SQL语句

方法1:Statement

String sql="select * from user where name='"+name+"'";
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery(sql);

Statement对象常用方法:

方法描述
executeQuery(String sql)用于向数据发送查询语句
executeUpdate(String sql)用于向数据库发送insert、update或delete语句
execute(String sql)用于向数据库发送任意sql语句
addBatch(String sql)把多条sql语句放到一个批处理中。
executeBatch()向数据库发送一批sql语句执行。

方法2:PreperedStatement

PreperedStatementStatement的子类

String sql="select * from user where name=?";
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1, name);
ResultSet rs = statement.executeQuery();

StatementPreperedStatement对比

  • PreperedStatement可以避免SQL注入的问题
  • Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement 可对SQL进行预编译,从而提高数据库的执行效率。
  • PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。

4、获取结果

  while (rs.next()) {
       System.out.println(rs.getString("name") + " " + rs.getString("age"));
   }

ResultSet常用方法:
获取行

  • next():移动到下一行
  • Previous():移动到前一行
  • absolute(int row):移动到指定行
  • beforeFirst():移动resultSet的最前面。
  • afterLast() :移动到resultSet的最后面。

5、释放资源

if (rs != null) {
   try {
         rs.close();
     } catch (Exception e) {
         e.printStackTrace();
     }
     rs = null;

 }
 if (statement != null) {
     try {
         statement.close();
     } catch (Exception e) {
         e.printStackTrace();
     }

 }
 if (conn != null) {
     try {
         conn.close();
     } catch (Exception e) {
         e.printStackTrace();
     }

 }

完整代码

import java.sql.*;


public class App {
    public static void main(String[] args) {
        Connection conn = null;
//        Statement statement = null;
        PreparedStatement statement = null;
        ResultSet rs = null;

        try {
            // 1.加载驱动程序
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 2.获得数据库链接
            String URL = "jdbc:mysql://localhost:3306/springtest?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false";
            String USER = "root";
            String PASSWORD = "123456";
            conn = DriverManager.getConnection(URL, USER, PASSWORD);
            // 3.通过数据库的连接操作数据库,实现增删改查(使用Statement类)
            String name = "张三1";
            //预编译
            String sql = "select * from user where name=?";
            statement = conn.prepareStatement(sql);
            statement.setString(1, name);
            rs = statement.executeQuery();
/*			String sql="select * from user where name='"+name+"'";
			Statement statement = conn.createStatement();
			ResultSet rs = statement.executeQuery(sql);*/
            // 4.处理数据库的返回结果(使用ResultSet类)
            while (rs.next()) {
                System.out.println(rs.getString("name") + " " + rs.getString("age"));
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //6.关闭链接,释放资源
            if (rs != null) {
                try {
                    rs.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                rs = null;

            }
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        }
    }
 

}

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Teacher.Hu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值