JDBC详写(编程连接、基本操作)

目录

引言:

JDBC介绍

JDBC编程步骤

导入专用的jar包(不同的数据库需要的jar包不同

 URL

 账号密码

 连接演示:

Statement与PreparedStatement接口

使用Statement接口

使用PreparedStatement接口

增删改操作

 查询操作

 获取结果(ResultSet)

获取行

 获取值

释放资源


引言:

        相信梦想是价值的源泉,相信眼光决定未来的一切,相信成功的信念比成功本身更重要,相信人生有挫折没有失败,相信生命的质量来自决不妥协的信念

JDBC介绍

        JDBC(Java DataBase Connectivity)是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。它由一组用Java语言编写的类和接口组成。各种不同类型的数据库都有相应的实现,本文中的代码都是针对MySQL数据库实现的。

JDBC编程步骤

  • 导入专用的jar包(不同的数据库需要的jar包不同

 

 

  •  URL

  •  账号密码

 连接演示:

         因为在进行数据库的增删改查的时候都需要与数据库建立连接,所以可以在项目中将建立连接写成一个工具方法,用的时候直接调用即可


Statement与PreparedStatement接口

  • 使用Statement接口

        Statement接口创建之后,可以执行SQL语句,完成对数据库的增删改查。其中 ,增删改只需要改变SQL语句的内容就能完成,然而查询略显复杂。在Statement中使用字符串拼接的方式,该方式存在句法复杂,容易犯错等缺点,具体在下文中的对比中介绍。所以Statement在实际过程中使用的非常的少,所以具体的放到PreparedStatement那里给出详细代码。

        字符串拼接方式的SQL语句是非常繁琐的,中间有很多的单引号和双引号的混用,极易出错。

使用PreparedStatement接口

  • 使用PreparedStatement接口与 Statement一样,PreparedStatement也是用来执行sql语句的与创建Statement不同的是,需要根据sql语句创建PreparedStatement。除此之外,还能够通过设置参数,指定相应的值,而不是Statement那样使用字符串拼接。

增删改操作

 查询操作

 //返回多个对象查询操作
    public static <T> List<T> getForList(Class<T> clazz, String sql, Object... args) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            conn = JDBCUtils.getConnection();

            ps = conn.prepareStatement(sql);
            for (int i = 0; i < args.length; i++) {
                ps.setObject(i + 1, args[i]);
            }
            rs = ps.executeQuery();
            //获取结果集的元数据:ResultSetMetaData
            ResultSetMetaData rsmd = rs.getMetaData();
            //通过ResultSetMetData获取结果集中的列数
            int columnCount = rsmd.getColumnCount();
            //--------------------------------
            //创建集合对象
            ArrayList<T> list = new ArrayList<>();
            while (rs.next()) {
                T t = clazz.newInstance();
                //Customer cust = new Customer();
                //处理结果集一行数据中的每一个列:给t对象指定 的属性赋值
                for (int i = 0; i < columnCount; i++) {
                    //获取列值
                    Object columValue = rs.getObject(i + 1);
                    //获取每个列的列名
                    //String columnName = rsmd.getColumnName(i + 1);
                    String columnLabel = rsmd.getColumnLabel(i + 1);
                    //给cust对象指定的columnName属性,赋值为columnValue,通过反射
                    Field field = clazz.getDeclaredField(columnLabel);
                    field.setAccessible(true);
                    field.set(t, columValue);
                }
                list.add(t);
            }
            return list;
            //-----------------------------------------------------------
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.colseResource(conn, ps, rs);
        }
        return null;


    }

 运行

String sql2 = "select id,name,email from customers where id < ?";
        List<Customer> list = getForList(Customer.class, sql2, 12);
        list.forEach(System.out::println);
        System.out.println("--------------------------------");
        String sql3 = "select order_id orderId,order_name orderName from `order` where order_id < ?";
        List<Order> orderList = getForList(Order.class, sql3, 5);
        orderList.forEach(System.out::println);

结果:

 获取结果(ResultSet)

Jdbc中的ResultSet封装了Sql语句的执行结果集。Resultset封装执行结果时,采用的类似于表格的方式,ResultSet 对象维护了一个指向表格数据行的指针。初始的时候,索引值是从1开始(数据库要求)指针指向第一个数据。调用ResultSet.next() 方法,使指针指向下一个数据,可以判断下个数据是否为空,或者可以调用getObject(int index)、getString(int index)等方法来获取指向的数据。

获取行

ResultSet提供了对结果集进行指针的方法:

 获取值

ResultSet封装的数据通过get方法取出:

释放资源

        Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象。后创建的对象先关闭,先关闭Statement对象再关闭Connection对象。 

        看到这里,就连单表查询都需要这么多代码,是不是感觉通过JDBC对数据库操作过于繁琐。所以诞生了Mybatis框架,Mybatis是一个优秀的持久层框架,底层基于JDBC实现与数据库的交互。并在JDBC操作的基础上做了封装和优化,它借助灵活的SQL定制,参数及结果集的映射方式,更好的适应了当前互联网技术的发展。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
https://bbs.csdn.net/topics/603557458

)">
< <上一篇
下一篇>>