我的DAO层有这么一个类
public class checkMethod { public static ResultSet select(String TableName){

PreparedStatement pre = null;
ResultSet res = null;
String sql = "select * from ? ";
Connection connection = Dao.getConnectionOracle();
try {
pre.setString(1, TableName);
pre = connection.prepareStatement(sql);

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
res = pre.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return res;
}
我想把表名当做参数传递,实现一个方法能有查询所有表的功能,问是否能实现?如果这种方法不能实现问是否有别的方法能实现,谢谢赐教。

解决方案 »

  1.   

    直接  string sql="select *from "+tablename;不行吗?
      

  2.   

    用 res.next()遍历下  
    然后用 getString()方法输出
      

  3.   

    一个基本上通用的类public List pageQuery(Class c, String sql, Object... p) throws Exception {//第一个参数,在传递时用类名.class,,,Object...p代表的是参数,可传也可不传
    Connection con = getCon();
    PreparedStatement ps = con.prepareStatement(sql);
    if (p != null) {
    for (int i = 0; i < p.length; i++) {
    ps.setObject(i + 1, p[i]);
    }
    }
    ResultSet rs = ps.executeQuery();
    List objs = new ArrayList();
    int cols = rs.getMetaData().getColumnCount();
    while (rs.next()) { Object obj = c.newInstance();
    for (int i = 0; i < cols; i++) {
    Object colValue = rs.getObject(i + 1);
    Object colName = rs.getMetaData().getColumnLabel(i + 1);
    Method[] ms = c.getDeclaredMethods();
    for (Method m : ms) {
    if (m.getName().startsWith("set")
    && m.getName().toUpperCase().endsWith(
    colName.toString().toUpperCase())) {
    m.invoke(obj, new Object[] { colValue });
    } } }
    objs.add(obj);
    }
    rs.close();
    ps.close();
    con.close(); return objs; }
      

  4.   

    个人认为:
    prepareStatement不支持传表名参数!
    这个这能并字符串拉! String sql = "select * from " + tableName;
    就算prepareStaement能支持传表名参数!
    你的代码也是错!
    pre.setString(1, TableName);空指针异常!
      

  5.   

    3楼得通用方法还行,感觉做的是ibatis的工作,但是差很远
      

  6.   

    public class checkMethod { public static ResultSet select(String TableName){ PreparedStatement pre = null; 
    ResultSet res = null; 
    String sql = "select * from  "+TableName; 
    Connection connection = Dao.getConnectionOracle(); 
    try { 
    pre = connection.prepareStatement(sql); } catch (SQLException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 

    try { 
    res = pre.executeQuery(); 
    } catch (SQLException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 

    return res; 
      

  7.   


    public void test(){
    try {
    List<Map<String, String>> list = DbHandle.executeQuery("select table_name from user_tables");
    for(Map<String, String> map : list){
    String table = map.get("TABLE_NAME");
    List datas = DbHandle.executeQuery("select * from "+table);
    }
    System.out.println(list);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }DbHandle是工具类,返回List<Map<String, String>>这样的数据结构,不知道这样是不是LZ需要的~
      

  8.   


    public class checkMethod { public static ResultSet select(String TableName){ Statement stmt = null; 
    ResultSet res = null; 
    String sql = "select * from "+TableName; 
    Connection connection = Dao.getConnectionOracle(); 
    try { 
    stmt = connection.createStatement();
    res = stmt.executeQuery(sql);} catch (SQLException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 

    return res; 
    } 改成这样应该可以~~用那个PreparedStatement把表名当参数真的很别扭~~~
      

  9.   

    ResultSet res = null;
    String sql = "select * from ? ";
    Connection connection = Dao.getConnectionOracle();
    try {
    pre.setString(1, TableName);
    pre = connection.prepareStatement(sql);
    至少你应该倒过来吧,肯定报null异常了。