2016-07-05 42 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); 
    } 

之后留下一个空格,然后做声明。分配你正在使用的文本字段的变量名称,这将起作用。 使用您在代码中使用的替代类驱动程序和连接语句。

相关问题