问题是这样,想实现select * from ? order by ?通过对?动态设置参数,实现对不同表的查询
直接利用PreparedStatement st = con.prepareStatement(sql);然后执行
会报表名无效的错误
下面是间接实现这样的操作
利用字符串替换的方法
sql = String.format(sql, table);
这样在sql配置文件中就可以把表名对应的位置写为%s,通过format实现替换操作
public static void main(String[] args) throws SQLException {
Connection con = DbUtils.getConnection();
String sql = "select id,jindu,weidu from %s order by ?";
String table = "GT1117CARBANCI";
sql = String.format(sql, table);
System.out.println(sql);
ResultSet rs = DbUtils.executeParameterSql(con, sql,"id");
while(rs.next()){
System.out.println(rs.getString("id"));
}
}
其中用到的设置方法为
public static ResultSet executeParameterSql(Connection con,String sql,Object... para) throws SQLException{
PreparedStatement st = con.prepareStatement(sql);
for(int i = 0 ;i<para.length;i++){
final Object obj = para[i];
String p = obj.toString();
int parameterIndex = i+1;
if(obj.getClass().equals(Integer.class)){
st.setInt(parameterIndex, Integer.parseInt(p));
}else if(obj.getClass().equals(String.class)){
st.setString(parameterIndex, p);
}else{
System.out.println("it is a special datatype:"+obj.getClass());
}
}
ResultSet rs = st.executeQuery();
return rs;
}
通过format替换之后,就可以将表名作为参数,实现对不同表的批量操作了。