mysql - SELECT 查询不传递参数

标签 mysql

我有一个带有内部联接的选择查询,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/

相关文章:

android - 如何在android ListView 中使用notifyDataSetAdapter?

mysql - #1093 - 您无法在 FROM 子句中指定用于更新的目标表 'tbl'

MySQL 老化触发器

mysql - 为每个页面加载查询我的数据库是否安全?

java - 从表中删除列表中不存在 id 的记录,保留现有记录并插入表中不存在的记录

PHP - SQL - DELETE 查询不起作用

mysql - 在过程 MySQL 5.5.x 中获取 SQLEXCEPTION 消息

java - 在 MySQL 表中存储 Unicode 和特殊字符

PHP 递增最大 ID

mysql - 如何将 mysql 结果分配给变量(在 C 中)