您可以从 ResultSetMetaData 中获取列数:
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
int columnsNumber = rsmd.getColumnCount();
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()
方法昂贵吗?每次调用它时,它是否会查询数据库? - Fandi Susantors.getMetaData()
调用可能会很耗费资源;但是一旦你拥有了 rsmd
对象,通常在调用元数据对象的方法时不需要再对数据库进行额外的调用;所有的元数据都将通过 getMetaData
调用填充。 - Mark Stewart在使用PostgreSQL数据库时,您可以通过以下代码获取结果集中的列数:
//加载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);
//创建语句 Statement 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));
}
连接建立并执行查询后,请尝试以下操作:
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
实现如何处理可变长度的CSV记录将是很有趣的。例如,如果您指定了SELECT * FROM sample
,并且每行包含不同数量的字段,那么在迭代每行时,列计数是否会重新评估? - rhu