Java 如何从JDBC结果集获取列数?

Java 如何从JDBC结果集获取列数?,java,jdbc,csv,resultset,Java,Jdbc,Csv,Resultset,我正在使用(它是csv文件的JDBC驱动程序)访问csv文件。我不知道csv文件包含多少列。如何获取列数?是否有任何JDBC函数用于此?我在java.sql.ResultSet中找不到任何用于此的方法 为了访问该文件,我使用了与CsvJdbc网站上类似的代码。您可以从以下位置获取列号: 您可以通过代码获得的数据库数量(因为数据库使用PostgreSQL): //加载PostgreSQL的驱动程序 Class.forName(“org.postgresql.Driver”); String url

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


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

您可以从以下位置获取列号:

您可以通过代码获得的数据库数量(因为数据库使用PostgreSQL):

//加载PostgreSQL的驱动程序 Class.forName(“org.postgresql.Driver”); String url=“jdbc:postgresql://localhost/test"; Properties props=新属性(); props.setProperty(“用户”、“mydbuser”); props.setProperty(“密码”、“mydbpass”); Connection conn=DriverManager.getConnection(url、道具); //创建语句 语句stat=conn.createStatement(); //获得结果集 结果集rs=stat.executeQuery(“从我的表格中选择c1、c2、c3、c4、c5”); //从结果集给出元数据 ResultSetMetaData rsmd=rs.getMetaData(); //从元数据对象计算列数 int numOfCols=rsmd.getColumnCount(); 但您可以获得有关列的更多元信息:

for(int i = 1; i <= numOfCols; i++)
{
    System.out.println(rsmd.getColumnName(i));
}

for(int i=1;i在建立连接并执行查询后,请尝试以下操作:

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

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

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));
                }

            }
ResultSetMetaData ResultSetMetaData=res.getMetaData();
int columnCount=resultSetMetaData.getColumnCount();

对于(int i=1;iIt很有兴趣了解CSV JDBC驱动程序及其
ResultSetMetaData
实现如何处理可变长度的CSV记录。例如,如果您指定
SELECT*FROM sample
,并且每行包含不同数量的字段,是否会对迭代的每行重新计算列计数呃?@rhu这很简单。不会的,因为元数据独立于您所在的行。所以可能是找到的最大列数。有人知道吗?
rs.getMetaData()
method是否昂贵?它是否每次调用它时都查询数据库?
rs.getMetaData()
调用可能非常密集;但是一旦您拥有对象
rsmd
,那么在调用元数据对象上的方法时通常不会对数据库进行额外的调用;所有元数据都由getMetaData调用填充。这不应该是rsmd.getColumnName(1)和rsmd.getColumnTypeName(1)吗?我们正在打印“第1列”,不是第二个。
for(int i = 1; i <= numOfCols; i++)
{
    System.out.println(rsmd.getColumnName(i));
}
 ResultSet resultSet;
 int columnCount = resultSet.getMetaData().getColumnCount();
 System.out.println("column count : "+columnCount);
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));
                }

            }