如何使用表名作为变量向sqlite数据库插入数据

3
我想要将数据插入到我的sqlite数据库中,但需要使用变量作为表名,以便将数据插入到正确的表中。
try {

            Random rand = new Random();
            uniqueID = rand.nextInt(9998) + 1; //Generates a random number from 1 - 9999 inclusively
            String dateStart = day1.getText() + "/" + month1.getText() + "/" + year1.getText();
            String dateEnd = day2.getText() + "/" + month2.getText() + "/" + year2.getText();
            String projectN = projectName.getText();
            String addr = address.getText();
            //String engineerN = engineerName.getText();
            //String engineerP = engineerPassword.getText();

            Class.forName("org.sqlite.JDBC");
            conn2.setAutoCommit(false);


            PreparedStatement ps = conn2.prepareStatement("insert into "My table name" (uniqueid,name,address,startingdate,estcompletion) values(?,?,?,?,?,?)");
            ps.setInt(1, uniqueID);
            ps.setString(2, projectN);
            ps.setString(3, addr);
            ps.setString(4, dateStart);
            ps.setString(5, dateEnd);
            //ps.setString(6, engineerN);

            ps.execute();

            ps.close();
            conn2.commit();
            conn2.close();
           } 
    catch ( Exception e1) {
             System.err.println( e1.getClass().getName() + ": " + e1.getMessage() );
             System.exit(0);
           }
        }
    }
public String JJI() {
    return projectName.getText();

}
}

在预处理语句中,“My table name”是我想要从projectName.getText()获取表名的位置。用户在另一个类中输入projectName.getText()。

谢谢您的帮助!
1个回答

1
  1. 将表名称存储在字符串变量中(随意命名):String tableName = "users";

  2. 创建一个查询变量,包含您的SQL查询:

String query = "insert into '" + tableName + "' (uniqueid,name,address,startingdate,estcompletion) values(?,?,?,?,?,?)";

  1. 如果您想要插入变量,请像您在代码中所做的那样,用您的变量名称替换“?”:

    ps.setInt(1, uniqueID); ps.setString(2, projectN); ps.setString(3, addr); ps.setString(4, dateStart); ps.setString(5, dateEnd);

  2. 执行查询:

PreparedStatement ps = conn2.prepareStatement(query); ps.execute();


你的第三点(将值连接到查询中)是极其不好的形式,它会鼓励 SQL 注入。在这方面,原始解决方案已经是正确的。 - Mark Rotteveel
@MarkRotteveel,您说得非常正确,我道歉了。已经编辑过了。 - moffeltje
@SkibRs请查看对Mark强有力论点的反应所做出的更新答案。 - moffeltje

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接