2016-07-05 44 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意味着持有名字的文本框..

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',爲什麼不使用參數? –

+0

它作爲name.getText() – star5

0

在SELECT語句中使用了「‘+名字+’」是獲得一個JTextField值的字符串。因此,使用以下SQL語句從textfield值中獲取表。

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

之後留下一個空格,然後做聲明。分配你正在使用的文本字段的變量名稱,這將起作用。 使用您在代碼中使用的替代類驅動程序和連接語句。

相關問題