如题:表名是由前缀detail和天数动态组装起来的,比如今天就是detail06,明天就是detail07,这样的sql使用prepareStatement预编译有效吗?怎么使用?
sql = "select sms_mt_send_detail"+day+" detail inner join ....  where detail.user_mobile = ? and ...."

解决方案 »

  1.   

    你是不已经写了吗?那你就
    select * from ? where a = ?传参数的时候把表名和值传进去。。
      

  2.   


    我改成这样,但是报错 说是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);
      

  3.   

    from ? detail这是什么?表名不能有空格的,,,,
    这样写
    表1,表2你少了一个逗号。
      

  4.   

    我在oralce 里 这么写select * from &param param = t_test  没有单引号哦。。这张表的数据就查出来啊。。
      

  5.   

    你在程序里边定义tablename的类型的时候,不要把它定义成String型,定义成Object型
    String 会带单引号的
    楼主这么冲动结了贴
    艾。。