zoukankan      html  css  js  c++  java
  • JDBC的使用

    JDBC

    JDBC全称为java database connectivity,是sun公司指定的java数据库连接技术的简称。

    他是sun公司和数据库开发商共同开发出来的独立于DBMS的应用程序接口,它为java程序员进行数据库编程提供了统一的API。

    JDBC实际上有两组API,一组面向java应用程序开发人员,另一组是面向数据库驱动程序开发人员的,一般都是数据驱动程序开发人员利用后面一组API开发出供应程序开发人员使用的API。

    核心的类和接口

    我们需要熟悉包java.sql.*中定义的类(class),接口(interface),例外(expection),并且能够灵活使用他们,就能够发挥出JDBC强大的功能。

    1. java.sql.DriverManager用来加载不同数据库厂商的JDBC驱动,并为创建新的数据库连接提供支持
    2. java.sql.Driver指定数据库的驱动入口,DriverManager将通过该类作为连接数据的参数
    3. java.sql.Connection完成针对某指定数据库的连接功能
    4. java.sql.Statement在一个已经建立的连接中,作为SQL语句执行的容器,它有两个子类:
      • java.sql.CallableStatement 用于执行数据库中已经创建好的存储过程。
      • java.sql.preparedStatement用于执行预编译的SQL语句。
    5. java.sql.ResultSet用于存储执行特定SQL语句后返回的结果集。

    JDBC基本使用过程

    如果是增删改, 可不使用ResultSet

    1. 加载驱动程序类(可省略, 推荐写上),这里加载mysql的jdbc驱动, 即初始化Driver中的静态代码块

      class.forName("com.mysql.jdbc.Driver")

    2. 建立连接

      connection conn = DriverManager.getConnection(url,"user","password");

    3. 通过这个连接连接sql语句执行的容器

      Statement statement = conn.createStatement();

    4. 建立sql语句

      String sql = "select * from table1";

    5. 利用前面的sql容器执行刚建立的sql语句,并把结构返回到结果集对象中。

      ResultSet rs = statement.executeQuery(sql);

    6. 分析获取的查询结果

    简单的查询案例

    要查询的表 (user):

    id (int 主键自增) name (varchar) money (double)
    1 tom 5000

    代码:

    /**
     * JDBC快速入门程序: 查询jt_db.account表中的所有数据
     */
    public class TestJdbc02 {
        @Test
        public void testFindAll() {
            Connection conn = null;
            Statement stat = null;
            ResultSet rs = null;
            try {
                // 1. 注册数据库驱动
                Class.forName("com.mysql.jdbc.Driver");
                // 2. 获取数据库连接(导入java.sql.Connection 包)
                conn = DriverManager.getConnection(
                        "jdbc:mysql://localhost:3306/jt_db?characterEncoding=utf8",
                        "root",
                        "123456");
                // 3. 获取传输器
                stat = conn.createStatement();
                // 4. 执行SQL, 返回结果
                String sql = "select * from account";
                rs = stat.executeQuery(sql);
                // 5. 处理结果(打印到控制台)
                while (rs.next()) {
                    int id = rs.getInt("id");
                    String name = rs.getString("name");
                    double money = rs.getDouble("money");
                    System.out.print(id + ", " + name + ", " + money);
                    System.out.println();
                }
                System.out.println("TestJdbc.testFindAll");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                // 6. 释放资源(原则: 越晚获取的越先关闭!)
                if (rs != null) { // 如果rs为null, 则不需要关闭, 反之, 不必关闭对象
                    try {
                        rs.close();
                    } catch (SQLException throwables) {
                        throwables.printStackTrace();
                    } finally {
                        rs = null;
                    }
                }
                if (stat != null) {
                    try {
                        stat.close();
                    } catch (SQLException throwables) {
                        throwables.printStackTrace();
                    } finally {
                        stat = null;
                    }
                }
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException throwables) {
                        throwables.printStackTrace();
                    } finally {
                        conn = null;
                    }
                }
            }
        }
    }
    

    注意关闭顺序, 先后循序为: 关闭ResultSet -> 关闭Statement -> 关闭Connection

    结果:

    1, tom, 5000
    
    

    JDBC工具类

    为了简化开发, 我们可以提取一个JDBC的工具类, 方便获取Connection连接对象和关闭操作

    代码如下:

    /** JDBC工具类 */
    public class JdbcUtil {
    	// 获取连接对象
    	public static Connection getConn() throws Exception{
    		Class.forName( "com.mysql.jdbc.Driver" );
    		Connection conn = DriverManager.getConnection(
    				"jdbc:mysql://localhost:3306/jt_db?characterEncoding=utf-8",
    				"root", 
    				"123456");
    		return conn;
    	}
    	
        // 释放资源
    	public static void close(Connection conn, 
    			Statement stat, ResultSet rs){
    		if(rs != null){
    			try {
    				rs.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			} finally{
    				rs = null;
    			}
    		}
    		if(stat != null){
    			try {
    				stat.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			} finally{
    				stat = null;
    			}
    		}
    		if(conn != null){
    			try {
    				conn.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			} finally{
    				conn = null;
    			}
    		}
    	}
    }
    

    新增

    使用工具雷, 只写核心代码

    Connection conn = null;
    Statement stat = null;
    ResultSet rs = null;
    try {
        conn = JdbcUtil.getConn();
        stat = conn.createStatement();
        String sql = "insert into account value(null, 'join', 3500)";
        int rows = stat.executeUpdate(sql);
        System.out.println("影响行数: " + rows);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        JdbcUtil.close(conn, stat, rs);
    }
    

    修改

    Connection conn = null;
    Statement stat = null;
    try {
        conn = JdbcUtil.getConn();
        stat = conn.createStatement();
        String sql = "update account set money=1500 where name = 'join'";
        int rows = stat.executeUpdate(sql);
        System.out.println("影响行数: " + rows);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        JdbcUtil.close(conn, stat, null);
    }
    

    删除

    Connection conn = null;
    Statement stat = null;
    try {
        conn = JdbcUtil.getConn();
        stat = conn.createStatement();
        String sql = "delete from account where name = 'join'";
        int rows = stat.executeUpdate(sql);
        System.out.println("影响行数: " + rows);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        JdbcUtil.close(conn, stat, null);
    }
    
  • 相关阅读:
    数据库乐观锁应用
    maven 引入本地jar
    GTS 分布式事务
    redis 做冥等
    服务器 启动命令
    pgAdmin4的应用
    PostgreSQL 分区
    压测工具
    BigDecimal 比较大小
    移动端px转化为rem
  • 原文地址:https://www.cnblogs.com/zpKang/p/13033295.html
Copyright © 2011-2022 走看看