JdbcTemplate 中有很多的查询方法,整理几个比较常用的方法。
1、queryFor*方法很好用,简单强大。
2、query查询方法中带有回调接口有三个:ResultSetExtractor、RowCallbackHandler、RowMapper 使用ResultSetExtractor时,一般是直接new ResultSetExtractor(),然后在extractData(ResultSet rs)方法中实现自己的内容,最后返回Object结果。 使用RowCallbackHandler时,也是new RowCallbackHandler(),然后在processRow(ResultSet rs)方法中实现自己代码,并且将内容保存在上下文变量中,因为此方法没有返回类型(void) 使用RowMapper时,new RowMapper(), 然后在mapRow(ResultSet rs, int rowNum)实现自己代码,并返回Object结果。
3、ResultSetExtractor一次处理多个结果,而RowCallbackHandler、RowMapper只处理单行结果,具体内容可参照下面的代码,代码都是经过测试的,绝对好使。
@SuppressWarnings("unchecked") public static void main(String[] args) { try { BasicDataSource datasource = new BasicDataSource(); datasource.setDriverClassName("com.mysql.jdbc.Driver"); datasource.setUrl("jdbc:mysql://127.0.0.1:3306/xzx"); datasource.setUsername("root"); datasource.setPassword("root"); JdbcTemplate jt = new JdbcTemplate(datasource); // query1(jt); // query2(jt); // query3(jt); // query4(jt); // query5(jt); // query6(jt); // query7(jt); // query8(jt); query9(jt); } catch (Exception e) { e.printStackTrace(); } } @SuppressWarnings("unchecked") private static void query9(JdbcTemplate jt) { List list1=new ArrayList(); String sql = "select * from userinfo where id<?"; list1=jt.execute(sql,new PreparedStatementCallback() { public Object doInPreparedStatement(PreparedStatement ps) throws SQLException, DataAccessException { ps.setInt(1, 20); ResultSet rs=ps.executeQuery(); Userinfo userinfo = new Userinfo(); List list=new ArrayList(); while (rs.next()) { userinfo.setId(rs.getInt("id")); userinfo.setUsername(rs.getString("username")); userinfo.setPassword(rs.getString("password")); userinfo.setCrateDate(rs.getDate("createDate")); list.add(userinfo); } return list; } }); System.out.println(list1.size()); } /** * queryForInt(String sql) * * queryFor**(String sql) * * @param jt */ private static void query8(JdbcTemplate jt) { int i = jt.queryForInt("select count(*) from userinfo"); System.out.println(i); } /** * query(String sql, PreparedStatementSetter pss, ResultSetExtractor<T> rse) * * query(String sql, PreparedStatementSetter pss, RowCallbackHandler rch) * * query(String sql, PreparedStatementSetter pss, RowMapper<T> rowMapper) * * @param jt */ @SuppressWarnings("unchecked") private static void query7(JdbcTemplate jt) { List list1 = new ArrayList(); String sql = "select * from userinfo where id<? and username=?"; list1 = jt.query(sql, new PreparedStatementSetter() { public void setValues(PreparedStatement ps) throws SQLException { ps.setInt(1, 20); ps.setString(2, "user4"); } }, new ResultSetExtractor() { public Object extractData(ResultSet rs) throws SQLException, DataAccessException { List list = new ArrayList(); while (rs.next()) { Userinfo u = new Userinfo(); u.setId(rs.getInt("id")); u.setUsername(rs.getString("username")); u.setPassword(rs.getString("password")); u.setCrateDate(rs.getDate("createDate")); list.add(u); } return list; } }); System.out.println(list1.size()); } /** * query(String sql, Object[] args, ResultSetExtractor<T> rse) query(String * sql, Object[] args, int[] argTypes, ResultSetExtractor<T> rse) * * query(String sql, Object[] args, RowMapper<T> rowMapper) query(String * sql, Object[] args, int[] argTypes, RowMapper<T> rowMapper) * * query(String sql, Object[] args, RowCallbackHandler rch) query(String * sql, Object[] args, int[] argTypes, RowCallbackHandler rch) * * argTypes:java.sql.Type中有定义 * * @param jt */ @SuppressWarnings("unchecked") private static void query6(JdbcTemplate jt) { List list1 = new ArrayList(); String sql = "select * from userinfo where id<? and username=?"; list1 = jt.query(sql, new Object[] { 15, "user4" }, new ResultSetExtractor() { public Object extractData(ResultSet rs) throws SQLException, DataAccessException { List list = new ArrayList(); while (rs.next()) {
Userinfo u = new Userinfo(); u.setId(rs.getInt("id")); u.setUsername(rs.getString("username")); u.setPassword(rs.getString("password")); u.setCrateDate(rs.getDate("createDate")); list.add(u); } return list; } }); System.out.println(list1.size()); } /** * query(final String sql, final ResultSetExtractor<T> rse) query(String * sql, RowCallbackHandler rch) query(String sql, RowMapper<T> rowMapper) * * @param jt */ @SuppressWarnings("unchecked") private static void query5(JdbcTemplate jt) { List list1 = new ArrayList(); String sql = "select * from userinfo where id<20"; list1 = jt.query(sql, new ResultSetExtractor() { public Object extractData(ResultSet rs) throws SQLException, DataAccessException { List list = new ArrayList(); while (rs.next()) { Userinfo u = new Userinfo(); u.setId(rs.getInt("id")); u.setUsername(rs.getString("username")); u.setPassword(rs.getString("password")); u.setCrateDate(rs.getDate("createDate")); list.add(u); } return list; } }); System.out.println(((Userinfo) list1.get(4)).getUsername()); } /** * query(PreparedStatementCreator psc, RowMapper<T> rowMapper) 多次调用RowMapper * * @param jt */ static int i = 0; static int j = 0; static int k = 0; @SuppressWarnings("unchecked") public static void query4(JdbcTemplate jt) { List list1 = new ArrayList(); list1 = jt.query(new PreparedStatementCreator() { public PreparedStatement createPreparedStatement(Connection con) throws SQLException { System.out.println("i=" + (++i)); String sql = "select * from userinfo where id<?"; PreparedStatement ps = con.prepareStatement(sql); ps.setInt(1, 20); return ps; } }, new RowMapper() { public Object mapRow(ResultSet rs, int rowNum) throws SQLException { System.out.println("j=" + (++j)); Userinfo u = new Userinfo(); u.setId(rs.getInt("id")); u.setUsername(rs.getString("username")); u.setPassword(rs.getString("password")); u.setCrateDate(rs.getDate("createDate")); return u; } }); System.out.println(list1.size()); } /** * query(PreparedStatementCreator psc, RowCallbackHandler rch) * * @param jt */ @SuppressWarnings("unchecked") public static void query3(JdbcTemplate jt) { final List list = new ArrayList(); jt.query(new PreparedStatementCreator() { public PreparedStatement createPreparedStatement(Connection con) throws SQLException { System.out.println("i=" + (++i)); String sql = "select * from userinfo where id<?"; PreparedStatement ps = con.prepareStatement(sql); ps.setInt(1, 20); return ps; } }, new RowCallbackHandler() { public void processRow(ResultSet rs) throws SQLException { System.out.println("j=" + (++j)); while (rs.next()) { Userinfo u = new Userinfo(); u.setId(rs.getInt("id")); u.setUsername(rs.getString("username")); u.setPassword(rs.getString("password")); u.setCrateDate(rs.getDate("createDate")); list.add(u); } } }); System.out.println(list.size()); } /** * query(PreparedStatementCreator psc, ResultSetExtractor<T> rse) * * @param jt */ @SuppressWarnings("unchecked") public static void query2(JdbcTemplate jt) { Userinfo u = new Userinfo(); u = jt.query(new PreparedStatementCreator() { public PreparedStatement createPreparedStatement(Connection con) throws SQLException { System.out.println("i=" + (++i)); String sql = "select * from userinfo where id=?"; PreparedStatement ps = con.prepareStatement(sql); ps.setInt(1, 20000); return ps; } }, new ResultSetExtractor() { public Object extractData(ResultSet rs) throws SQLException, DataAccessException { System.out.println("j=" + (++j)); Userinfo userinfo = new Userinfo(); while (rs.next()) { userinfo.setId(rs.getInt("id")); userinfo.setUsername(rs.getString("username")); userinfo.setPassword(rs.getString("password")); userinfo.setCrateDate(rs.getDate("createDate")); } return userinfo; } }); System.out.println(u.getCrateDate()); } /** * query( PreparedStatementCreator psc, final PreparedStatementSetter pss, * final ResultSetExtractor<T> rse) * * @param jt */ @SuppressWarnings("unchecked") public static void query1(JdbcTemplate jt) { Userinfo u = new Userinfo(); u = jt.query(new PreparedStatementCreator() { public PreparedStatement createPreparedStatement(Connection con) throws SQLException { System.out.println("i=" + (++i)); String sql = "select * from userinfo where id=?"; return con.prepareStatement(sql); } }, new PreparedStatementSetter() { public void setValues(PreparedStatement ps) throws SQLException {
System.out.println("j=" + (++j)); ps.setInt(1, 20000); } }, new ResultSetExtractor() { public Object extractData(ResultSet rs) throws SQLException, DataAccessException { System.out.println("k=" + (++k)); Userinfo userinfo = new Userinfo(); while (rs.next()) { userinfo.setId(rs.getInt("id")); userinfo.setUsername(rs.getString("username")); userinfo.setPassword(rs.getString("password")); userinfo.setCrateDate(rs.getDate("createDate")); } return userinfo; } }); System.out.println(u.getCrateDate()); }
"".indexOf()的作用,以及结果标识 1、0、-1
"".indexOf()的作用,以及结果标识 1(不限于1,而是发现的字符的起始位,从0开始)、0、-1
在实际编程的过程中,总是无法避免和String类型的反参打交道,但是这个String类型的数据并不是中止,而是需要做进一步的转化比如转化为xml对象或者json类型的对象。
但是返回的String类型的字符串有时并不是我们预想的字符串,或许是网络故障,或者是我们的请求没有获取正确的响应而返回了一个表示错误信息的String类型的串。
在这种情况下,我们就需要先对结果做出判断。
先提出几个实例:
·String str1=“{I am ok:1234}”.indexOf("123");
str1=9;
·String str1=“1234}”.indexOf("123");
str1=0;
·String str2=“{I am ok:1234}”.indexOf("");
str1=0;
·String str3=“{I am ok:1234}”.indexOf("12345");
str1=-1;
上面的3个结果说明,对字符串使用indexOf()方法可以有3种使用效果
第一种是被比较的字符串具有比较的字符串,所得结果返回为 1或者0,这是返回的存在这个字符串的起始位置第0位开始,或者第1位开始出现这个字符串
第二种是和空字符串比较,返回的是0,如果使用空字符串和空字符串做比较,返回的还是0
第三种是和一个不存在的字符串做比较,返回的是-1
如果说,我们已经可以预知两种结果中的特殊标志位,就是返回的string中要么有 "right",要么就是"false",这样的字段,那可显然,可以直接让string的串和right来一个indexOf("right"),如果返回为0或者大于0的整数,说明返回的是正确的结果,否则,也就是等于 -1 时,就是错误的string串了,当然,使用表示"false"字段的比较也是可以的。