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"字段的比較也是可以的。
