如何从JDBC ResultSet中获取列数?

Jon*_*nas 85 java csv jdbc resultset

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

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

Rom*_*man 235

您可以从ResultSetMetaData获取列号:

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

int columnsNumber = rsmd.getColumnCount();
Run Code Online (Sandbox Code Playgroud)

  • 了解 CSV JDBC 驱动程序及其“ResultSetMetaData”实现如何处理可变长度 CSV 记录将会很有趣。例如,如果您指定“SELECT * FROM Sample”并且每行包含不同数量的字段,那么是否会为迭代的每行重新评估列计数? (2认同)

小智 7

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(2));  
System.out.println("Column Type Name of 1st column: "+rsmd.getColumnTypeName(2)); 
Run Code Online (Sandbox Code Playgroud)

  • 那不应该是 rsmd.getColumnName(1) 和 rsmd.getColumnTypeName(1) 吗?我们正在打印“第一列”,而不是第二列。 (2认同)

1ac*_*ac0 5

您可以使用代码获得的结果集中数(因为DB使用PostgreSQL):

//load the driver for PostgreSQL
Class.forName("org.postgresql.Driver");

String url = "jdbc:postgresql://localhost/test";
Properties props = new Properties();
props.setProperty("user","mydbuser");
props.setProperty("password","mydbpass");
Connection conn = DriverManager.getConnection(url, props);

//create statement
Statement stat = conn.createStatement();

//obtain a result set
ResultSet rs = stat.executeQuery("SELECT c1, c2, c3, c4, c5 FROM MY_TABLE");

//from result set give metadata
ResultSetMetaData rsmd = rs.getMetaData();

//columns count from metadata object
int numOfCols = rsmd.getColumnCount();

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

for(int i = 1; i <= numOfCols; i++)
{
    System.out.println(rsmd.getColumnName(i));
}
Run Code Online (Sandbox Code Playgroud)

至少但并非最不重要的是,您可以获得一些信息,不仅仅是关于表格而且关于数据库,如何做到这一点你可以在这里这里找到.