用JDBC操作数据库
"select *from tableName"
"tableName" 有什么办法用参数法设置 ,不要用组串的方法;相当于用 "PreparedStatement"对象设置参数一样;
例如1:
String sql="select *from jobs where id=?";
PreparedStatement pre=con.PrepareStatement(sql);
pre.setInt(1,5);例如2:
String sql="select *from ?";
PreparedStatement pre=con.PrepareStatement(sql);
pre.setInt(1,5);例如2:是错误的写法,
有什么办法达到 例如2:这种效果,不要用组串的方法;

解决方案 »

  1.   

    你是可以類似PrepareStatement來取代?的
    在Java中String 包里面有方法replace來取代某個字符的,你可以用replaceFrist來取代tableName的?
      

  2.   

    你要的是类似asp.net里的dataset那样的东东吧,现有的JDBC应该没有这个功能,自己封装一个吧,费不了多少时间。
      

  3.   

    楼主自己写一个继承自PreparedStatement这个类的子类,然后写一个添加这样功能的函数把字串中 ?
    替换为下面要设置的字串。
    仅仅提供思路,不知道行否,呵呵
      

  4.   

    我不知道你具体要完成的是什么功能,但是我想至少可以有两种解决方案:
    A  在方法中通过传参数方法实现
    B  可以写一个存储过程commit immediate的方法应该也可以第一种方法最简单..
      

  5.   

    这只是代码的一部分,用的是rs.getMetaData()得到原数据,然后就可以得到传进来的表的列名,列数等参数,然后就可以编历出来了!参考参考吧!
    con = JdbcUtilV1.getConnection();
       if(con!=null){
          String sql = "select * from "+args[0];
      ps = con.prepareStatement(sql);
      rs = ps.executeQuery();
      StringBuffer sb = new StringBuffer();
          md = rs.getMetaData();
      int cols = md.getColumnCount();
      for(int i=0;i<cols;i++){
         sb.append(md.getColumnName(i+1)+"  ");
     sb.append(md.getColumnType(i+1)+"  ");
     sb.append(md.getColumnTypeName(i+1)+"\n");
      }
      //sb.append("\n");
      while(rs.next()){
          for(int i=0;i<cols;i++){
         sb.append(rs.getString(i+1)+"  ");
      }
      sb.append("\n");
      }
      System.out.print(sb.toString());
       }
      

  6.   

    protected Iterator findTagIndex(String tag) throws BadTagException {
    Object tagList = tagMap.get(tag);
    if (tagList == null) {
    throw new BadTagException("Tag[" + tag + "] Not Found!", tag,
    SQLStatement);
    }
    return ((List) tagList).iterator();
    }public void setString(String tag, String value) throws SQLException {
    SQLParameters.put(tag, String.valueOf(value));
    for (Iterator it = findTagIndex(tag); it.hasNext();) {
    int parameterIndex = ((Number) it.next()).intValue();
    preparedStatement.setString(parameterIndex, value);
    }
    }
    虽然不知道你在问什么(本人理解能力差),但是还是给一个参考答案
    封装上面两个方法试试。(友情提示:记得结贴)
      

  7.   

    最简单的
    public c (String s )
    {
    .......................省略
    String s = s ; 
    String sql="select *from "+s; 
    PreparedStatement pre=con.PrepareStatement(sql); 
    pre.setInt(1,5); 
    ...........省略
    }
    这样简单不?
    public c (String s )这就是你哪个查询方法
      

  8.   

    封装一个-----配置.xml文件   想怎么玩就怎么玩就看你有没有那么大的需求了
      

  9.   

    另外javabean 封装 tablename
    然后在串起试试
      

  10.   

    这个还是要看需求怎么样,自己封装类或者继承PrepareStatement什么都行,只是看哪个方法相对你的需求成本低一些
      

  11.   

    例如2:
    String sql="select *from ?";
    PreparedStatement pre=con.PrepareStatement(sql);
    pre.setInt(1,5); 

    感觉这样做没有什么意义.就算这部分可以复用 
    那下面处理结果集合的时候还是要分开处理的啊
    不懂啊......
      

  12.   

    欢迎加入本人的QQ群,群号5586686,身份认证输入如:JAVA、JSP、STRUTS等都可以,非软件开发人员勿加,谢谢合作!