Java 将新数据插入数据库中的特定表中

Java 将新数据插入数据库中的特定表中,java,sql,oracle,insert,Java,Sql,Oracle,Insert,我设计了一个系统,我希望用户首先从一个组合框中选择要插入的表的名称,然后输入其余字段。。我的问题是,如何让用户使用sql语句输入表名。。我写了以下内容,但不起作用 try { Object service = Service_ComboBox.getSelectedItem(); String ref = "0"; String title = title_TextField1.getText();

我设计了一个系统,我希望用户首先从一个组合框中选择要插入的表的名称,然后输入其余字段。。我的问题是,如何让用户使用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!");
不能对架构对象名称使用绑定变量。原因是,在准备语句时,数据库需要知道涉及哪些表,并决定使用哪些索引,因此需要知道查询SQL,只有数据可以更改

因此,如果要执行此操作,必须使用字符串插值来仅为表名构造查询,继续为数据使用绑定变量

String query = "insert into "+ tableName + ....

确保验证此表名。在您的情况下,可能可以根据一组有效的表名来检查它。不要让这成为SQL注入问题。

使用以下sintax:

String query = "insert into " &tablename "bla bla predicates"
为了避免sql注入,请在数据库中创建角色,并允许访问者/用户访问要使用的表。 或者可以使用通配符: 创建变量tbl_名称

String query = "insert into "(select table_name from user_tables where table_name like '%tbl_name%')"<br/>

-接下来创建一个decision IF并在其中抛出通配符的输出。如果它与您拥有的表匹配,那么ok IF not将使用错误消息处理它

既然所有这些表显然都有相同的结构,为什么它们是单独的表?为什么用户要关心哪个表存储他们的数据?这是一个req。系统的。。我怎样才能将数据插入到它中??一个可行的替代方法是将表名和所有其他参数传递给一个对相应表进行插入的过程,例如,通过传递的表名字符串上的大小写,以便只识别已知的、因此可能有效的表名?这不是一个要求。这是一个实现细节。或者至少应该是这样。我承认,一旦有人建立了一个劣质的数据模型,应用程序的其他部分就必须处理它。我不明白这些话,你能给我更多的细节吗:确保你验证了这个表名。在您的情况下,可能可以根据一组有效的表名来检查它。不要让这成为一个SQL注入问题。SQL语句应该是这样的:字符串查询=插入+服务+服务,参考,标题,风险评级,根本原因,影响,可能性,努力,发现,含义,建议值?;您需要像query=insert-into+tableName这样的代码。确保此表名不是直接用户输入。仔细验证它。阅读SQL注入。这很重要。请你检查一下我的问题好吗??
String query = "insert into "(select table_name from user_tables where table_name like '%tbl_name%')"<br/>