gpt4 book ai didi

mysql - SELECT 查询不传递参数

转载 作者:行者123 更新时间:2023-11-29 17:58:16 24 4
gpt4 key购买 nike

我有一个带有内部联接的选择查询,where 子句位于第二个查询中,

这是代码:

static String Showplan = "SELECT * From plan_audit INNER JOIN (SELECT Du,Au From Programme_audit Where Du = '?' AND Au = '?')AS T ";

public void buttonClick(ClickEvent event) {
try{
Class.forName("com.mysql.jdbc.Driver");
Core.con = DriverManager.getConnection(Core.db,Core.dbUsername,Core.dbPassword);
PreparedStatement st;
st = Core.con.prepareStatement(Core.Showplan);
st.setString(1,select.getValue().toString());
st.setString(2,select1.getValue().toString());
ResultSet rs = st.executeQuery();

while(rs.next()){
table.addItem(new Object[]{rs.getInt(1),rs.getString(2),rs.getDate(3),rs.getString(4), rs.getString(5),rs.getString(6),rs.getString(7),rs.getString(8),rs.getDate(9),rs.getString(10),rs.getString(11),rs.getDate(12),rs.getString(13),rs.getString(14),rs.getString(15)},rs.getInt(1));

}
}catch(Exception e){
e.printStackTrace();
}

}


});

引发的异常如下:

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

最佳答案

不要在参数标记 ? 后添加单引号。事实上,不要对它们做任何事情,而是让 Java 根据需要插入数据:

String sql = "SELECT * From plan_audit INNER JOIN ";
sql += "(SELECT Du, Au From Programme_audit Where Du = ? AND Au = ?) t ";
PreparedStatement st = con.prepareStatement(sql);
st.setString(1, select.getValue().toString());
st.setString(2, select1.getValue().toString());
ResultSet rs = st.executeQuery();

准备好的语句的全部意义在于让 Java 关心如何将数据带入查询中。在这种情况下,由于您正在绑定(bind)字符串,因此它们将被单引号引起来,但您不需要关心这一点。

顺便说一句,您的查询实际上是在执行交叉联接,因为您从未指定联接条件。这可能是也可能不是您想要的,但很可能您希望在这里有某种连接条件。

关于mysql - SELECT 查询不传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48619674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com