我设计了一个系统,我想让用户首先从一个组合框中选择他想要插入的表格的名称,然后他将输入其余的字段。我的问题是,如何让用户使用SQL语句输入表的名称。我写了下面的内容,但是它不能工作??
try {
Object service = Service_ComboBox.getSelectedItem();
String ref = "0";
String title = title_TextField1.getText();
Object riskRating = riskRating_ComboBox3.getSelectedItem();
Object rootCause = rootCause_ComboBox4.getSelectedItem();
Object impact = impact_ComboBox1.getSelectedItem();
Object likelihood = likelihood_ComboBox2.getSelectedItem();
String efforts = efforts_TextField7.getText();
String finding = finding_TextField9.getText();
String implication = implication_TextArea1.getText();
String recommendation = recommendation_TextArea2.getText();
Connection conn= DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:XE","SYSTEM","*******");
String query = "insert into ? (Service,Ref,Title,Risk_Rating,Root_cause,Impact ,Likelihood,Efforts,Finding,Implication,Recommendation)values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? , ?)";
PreparedStatement myStatment = conn.prepareStatement(query);
myStatment.clearParameters();
myStatment.setString(1, service.toString());
myStatment.setString(2, service.toString());
myStatment.setString(3, ref);
myStatment.setString(4, title);
myStatment.setString(5, riskRating.toString());
myStatment.setString(6, rootCause.toString());
myStatment.setString(7, impact.toString());
myStatment.setString(8, likelihood.toString());
myStatment.setString(9, efforts);
myStatment.setString(10, finding);
myStatment.setString(11, implication);
myStatment.setString(12, recommendation);
boolean myResult = myStatment.execute();
System.out.println("done");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(this, "Information is missing or incorrect! Please Make sure to enter correct information");
Logger.getLogger(Insert_info.class.getName()).log(Level.SEVERE, null, ex);
return;
}
JOptionPane.showMessageDialog(this, "Your information was saved successfully!");发布于 2012-07-19 20:50:34
insert into ?不能对架构对象名称使用绑定变量。原因是,当您准备语句时,数据库需要知道涉及哪些表,并决定使用哪些索引,因此查询SQL需要是已知的(只有数据可以更改)。
因此,如果您想要这样做,您必须使用字符串插值来构造查询(仅对于表名,继续对数据使用绑定变量!)。
String query = "insert into "+ tableName + ....请确保验证此tableName。在您的例子中,可能可以根据有效表名的HashSet进行检查。不要让这成为SQL注入问题。
发布于 2012-07-19 21:20:05
使用下面的sintax:
String query = "insert into " &tablename "bla bla predicates"要避免sql注入,请在数据库中创建角色,并为访问者/用户提供对希望使用的表的访问权限。
或者您可以使用通配符:
创建一个变量tbl_name
String query = "insert into "(select table_name from user_tables where table_name like '%tbl_name%')"<br/>https://stackoverflow.com/questions/11561057
复制相似问题