前提・実現したいこと
Localhost内に存在する自身のデータベースの中身を自由に閲覧、編集できる機能(単純に、EclipseのDBViewerのような機能)を作成したい
→中身の構造が分からない(自身はもちろん知っているが、プログラム側には分からない の意)DBから値を取得したい
想定している大まかな流れとしては以下
データベース名からテーブル名を取得、全てのテーブル名をjsp内で表示(formで選択したテーブル名をサーブレットに渡す)
→渡されたテーブル名からカラム名、列数を取得
→ResultSet.getString("カラム名")を列数分取得して回したい
(ここまでで詰まっているため以下は未定)
発生している問題・エラーメッセージ
getString()の引数に変数を入れるとエラーを返されるため、列数分だけ回すことがそもそもできない (今後発生するであろう問題として) 仮に列数分回すことができたとして、取得したレコードをまとまりごとにBean及びListに格納する方法が分からない 追記: テーブル名、カラム名(+列数)の取得自体は済ませており、コード中のtable_nameには選択されたテーブル名が既に入っております。 また、記述外部分でカラム名をListとして持っておりますので、カラム名と列数は取得可能です。 res.getString()を列数回(参照するテーブルによって変わる変数)回す、取得した値をBeanに格納(.setXXXXメソッド)を効率的に扱う方法がお聞きしたいです。
該当のソースコード
Java
1//PreparedStatementにテーブル名を渡し、そのテーブルの全データを取得 2String sql ="select * from ?"; 3 4 try (Connection con = ConnectionManager.getConnection(); 5 PreparedStatement pstmt = con.prepareStatement(sql);) { 6 7 pstmt.setString(1, table_name); 8 ResultSet res = pstmt.executeQuery(); 9 10 while(res.next()) { 11//暫定的にboxに中身を受けとりたい getString()を列数ぶん回したい(while文なので回るが、変数が入らないため同じ値を取得し続けてしまう) 12 String box = res.getString("ここに何を入れれば良いのでしょう"); 13//以下、略
試したこと
getString()の引数に変数を入れた(エラー)
単純にgetString(数字)を1~100まで(自身の作成したDBで想定しうる列数を大きく超えた数)書いた
→SQLException(数字が列数を超えた時点でカラムが存在しないエラー
試しにSQLExceptionをcatchした→当然何も出力されない
Beanに現在DBに存在する全てのカラムについてのgetter,setterを作成 if文で分岐しようとした
→ある程度までの動作はするがとんでもなく冗長、かつDBにカラムが追加されたらそれに対応できない

回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/21 07:12