【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();
                }

            }
        }
    }
 

}

猜你喜欢

转载自blog.csdn.net/huweiliyi/article/details/107872287
今日推荐