我正在使用CsvJdbc(它是用于csv文件的JDBC驱动程序)来访问csv文件。我不知道csv文件包含多少列。如何获得列数?是否有任何JDBC函数?我在java.sql.ResultSet中找不到任何方法。
为了访问文件,我使用类似于CsvJdbc网站上示例的代码。
Answers:
您可以从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()
法贵吗?它是否在每次调用数据库时都查询数据库?
rs.getMetaData()
呼叫可以被强化; 但是一旦有了对象,rsmd
则在调用元数据对象上的方法时通常不会再对数据库进行其他调用;所有元数据都使用getMetaData调用填充。
您可以通过代码获得的结果集中的列数(因为DB用于PostgreSQL):
//加载PostgreSQL驱动 Class.forName(“ org.postgresql.Driver”); 字符串url =“ jdbc:postgresql:// localhost / test”; 属性props = new Properties(); props.setProperty(“ user”,“ mydbuser”); props.setProperty(“ password”,“ mydbpass”); 连接conn = DriverManager.getConnection(url,props); //创建语句 语句stat = conn.createStatement(); //获取结果集 ResultSet rs = stat.executeQuery(“从MY_TABLE中选择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));
}
建立连接并执行查询后,请尝试以下操作:
ResultSet resultSet;
int columnCount = resultSet.getMetaData().getColumnCount();
System.out.println("column count : "+columnCount);
ResultSetMetaData
实现如何处理可变长度CSV记录将很有趣。例如,如果您指定SELECT * FROM sample
并且每行包含不同数量的字段,那么是否要为迭代的每一行重新评估列数?