动态表名组装的sql,还能预编译吗?

夏末冬初 2012-12-06 01:39:21
如题:表名是由前缀detail和天数动态组装起来的,比如今天就是detail06,明天就是detail07,这样的sql使用prepareStatement预编译有效吗?怎么使用?


sql = "select sms_mt_send_detail"+day+" detail inner join .... where detail.user_mobile = ? and ...."
...全文
256 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
izj 2012-12-06
  • 打赏
  • 举报
回复
你在程序里边定义tablename的类型的时候,不要把它定义成String型,定义成Object型。。。 String 会带单引号的。。。 楼主这么冲动结了贴。。。 艾。。
izj 2012-12-06
  • 打赏
  • 举报
回复
我在oralce 里 这么写 select * from ¶m param = t_test 没有单引号哦。。 这张表的数据就查出来啊。。
izj 2012-12-06
  • 打赏
  • 举报
回复
哦,我知道了。你传进去的表名时带'' 单引号的。。你把单引号去掉。。
夏末冬初 2012-12-06
  • 打赏
  • 举报
回复
这个是表的别名
izj 2012-12-06
  • 打赏
  • 举报
回复
from ? detail
这是什么?表名不能有空格的,,,, 这样写 表1,表2 你少了一个逗号。。。。
夏末冬初 2012-12-06
  • 打赏
  • 举报
回复
引用 1 楼 New_sara 的回复:
你是不已经写了吗? 那你就 select * from ? where a = ? 传参数的时候把表名和值传进去。。
我改成这样,但是报错 说是invalid table name,检查了一下,tableName值没问题

				sql = "select detail.create_time,detail.send_time,detail.user_mobile,sms.message_content,detail.sender_biz_code,detail.errorcode,detail.ismg_status,detail.rpt_time from ? detail "
					 	+" inner join sms_mt_send sms on detail.mt_send_id = sms.mt_send_id "
					 	+" where detail.user_mobile = ? and to_char(detail.create_time,'yyyy-mm-dd')=? order by detail.mt_send_detail_id desc";
				
				System.out.println(sql);
				stmt=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
				stmt.setString(1, tableName);
				stmt.setString(2, user_mobile);
				stmt.setString(3, toDate);
izj 2012-12-06
  • 打赏
  • 举报
回复
你是不已经写了吗? 那你就 select * from ? where a = ? 传参数的时候把表名和值传进去。。

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧