如何用JDBC优雅的写sql查询
/ 默认分类 / 没有评论 / 6浏览现在用JDBC直接写sql查询的人很少了,不过在某些情况下,可能你还是会需要,毕竟用底层写比较灵活。但是你肯定很讨厌一堆getConnection,PreparedStatement的代码。今天我们来探讨一下sql查询的本质。
对你来说,你需要的只是写一条sql语句,并返回结果,当然可能还需要传入一些参数。嗯,所以我们可以定义这样一个函数。
public static List<Map> getData(String sql, Object... params)
接下来就会遇到问题了,sql查询是需要知道参数及返回类型的,怎么办呢?没事,不是可以动态判断类型吗。首先我们处理一下参数传入的问题:
for(int i=0;i<params.length;++i){
Object o=params[i];
if(o instanceof Integer){
stmt.setInt(i+1, (Integer)o);
}else if(o instanceof Double){
stmt.setDouble(i+1, (Double)o);
}else if(o instanceof Long){
stmt.setLong(i+1, (Long)o);
}else if(o instanceof java.util.Date){
java.util.Date date=(java.util.Date)o;
Timestamp d=new Timestamp(date.getTime());
stmt.setTimestamp(i+1, d);
}else if(o instanceof Date){
Date date=(Date)o;
Timestamp d=new Timestamp(date.getTime());
stmt.setTimestamp(i+1, d);
}else{
stmt.setString(i+1, (String)o);
}
}
接下来就是处理返回结果了,这里我们先要把字段名取出来。
ResultSet rs = stmt.executeQuery();
ResultSetMetaData data = rs.getMetaData();
while (rs.next()) {
Map<String, Object>map=new HashMap<>();
for (int i = 1; i <= data.getColumnCount(); i++) {
String columnName = data.getColumnName(i);
// 获得指定列的列值
//int columnType = data.getColumnType(i);
String columnTypeName=data.getColumnTypeName(i);
if(columnTypeName.startsWith("INT")||columnTypeName.startsWith("TINYINT")||columnTypeName.startsWith("SMALLINT")){
map.put(columnName, rs.getInt(i));
}else if(columnTypeName.startsWith("BIGINT")){
map.put(columnName, rs.getLong(i));
}
else if(columnTypeName.startsWith("DECIMAL")||columnTypeName.startsWith("MONEY")){
map.put(columnName, rs.getDouble(i));
} else if(columnTypeName.startsWith("DATETIME")||columnTypeName.startsWith("TIMESTAMP")||columnTypeName.startsWith("DATE")||columnTypeName.startsWith("TIME")){
Timestamp t=rs.getTimestamp(i);
if(t!=null) {
//java.util.Date d = new java.util.Date(t.getTime());
map.put(columnName, t.getTime());//d);
}else{
map.put(columnName, 0L);//null);
}
//map.put(columnName, rs.getLong(i));
}
else{
/*Object o=rs.getObject(i);
if(o==null){
map.put(columnName, null);
}else*/{
map.put(columnName, rs.getString(i));
}
}
}
list.add(map);
map.put("xid",list.size());
}
好了,以上就是关键代码了,完整代码在这里 git.coding.net/guodayang/m…
本文由 melody 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: 2019/02/15 10:55