间接实现动态传入表名

问题是这样,想实现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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值