时间: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 行数据 更新