表名不确定,字段也就不确定

解决方案 »

  1.   

    假设你传入表名时用的参数名称是tableName
    你去拼一条这样的SQL语句:
    String sql = "select * from " + tableName
    然后执行它,你会得到一个ResultSet,假如叫rs
    通过以下这条语句得到结果集的元数据:
    ResultSetMetaData rsmd = rs.getMetaData();
    现在,你可以
    1、使用 rsmd.getColumnCount() 返回此 ResultSet 对象中的列数。
    2、使用 rsmd.getColumnName(int column) 返回指定列的列名
    换句话说,你可以得到你需要的列名然后在循环中,根据查询出来的数据,生成一个XML文档。形如:
    <tableName>
      <record>
        <column_1>colunm1 value</column_1>
        <column_2>colunm1 value</column_2>
        ...
        <column_x>colunm1 value</column_x>
      <record>
      <record>
        <column_1>colunm1 value</column_1>
        <column_2>colunm1 value</column_2>
        ...
        <column_x>colunm1 value</column_x>
      <record>
      ...
    </tableName>
     
      

  2.   

    [接1楼]
    如果你不但希望指定表名,还希望指定列名,就设计两个参数tableName及columnList(以逗号分隔的一个字符串,形如:name,age,address)
    然后这样拼SQL:
    String sql = "select " + column + " from " + tableName 或者,用一个String[] column去接收列名,然后再自己拼成一个用逗号分隔的字符串。另,1楼的XML有一点小错,关闭标签忘记加“/”杠了,呵呵。应该是:
    <tableName>
      <record>
        <column_1>colunm1 value </column_1>
        <column_2>colunm1 value </column_2>
        ...
        <column_x>colunm1 value </column_x>
      </record>
      <record>
        <column_1>colunm1 value </column_1>
        <column_2>colunm1 value </column_2>
        ...
        <column_x>colunm1 value </column_x>
      </record>
      ...
    </tableName> 
      

  3.   

    [接2楼]
    因为复制粘贴的关系,“colunm1 value”也忘记改了,呵呵。
    比较罗嗦,希望楼主能明白我的意思。呵呵。
      

  4.   

    //连接数据库类
    import java.sql.*;
    public class DbUtil{  private Connection con;
      private String url;
     
      public DbUtil(String databasName, String userName, String password) {
      con=Connetions(databasName,userName,password);
      }
      
      private Connection Connetions(String databasName, String userName, String password) {
        Connection con = null;
        url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName="+databasName;
        try {
        Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
          con = DriverManager.getConnection(url, userName, password);
        }
        catch (Exception e) {
          System.out.println("" + e);
        }
        return con;
      }  public Statement getQueryStatement(String sql) {
       Statement stmt=null;
       try{
        stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                      ResultSet.CONCUR_UPDATABLE);
       }catch(SQLException ex){
       
       }
       return stmt;
      }
    //关闭连接
      public void close() {
        try {
          if (con != null) {
            con.close();
            con = null;
          }
        }
        catch (Exception e) {
          System.out.println("数据库关闭出错!");
        }
      }
    }
    //GetTableMessage
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.sql.Statement;public class GetTableMessage { public static void main(String str[]) {
    new GetTableMessage().displayTableMessage();
    } //
    private void displayTableMessage(){
         String dataBaseName="wkkesdb";
         String userName="sa";
         String password="sql";
         String sql=null;
        
         Statement stmt=null;
         ResultSetMetaData rsmd = null;
         ResultSet rs;
      
            DbUtil dbUtil=new DbUtil(dataBaseName,userName,password);
            sql="SELECT *FROM userList";
            stmt=dbUtil.getQueryStatement(sql);
            
            String coloumName[];
            String coloumTypeName;
            try{
            rs=stmt.executeQuery(sql);
            rsmd = rs.getMetaData(); // 获取字段的名称
            
            int columnCounts = rsmd.getColumnCount();
            coloumName=new String[columnCounts];
            
            //得到表的字段名与其定义的长度
            for (int i = 1; i <=columnCounts; ++i) {
             coloumName[i-1]=rsmd.getColumnName(i);
             coloumTypeName="->"+rsmd.getColumnTypeName(i)+"("+rsmd.getColumnDisplaySize(i)+")";
             System.out.print(coloumName[i-1]+coloumTypeName+" ");
            }
            System.out.println("");
            System.out.println("--------------------------------------------------------");
            
            //表的内容
            while(rs.next()){
             for(int i=0;i<columnCounts;i++)
             {
               System.out.print(rs.getString(coloumName[i])+"  ");
             }
             System.out.println();
            }
            }catch(SQLException ex){
             System.out.println(ex);
            }finally{
             dbUtil.close();
            }
           
            //查询的结果其它相关信息,查看一下JDK
             
        }
    }