JDBC基础 & CRUD操作

Posted 进制转生~成为程序员就拿出真本事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC基础 & CRUD操作相关的知识,希望对你有一定的参考价值。

目录

一、概述

1、JDBC介绍

2、数据持久化

3、Java中的数据存储技术

4、Java与SQL对应数据类型转换表

5、两种思想

6、两种技术

二、程序编写步骤

三、获取数据库连接

四、CRUD操作


一、概述

1、JDBC介绍

        Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们通常说的JDBC是面向关系型数据库的。 

2、数据持久化

  • 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成

  • 持久化的主要应用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。 

3、Java中的数据存储技术

  • JDBC直接访问数据库

  • JDO (Java Data Object )技术

  • 第三方O/R工具,如Hibernate, Mybatis 等

4、Java与SQL对应数据类型转换表

5、两种思想

  1. 面向接口编程思想
  2. ORM思想(object relational mapping)

        一个数据表对应一个Java类

        表中的一条记录对应Java类的一个对象

        表中的一个字段对应Java类的一个属性

6、两种技术

  • JDBC结果集的元数据:ResultSetMetaData

    • 获取列数:getColumnCount()

    • 获取列的别名:getColumnLabel()

  • 通过反射,创建指定类的对象,获取指定的属性并赋值

二、程序编写步骤

三、获取数据库连接

连接方式一:

    @Test
    public void connection01() throws SQLException 
        Driver driver = new com.mysql.jdbc.Driver();
        String url = "jdbc:mysql://localhost:3306/test";
        Properties info = new Properties();
        info.setProperty("user","root");
        info.setProperty("password","000000");
        Connection conn = driver.connect(url,info);
        System.out.println(conn);
    

显式出现了第三方数据库的API.

连接方式二:

    @Test
    public void connection02() throws Exception 
        Class clazz = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver) clazz.newInstance();
        Properties info = new Properties();
        info.setProperty("user","root");
        info.setProperty("password","000000");
        Connection conn = driver.connect("jdbc:mysql://localhost:3306/test",info);
        System.out.println(conn);
    

相较于方式一,这里使用反射实例化Driver,不在代码中体现第三方数据库的API。体现了面向接口编程思想。

连接方式三:

    @Test
    public void connection03() throws Exception
        String url = "jdbc:mysql://localhost:3306/test";
        String user = "root";
        String password = "000000";
        Class clazz = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver) clazz.newInstance();
        DriverManager.registerDriver(driver);
        Connection conn = DriverManager.getConnection(url,user,password);
        System.out.println(conn);
    

使用DriverManager实现数据库的连接。体会获取连接必要的4个基本要素。

连接方式四:

    @Test
    public void connection04() throws Exception
        String url = "jdbc:mysql://localhost:3306/test";
        String user = "root";
        String password = "000000";
//        Class clazz = Class.forName("com.mysql.jdbc.Driver");
//        Driver driver = (Driver) clazz.newInstance();
//        DriverManager.registerDriver(driver);
        Connection conn = DriverManager.getConnection(url,user,password);
        System.out.println(conn);
    

不必显式的注册驱动了。因为在DriverManager的源码中已经存在静态代码块,实现了驱动的注册。

连接方式五:

    @Test
    /*
    * 好处:1、实现数据与代码分离,实现了解耦
    *       2、如果需要修改配置文件信息,可以避免程序重新打包
    * */
    public void connection05() throws Exception
        InputStream is = Test.class.getClassLoader().getResourceAsStream("jdbc.properties");
        Properties p = new Properties();
        p.load(is);
        String url = p.getProperty("url");
        String user = p.getProperty("user");
        String password = p.getProperty("password");
        String driver = p.getProperty("driverClass");

        Class.forName(driver);
        Connection conn = DriverManager.getConnection(url,user,password);
        System.out.println(conn);

    

其中,配置文件声明在工程的src目录下:【jdbc.properties】

四、CRUD操作

什么是CRUD?

  • C:Create(增加) 对应 create table table_name;
  • R:Retrieve(查询)对应 select * from table_name;
  • U:Update(更新) 对应 update table_name set elem1=value1 where id=value2;
  • D:Delete(删除)对应 delete from table_name where id=value1;

通用的增删改操作:

    // 通用——增删改数据库
    public static void executeSql(String sql ,Object ...args) throws Exception
        // 1 获取数据库连接
        Connection conn = getConnection();
        // 2 创建PreparedStatement对象进行sql预编译
        PreparedStatement ps = conn.prepareStatement(sql);
        // 3 补充占位符
        for (int i = 0; i <args.length ; i++) 
            ps.setObject(i+1,args[i]);
        
        // 4 执行
        ps.execute();
        // 5 关闭接口
        conn.close();
        ps.close();
    

通用的查询操作:

    // 通用查询操作
    public static <T> List<T> querySql(Class<T> clazz,String sql, Object ...args) throws Exception
        // 1 创建对象集合
        List<T> list = new ArrayList<T>();
        // 2 连接数据库
        Connection conn = getConnection();
        // 3 补充占位符
        PreparedStatement ps = conn.prepareStatement(sql);
        for (int i = 0; i < args.length ; i++) 
            ps.setObject(i+1,args[i]);
        
        // 4  获取查询数据集
        ResultSet rs = ps.executeQuery();
        // 5 获取元数据
        ResultSetMetaData rsmd = rs.getMetaData();
        // 6 获取列数
        int columnCount = rsmd.getColumnCount();

        while(rs.next())
            T t = clazz.newInstance();
            for (int i = 0; i < columnCount ; i++) 
                Object columnValue = rs.getObject(i+1);
                String columnName = rsmd.getColumnLabel(i+1);
                Field field = clazz.getDeclaredField(columnName);
                field.setAccessible(true);
                field.set(t,columnValue);
            
            list.add(t);
        
        conn.close();
        ps.close();
        rs.close();
        return list;
    

以上是关于JDBC基础 & CRUD操作的主要内容,如果未能解决你的问题,请参考以下文章

2020想学习JAVA的同学看过来,最基础的编程CRUD你会了没?

数据库操作,jdbc的CRUD

JDBC,连接池及CRUD操作

JDBC:从CRUD开始,理解JDBC中的各个对象作用,掌握Druid的使用

MySql & JDBC & 连接池 & 总结

DBUtils——用来完成jdbc的CRUD