文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java中如何实现JDBC增删改查操作

2023-06-22 02:35

关注

小编给大家分享一下java中如何实现JDBC增删改查操作,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

  java中如何实现JDBC增删改查操作   

我们先看一遍步骤:    

这里不推荐使用Statement,两个原因:

                1.存在拼串操作,繁琐。

                2.存在sql注入问题。

        那我们使用谁来代替Statement呢?

一、增删改操作

        操作前,我们先解决上面的问题,我们使用PreparedStatement来代替Statement。

1.1 PreparedStatement介绍

可以通过调用 Connection 对象的 preparedStatement(String sql) 方法获取 PreparedStatement 对象

PreparedStatement 接口是 Statement 的子接口,它表示一条预编译过的 SQL 语句

PreparedStatement 对象所代表的 SQL 语句中的参数用问号(?)来表示,调用 PreparedStatement 对象的 setXxx() 方法来设置这些参数. setXxx() 方法有两个参数,第一个参数是要设置的 SQL 语句中的参数的索引(从 1 开始),第二个是设置的 SQL 语句中的参数的值

 优点:

解决字符串拼串问题,防止sql注入提高性能       

 1.2 增删改操作

        这里给出一个针对不同表的通用增删改操作,拿着直接用就可以了。

//通用增删改操作    public boolean updateInfo(String sql,Object...args){        Connection conn = null;        PreparedStatement ps = null;        boolean b = true;        try {            //1.建立连接            conn = JDBCUtils.getConnection();            //2.预编译sql语句            ps = conn.prepareStatement(sql);            //3.填充占位符            for (int i = 0; i <args.length ; i++) {                ps.setObject(i+1,args[i]);            }            //4.执行操作            b = ps.execute();        } catch (Exception e) {            e.printStackTrace();        } finally {            //5.关闭资源            JDBCUtils.close(conn,ps);        }        return b;    }

         是不是复制使用会报错,这是因为博主把数据库连接和关闭资源也封装成了一个类JDBCUtils

        下面给出这个类的具体代码:

        配置文件就自己写吧,毕竟每个人的数据库都不一样。以及该导入的包自己动动手就行了。

public class JDBCUtils {    //连接    public static Connection getConnection(){        Connection conn = null;        try {            //1.加载配置文件            InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");            Properties prop = new Properties();            prop.load(is);             //2.读取配置文件            String user = prop.getProperty("user");            String password = prop.getProperty("password");            String url = prop.getProperty("url");            String driverClass = prop.getProperty("driverClass");             //3.加载驱动            Class.forName(driverClass);             //4.建立连接            conn = DriverManager.getConnection(url, user, password);        } catch (Exception e) {            e.printStackTrace();        }          return conn;    }     //关闭    public static void close(Connection conn, PreparedStatement ps){        try {            if (conn != null){                conn.close();            }            if (ps != null){                ps.close();            }        } catch (SQLException e) {            e.printStackTrace();        }    }    //关闭带resultset    public static void close(Connection conn, PreparedStatement ps , ResultSet rs){        try {            if (conn != null){                conn.close();            }            if (ps != null){                ps.close();            }            if (rs != null){                rs.close();            }        } catch (SQLException e) {            e.printStackTrace();        }    }}

  1.3 测试

        我们来测试一下上面的代码

        这里有一张order表,里面有初始数据:

                java中如何实现JDBC增删改查操作

         然后我们通过上面提供的方法给他增加一条数据:

public class Test {    public static void main(String[] args) {        Operation operation = new Operation();        String insertSql = "INSERT INTO `order`(order_id,order_name,order_date) VALUES (?,?,?)";        boolean b = operation.updateInfo(insertSql, 3, "CC", new Date(12312132));        if (!b){            System.out.println("操作成功!");        }else {            System.out.println("操作失败!");        }    }}

        控制台打印输出:

        java中如何实现JDBC增删改查操作

         那么是不是已经插入成功了呢,我们去数据库中看一下:

          我们 SELECT * FROM `order`;

        java中如何实现JDBC增删改查操作

        看来我们确实成功了!所以我们给出的方法还是没有问题。

二、查操作

        接下来我们就是查操作了。

2.1 通用对不同表进行一条数据查询操作

public  <T> T doQuery(Class<T> clazz,String sql,Object...args) {        Connection conn = null;        PreparedStatement ps = null;        ResultSet rs = null;        try {            //1.建立连接            conn = JDBCUtils.getConnection();            //2.预编译sql语句            ps = conn.prepareStatement(sql);            //3.填充占位符            for (int i = 0; i <args.length ; i++) {                ps.setObject(i+1,args[i]);            }            //4.得到结果集ResultSet            rs = ps.executeQuery();            //5.得到结果集元数据            ResultSetMetaData rsdm = rs.getMetaData();             //6.通过rs得到列值,rsdm得到列名和列数            //得到列数            int columnCount = rsdm.getColumnCount();            if (rs.next()){                T t = clazz.getDeclaredConstructor().newInstance();                for (int i = 0; i <columnCount ; i++) {                    //得到列值                    Object columnvalue = rs.getObject(i + 1);                    //得到列的别名                    String columnLabel = rsdm.getColumnLabel(i + 1);                     //通过反射给对象赋值                    Field field = clazz.getDeclaredField(columnLabel);                    //暴力反射                    field.setAccessible(true);                    field.set(t,columnvalue);                }                return t;            }        } catch (Exception e) {            e.printStackTrace();        } finally {            //关闭资源            JDBCUtils.close(conn,ps,rs);        }        return null;    }

        老样子,测试!

public class Test {    public static void main(String[] args) {        Operation operation = new Operation();        String sql = "SELECT order_id orderId,order_name orderName,order_date orderDate FROM `order` WHERE order_id = ?;";        Order order = operation.doQuery(Order.class, sql, 2);        System.out.println(order);    }}

 控制台输出:

        java中如何实现JDBC增删改查操作

2.2 通用对不同表进行多条数据查询操作

public <T> List doQueryMore(Class<T> clazz,String sql,Object...args){        Connection conn = null;        PreparedStatement ps = null;        ResultSet rs = null;        try {            //1.建立连接            conn = JDBCUtils.getConnection();            //2.预编译sql语句            ps = conn.prepareStatement(sql);            //3.填充占位符            for (int i = 0; i <args.length ; i++) {                ps.setObject(i+1,args[i]);            }            //4.得到结果集ResultSet            rs = ps.executeQuery();            //5.得到结果集元数据            ResultSetMetaData rsdm = rs.getMetaData();             //6.通过rs得到列值,rsdm得到列名和列数            //得到列数            int columnCount = rsdm.getColumnCount();            //创建集合            ArrayList<T> list = new ArrayList<>();            while (rs.next()){                T t = clazz.getDeclaredConstructor().newInstance();                for (int i = 0; i <columnCount ; i++) {                    //得到列值                    Object columnvalue = rs.getObject(i + 1);                    //得到列的别名                    String columnLabel = rsdm.getColumnLabel(i + 1);                     //通过反射给对象赋值                    Field field = clazz.getDeclaredField(columnLabel);                    //暴力反射                    field.setAccessible(true);                    field.set(t,columnvalue);                }                list.add(t);            }            return list;        } catch (Exception e) {            e.printStackTrace();        } finally {            //关闭资源            JDBCUtils.close(conn,ps,rs);        }        return null;    }

看完了这篇文章,相信你对“java中如何实现JDBC增删改查操作”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯