当前位置:Gxlcms > 数据库问题 > jdbcTemplate学习(一)

jdbcTemplate学习(一)

时间:2021-07-01 10:21:17 帮助过:29人阅读

(一)增加操作:

1)增加、更新、删除一条数据(sql固定,不需要参数):

    (a) int update(final String sql)

      其中sql参数为需要传入的插入sql语句。

    (b)int update(PreparedStatementCreator psc)

    public void test() {
        jdbcTemplate.update(new PreparedStatementCreator() {
            
            @Override
            public PreparedStatement createPreparedStatement(Connection conn)
                    throws SQLException {
                return conn.prepareStatement("insert into test(name) values(‘name1‘)");   
            }
        });
    }

     (c)如果需要返回新插入数据的主键,采用如下方法(使用KeyHolder keyholder=new GeneratedKeyHolder();获得主键,jdbcTemplate和NamedParameterJdbcTemplate都可以通过此方法获得主键):

       int update(PreparedStatementCreator psc, final KeyHolder generatedKeyHolder)

public void test() {
        KeyHolder keyHolder = new GeneratedKeyHolder(); 
        jdbcTemplate.update(new PreparedStatementCreator() {
            
            @Override
            public PreparedStatement createPreparedStatement(Connection conn)
                    throws SQLException {
                
                return conn.prepareStatement("insert into test(name) values(‘name1‘)");  
                 
            }
        },keyHolder);
        int i = keyHolder.getKey().intValue();//这就是刚插入的数据的主键
    }

2)增加、更新、删除一条数据(sql需要注入参数填充‘?’):

  (a)int update(String sql, PreparedStatementSetter pss)

public void test() {
        String sql = "insert into test(name) values (?)";
        //返回的是更新的行数
        int count = jdbcTemplate.update(sql, new PreparedStatementSetter(){

            @Override
            public void setValues(PreparedStatement pstmt)
                    throws SQLException {
                pstmt.setObject(1, "name4"); 
            }
        });
    }

      (b)int update(String sql, Object[] args, int[] argTypes)

其中参数含义:   sql:预处理sql语句; args:sql需要注入的参数; argTypes:需要注入的sql参数的JDBC类型(java.sql.Types中来获取类型的常量);

    public void test() {
        String sql = "insert into test(name,age,create_date) values (?,?,?)";
        Date now = new Date(System.currentTimeMillis());
        //返回的是更新的行数
        int count = jdbcTemplate.update(sql, new Object[]{"小明",14,now}, new int[]{Types.VARCHAR,Types.INTEGER,Types.DATE});
    }

     (c)int update(String sql, Object... args)

其实内部还是调用方法a实现的,JdbcTemplate提供这种更简单的方式“update(String sql, Object... args)”来实现设值,所以只要当使用该种方式不满足需求时才应使用PreparedStatementSetter(上面方法a)。

public void test() {
        String sql = "insert into test(name,age,create_date) values (?,?,?)";
        Date now = new Date(System.currentTimeMillis());
        //返回的是更新的行数
        int count = jdbcTemplate.update(sql, "小明", 14, now);
    }
public void test() {
        String sql = "insert into test(name,age,create_date) values (?,?,?)";
        Date now = new Date(System.currentTimeMillis());
        //返回的是更新的行数
        int count = jdbcTemplate.update(sql, new Object[]{"小明",14,now});
    }

这两种实际上调用的都是该方法,由此可见Object...args实际上就是可变的数组,而数组长度是固定的,必须先定义一个数组,而Object...args在传递时参数可以任意,所以也可以传递一个固定的Object数组。

    (d)int update(PreparedStatementCreator psc)

使用该方法可以自己使用原始jdbc方式给预编译sql注入参数,来进行增加、删除、更新操作:

 

jdbcTemplate学习(一)

标签:char   turn   详细   pst   设计   extractor   ack   行数据   更新   

人气教程排行