间接实现动态传入表名

来源:互联网 发布:qq文件恢复软件 编辑:程序博客网 时间:2024/05/16 07:43

问题是这样,想实现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替换之后,就可以将表名作为参数,实现对不同表的批量操作了。


0 0