JDBC ResultSetから列数を取得する方法は?


92

私はCsvJdbc(csv-filesのJDBCドライバーです)を使用してcsv-fileにアクセスしています。csvファイルに含まれる列の数がわかりません。列の数を取得するにはどうすればよいですか?このためのJDBC関数はありますか?このためのメソッドがjava.sql.ResultSetに見つかりません。

ファイルへのアクセスには、CsvJdbc Webサイトのと同様のコードを使用します。

回答:


250

ResultSetMetaDataから列番号を取得できます。

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

int columnsNumber = rsmd.getColumnCount();

1
CSV JDBCドライバーとそのResultSetMetaData実装が可変長CSVレコードを処理する方法を理解することは興味深いでしょう。たとえば、指定SELECT * FROM sampleし、各行に異なる数のフィールドが含まれている場合、反復された各行の列数が再評価されますか?
rhu

@rhu簡単です。メタデータはどの行にいるかに依存しないため、そうなりません。したがって、おそらくそれは見つかった列の最大数です。
ローン侯爵

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

1
誰か知っていますか?あるrs.getMetaData()方法は、高価な?呼び出されるかどうかのたびにデータベースをクエリしますか?
Fandi Susanto 2017年

rs.getMetaData()呼び出しが集中する可能性が。ただし、オブジェクトを取得するとrsmd、通常、メタデータオブジェクトでメソッドを呼び出すときに、データベースへの追加の呼び出しは行われません。すべてのメタデータにgetMetaData呼び出しが入力されます。
マークスチュワート

2
それはrsmd.getColumnName(1)とrsmd.getColumnTypeName(1)であるべきではありませんか?2列目ではなく、「1列目」を印刷します。
DAB

5

コードで取得できる結果セットの列の数(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( "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));
}

そして、少なくとも大事なことですが、テーブルだけでなくDBについての情報も入手できます。その方法は、ここここにあります


4

接続を確立してクエリを実行した後、これを試してください:

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

-1

これにより、データが列に出力され、最後の列に到達すると新しい行になります。

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

            }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.