javajdbc实现增删改查(java中jdbc预处理更新语句)

技术java中如何实现JDBC增删改查操作小编给大家分享一下java中如何实现JDBC增删改查操作,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 我们先看一遍步骤: 这里不推荐使用Stat

边肖将与您分享如何在java中实现JDBC的添加、删除和修改。希望大家看完这篇文章后有所收获。我们一起讨论一下吧!

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

让我们先看看步骤:

这里不建议使用语句,原因有二:

1.有一个字符串拼写操作,很繁琐。

2.存在sql注入问题。

我们应该用谁来代替陈述?

00-1010操作前,先解决以上问题。我们用PreparedStatement代替陈述。

00-1010您可以通过调用Connection对象的preparedStatement(String sql)方法来获取PreparedStatement对象。

PreparedStatement接口是语句的子接口,表示预编译的SQL语句。

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

优点:

解决字符串拼串问题,防止sql注入提高了绩效。

一、增删改操作

这里是对不同表的一般的增加、删除和修改操作。直接拿去用就行了。

//增加、删除、修改的一般操作

publicbooleaupdateinfo(Stringsql,Object.args){ 0

Connectionconn=null

PreparedStatementps=null

booleanb=true

尝试{

//1.建立联系

conn=jdbcutils . GetConnection();

//2.预编译sql语句

PS=conn . PrepareStatement(SQL);

//3.填写占位符

for(inti=0;iargs.lengthI){ 0

sp;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增删改查操作”有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/148254.html

(0)

相关推荐

  • 好看的小黄片,这什么软件做的小黄鸭子

    技术好看的小黄片,这什么软件做的小黄鸭子材料鸭子半只核桃适量卤料包好看的小黄片:八角3个桂皮一段草果1个花椒适量桂叶5片或者月桂叶1干辣椒3个姜一块大葱糖老抽生抽料酒做法
    1鸭子洗净,用盐和料酒腌1个小时,或者用红糟和盐

    生活 2021年10月25日
  • 分析sqlserver2008跨数据库事务测试

    技术分析sqlserver2008跨数据库事务测试本篇内容介绍了“分析sqlserver2008跨数据库事务测试”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情

    攻略 2021年11月5日
  • Python编程为什么不使用print调试代码了

    技术Python编程为什么不使用print调试代码了这篇文章主要介绍“Python编程为什么不使用print调试代码了”,在日常操作中,相信很多人在Python编程为什么不使用print调试代码了问题上存在疑惑,小编查阅

    攻略 2021年10月25日
  • 印第安人灭绝了吗,屠杀印第安人的刽子手是谁

    技术印第安人灭绝了吗,屠杀印第安人的刽子手是谁印第安人是美洲大陆的原住民,也可以称为土著,在航海时代被发现以后,他们的逍遥日子发生了改变,现在的北美印第安人已经很稀少,是原来人口的一个零头而已,印第安人的美洲大陆,在历史

    生活 2021年10月31日
  • Linux DRM内核模块怎么定义

    技术Linux DRM内核模块怎么定义本篇内容主要讲解“Linux DRM内核模块怎么定义”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux DRM内核模块怎么定义”吧

    攻略 2021年11月23日
  • C++中怎么创建CryptoCurrency类

    技术C++中怎么创建CryptoCurrency类本篇内容主要讲解“C++中怎么创建CryptoCurrency类”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中怎么创

    攻略 2021年11月30日