Javaを介してSQLデータベースから列名を取得しています。 ResultSet
から列名を取得できることも知っています。だから私はこのSQLクエリを持っています
select column_name from information_schema.columns where table_name='suppliers'
問題は、ResultSet
から列名を取得する方法がわからないことです。私のコードは
public void getAllColumnNames() throws Exception{
String sql = "SELECT column_name from information_schema.columns where table_name='suppliers'";
PreparedStatement ps = connection.prepareStatement(sql);
ResultSet rs = ps.executeQuery(sql);
// extract values from rs
}
ResultSet resultSet = statement.executeQuery("SELECT * from foo");
ResultSetMetaData rsmd = resultSet.getMetaData();
int columnsNumber = rsmd.getColumnCount();
while (resultSet.next()) {
for (int i = 1; i <= columnsNumber; i++) {
if (i > 1) System.out.print(", ");
String columnValue = resultSet.getString(i);
System.out.print(columnValue + " " + rsmd.getColumnName(i));
}
System.out.println("");
}
1)PreparedStatement
の代わりにStatement
を使用します
2)ResultSet
でクエリを実行した後、rs.getString()
を使用して値を抽出します。
Statement st=cn.createStatement();
ResultSet rs=st.executeQuery(sql);
while(rs.next())
{
rs.getString(1); //or rs.getString("column name");
}
さらに使用する
rs.getString(1);
rs.getInt(2);
1、2はテーブルの列番号で、coloumnのデータ型ごとにintまたはstringを設定します
ドキュメント をご覧ください。次の間違いを犯しました。まず、ps.executeQuery()
にはパラメーターがありません。代わりに、SQLクエリをそれに渡しました。
第二に、準備されたステートメントに関して、?
記号は、パラメーターを渡す場合に使用します。後でそれを使用してバインドします
setXXX(index, value)
ここで、xxxはデータ型を表します。
しようとしていることのために、PreparedStatement
の代わりにStatement
を使用できます。あなたのコードは
String sql = "SELECT column_name from information_schema.columns where table_name='suppliers';";
Statement s = connection.createStatement();
ResultSet rs = s.executeQuery(sql);
お役に立てれば。