如何从 JDBC ResultSet 中获取列数?

Posted

技术标签:

【中文标题】如何从 JDBC ResultSet 中获取列数?【英文标题】:How to get the number of columns from a JDBC ResultSet? 【发布时间】:2011-02-06 13:12:09 【问题描述】:

我正在使用CsvJdbc(它是用于 csv 文件的 JDBC 驱动程序)来访问 csv 文件。我不知道 csv 文件包含多少列。如何获得列数?是否有任何 JDBC 功能?我在 java.sql.ResultSet 中找不到任何方法。

为了访问该文件,我使用类似于 CsvJdbc 网站上的example 的代码。

【问题讨论】:

【参考方案1】:

您可以从ResultSetMetaData获取列号:

Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();

int columnsNumber = rsmd.getColumnCount();

【讨论】:

了解 CSV JDBC 驱动程序及其 ResultSetMetaData 实现如何处理可变长度的 CSV 记录会很有趣。例如如果您指定了SELECT * FROM sample,并且每行包含不同数量的字段,是否会为迭代的每一行重新计算列数? @rhu 这很简单。它不会,因为元数据与您所在的行无关。所以大概是找到的最大列数。【参考方案2】:
PreparedStatement ps=con.prepareStatement("select * from stud");

ResultSet rs=ps.executeQuery();

ResultSetMetaData rsmd=rs.getMetaData();

System.out.println("columns: "+rsmd.getColumnCount());  
System.out.println("Column Name of 1st column: "+rsmd.getColumnName(1));  
System.out.println("Column Type Name of 1st column: "+rsmd.getColumnTypeName(1)); 

【讨论】:

有人知道吗? rs.getMetaData() 方法贵吗?每次调用时是否查询数据库? rs.getMetaData() 调用可能很密集;但是一旦你有了对象rsmd,那么在元数据对象上调用方法时,通常不会对数据库进行额外的调用;所有元数据都使用 getMetaData 调用填充。 不应该是 rsmd.getColumnName(1) 和 rsmd.getColumnTypeName(1) 吗?我们打印的是“第一列”,而不是第二列。【参考方案3】:

您可以通过代码获得columns in the result set 的编号(因为DB 使用的是PostgreSQL):

//加载PostgreSQL驱动 Class.forName("org.postgresql.Driver"); 字符串 url = "jdbc:postgresql://localhost/test"; 属性 props = new Properties(); props.setProperty("user","mydbuser"); props.setProperty("密码","mydbpass"); 连接连接 = DriverManager.getConnection(url, props); //创建语句 语句 stat = conn.createStatement(); //获取结果集 ResultSet rs = stat.executeQuery("SELECT c1, c2, c3, c4, c5 FROM MY_TABLE"); //从结果集中给出元数据 ResultSetMetaData rsmd = rs.getMetaData(); //元数据对象的列数 int numOfCols = rsmd.getColumnCount();

但您可以获得更多关于列的元信息:

for(int i = 1; i <= numOfCols; i++)

    System.out.println(rsmd.getColumnName(i));

至少但并非最不重要的一点是,您不仅可以获得有关 table 的信息,还可以获得有关 DB 的信息,您可以找到 here 和 here 的操作方法。

【讨论】:

【参考方案4】:

建立连接并执行查询后,试试这个:

 ResultSet resultSet;
 int columnCount = resultSet.getMetaData().getColumnCount();
 System.out.println("column count : "+columnCount);

【讨论】:

【参考方案5】:

这将打印列中的数据,并在到达最后一列后进入新行。

ResultSetMetaData resultSetMetaData = res.getMetaData();
int columnCount = resultSetMetaData.getColumnCount();
for(int i =1; i<=columnCount; i++)
                if(!(i==columnCount))

                    System.out.print(res.getString(i)+"\t");
                
                else
                    System.out.println(res.getString(i));
                

            

【讨论】:

以上是关于如何从 JDBC ResultSet 中获取列数?的主要内容,如果未能解决你的问题,请参考以下文章

用JDBC操作MySQL——获取表的大小

oracle 11g resultSet如何获取表名

查找 ResultSet 列数? [复制]

在Java中,如何通过在数据库得到的结果集得到表的列数和行数?

如何从 JSP 页面访问 JDBC ResultSet

从带有空格的 ResultSet 中获取字符串