2016-07-05 7 views
0
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
    try { 
     String sql =" select * from '"+name+"' "; 
     pst = conn.prepareStatement(sql); 
     rs = pst.executeQuery(); 
     table.setModel(DbUtils.resultSetToTableModel(rs)); 
    } 
    catch(Exception e) { 
     JOptionPane.showMessageDialog(null, e); 
    } 
    finally { 
     try { 
      rs.close(); 
      pst.close(); 
     } 
     catch(Exception e) { 
     } 
    } 
} 

string sql="select * from '"+name+"'"名前テキストフィールドでユーザ入力を使用していますが、エラーが発生しています。しかし、名前の代わりにテーブル名を入力すると、名前のテキストフィールドにテーブル名が表示されますが、表示されません。選択クエリのユーザ入力データベーステーブル名にJTextFieldを使用

+0

名前変数に正しい値が設定されていますか。コンソールで名前の値をデバッグしたり印刷したりできますか? –

+0

'name'の型は' String'か 'JTextField'ですか? –

答えて

0

このように入力フィールドの値を名前文字列に割り当てます。 jTextField1は使用SELECT文で

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
try { 
    String name= jTextField1.getText(); 
    String sql =" select * from '"+name+"' "; 
    pst = conn.prepareStatement(sql); 
    rs = pst.executeQuery(); 
    table.setModel(DbUtils.resultSetToTableModel(rs)); 
} 
catch(Exception e) { 
    JOptionPane.showMessageDialog(null, e); 
} 
finally { 
    try { 
     rs.close(); 
     pst.close(); 
    } 
    catch(Exception e) { 
    } 
} 
}  
+1

SQLインジェクションに注意してください。 https://xkcd.com/327/ –

+0

'PreparedStatment'sを使用している場合、なぜあなたはパラメータを利用していませんか? –

+0

これはname.getText()として機能します。 – star5

0

..「『+名+』」を名前を保持しているテキストフィールドを意味JTextFieldの値を取得する文字列です。したがって、SQL文を使用して、テキストフィールド値からテーブルをフェッチしてください。

String s1 = jTextField1.getText(); 
    try 
    { 
     Class.forName("org.apache.hive.jdbc.HiveDriver"); 
     Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10000/default","arunachalam", ""); 
     Statement st = con.createStatement(); 

     String sql = "select * from " + s1;     
     int rs = st.executeUpdate(sql); 

     showMessageDialog(null,"Query Executed"); 

    } 
    catch(Exception e) 
    { 
     showMessageDialog(null,e); 
    } 

fromを入力してから文を実行します。あなたのテキストフィールドに使用していた変数名を割り当てると、これは機能します。 コードで使用していた代替クラスドライバと接続ステートメントを使用します。

関連する問題