Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将变量传递到SQL查询中_Java_Mysql_Variables - Fatal编程技术网

Java 如何将变量传递到SQL查询中

Java 如何将变量传递到SQL查询中,java,mysql,variables,Java,Mysql,Variables,我将一个字符串从一个场景传递到另一个场景,这两个场景在JavaFX中使用不同的控制器,并使用该字符串执行sql语句,但出现错误“检查maria DB server对应的手册”。我会记下我的相关代码。任何帮助都将不胜感激。 menu.fxml-->MenuController.java和orderList.fxml-->OrderListController.java FXMLLoader loader = new FXMLLoader(getClass().get

我将一个字符串从一个场景传递到另一个场景,这两个场景在JavaFX中使用不同的控制器,并使用该字符串执行sql语句,但出现错误“检查maria DB server对应的手册”。我会记下我的相关代码。任何帮助都将不胜感激。 menu.fxml-->MenuController.java和orderList.fxml-->OrderListController.java

                FXMLLoader loader = new FXMLLoader(getClass().getResource("orderList.fxml"));
                Parent root = loader.load();
                OrderListController orderListController = loader.getController();
                orderListController.transferMessage(orderRefNo);
                Stage orderListStage = new Stage();
                orderListStage.setScene(new Scene(root));
                orderListStage.show();
顺便说一句,这是我的orderListTableModel

public class orderListTableModel {
    String id, foodName, qty, price;

    public orderListTableModel(String id, String foodName, String qty, String price) {
        this.id = id;
        this.foodName = foodName;
        this.qty = qty;
        this.price = price;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getFoodName() {
        return foodName;
    }

    public void setFoodName(String foodName) {
        this.foodName = foodName;
    }

    public String getQty() {
        return qty;
    }

    public void setQty(String qty) {
        this.qty = qty;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }
}

无法使用PreparedStatement将表名绑定到SQL查询。PreparedStatement用于列名,而不是表名。我知道orderRefNo引用了字符串对象,但在构造查询时,您仍然将其绑定为
SELECT
语句中使用的表

PreparedStatement preparedStatement = connection.prepareStatement("**SELECT * FROM ?**");
preparedStatement.setString(1, orderRefNo);
请理解,在查询中使用字符串orderRefNo作为表名,这是不允许的。因此你会得到一个例外


另一种方法是将表名连接到查询中,但千万不要这样做,因为这会使代码容易受到SQL注入攻击。我重复一遍,不要将表名直接连接到查询中。

不能在查询中动态绑定表名。至少,不是没有存储过程。@ElliottFrisch嗨,谢谢你回答我的问题。我没有在查询中输入表名。变量为“orderefno”,它在上一个场景中生成,然后从上一个场景控制器传输到下一个场景控制器。
SELECT*from?
。您正试图从绑定
中的表名。您不能这样做。@ElliotFrisch Hi,orderRefNo不是表名,它是传递到控制器的字符串变量,我已经告诉过您三次了;你不能那样做。您可以编写一个存储过程并使用一个可调用语句来执行等效的操作,但是
PreparedStatement
由一个游标支持;而且数据库游标不是以这种方式生成的(基本上,没有JDBC实现允许您使用
PreparedStatement
)执行您试图执行的操作)。您好,感谢您的澄清。连接也不起作用。在我上面的连接语句中,注释掉了。但我的问题是,在我的程序中,我以前能够在insert语句中传入一个变量表名,这很好。
PreparedStatementPreparedStatement1=connection.prepareStatement(“插入到”+orderRefNo+”值(null,'Noodles6',“+Pane4Item6Qty+”,“+45*Pane4Item6Qty+”)这很好,我可以知道如何为此创建存储过程吗
PreparedStatement preparedStatement = connection.prepareStatement("**SELECT * FROM ?**");
preparedStatement.setString(1, orderRefNo);
PreparedStatement preparedStatement = connection.prepareStatement("**SELECT * FROM ?**");
preparedStatement.setString(1, orderRefNo);