当前位置: 首页 > 面试题库 >

SQLException:没有为参数1指定值

熊锐进
2023-03-14
问题内容

我在执行应用程序时遇到以下错误:

java.sql.SQLException:未为参数1指定值

这是什么意思?

UserGroup在岛上的清单:

public List<UsuariousGrupos> select(Integer var) {
    List<UsuariousGrupos> ug= null;
    try {
        conn.Connection();
        stmt = conn.getPreparedStatement("select id_usuario, id_grupo from usuarios_grupos where id_grupo ='" + var + "'");
        ResultSet rs = stmt.executeQuery();
        ug = new ArrayList<UsuariousGrupos>();
        while (rs.next()) {
            ug.add(getUserGrupos(rs));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        conn.Disconnected();
    }
    return ug;
}

public UsuariousGrupos getUserGrupos(ResultSet rs) {
    try {
        UsuariousGrupos ug = new UsuariousGrupos(rs.getInt("id_usuario"), rs.getInt("id_grupo"));
        return ug;
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
}

我在托管bean中获得的用户组列表:

public List<UsuariousGrupos> getListOfUserGroups() {
    List<UsuariousGrupos> usuariosGruposList = userGrpDAO.select(var2);
    listOfUserGroups = usuariosGruposList;
    return listOfUserGroups;
}

我的JSF页面:

 <p:dataTable var="usergroups" value="#{usuariousGruposBean.listOfUserGroups}">
     <p:column headerText="" style="height: 0" rendered="false">
         <h:outputText value="#{usergroups.id_grupo}"/>
     </p:column>

我的数据表能够显示数据库中的组列表。但是,当我在数据表中选择单个行时,应用程序需要一些时间才能与数据库建立连接以显示所选结果。

另外,奇怪的是,该应用程序能够比其他应用程序更快地显示某些选定的结果。与我一开始指出的异常有什么关系吗?

错误:

Disconnected
Connected!!
java.sql.SQLException: No value specified for parameter 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
    at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2560)
    at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2536)
    at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2462)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2216)
    at br.dao.UsuariousGruposDAO.select(UsuariousGruposDAO.java:126)
    at br.view.UsuariousGruposBean.getListOfUserGroups(UsuariousGruposBean.java:54)


SEVERE: Error Rendering View[/index.xhtml]
javax.el.ELException: /index.xhtml @61,99 value="#{usuariousGruposBean.listOfUserGroups}": Error reading 'listOfUserGroups' on type br.view.UsuariousGruposBean
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)

问题答案:

目前,因为没有这样的方法Connection()getPreparedStatement()java.sql.Connection

conn.Connection();
stmt = conn.getPreparedStatement("select id_usuario, id_grupo from usuarios_grupos where id_grupo ='" + var + "'");

conn显然,它是JDBC代码的本地包装。您的特定问题可能是由该getPreparedStatement()方法后面的代码引起的。显然?,在委派给_real_connection.prepareStatement()方法之前,将a附加到SQL字符串。

您可能不想听到这个消息,但是您的JDBC方法完全被打破了。这种设计表明JDBC Connection是作为 threadunsafe
的静态变量或实例变量 保存的

您需要完全重写它,以便归结为以下正确用法和变量作用域:

public List<UsuariousGrupos> select(Integer idGrupo) throws SQLException {
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    List<UsuariousGrupos> usuariousGrupos = new ArrayList<UsariousGrupos>();

    try {
        connection = database.getConnection();
        statement = connection.prepareStatement("select id_usuario, id_grupo from usuarios_grupos where id_grupo = ?");
        statement.setInt(1, idGrupo);
        resultSet = statement.executeQuery();

        while (resultSet.next()) {
            usuariousGrupos.add(mapUsuariousGrupos(resultSet));
        }
    } finally {
        if (resultSet != null) try { resultSet.close(); } catch (SQLException ignore) {}
        if (statement != null) try { statement.close(); } catch (SQLException ignore) {}
        if (connection != null) try { connection.close(); } catch (SQLException ignore) {}

    }

    return usuariousGrupos;
}

具体问题 无关 ,您还有另一个问题。以下异常

javax.el.E​​LException:/index.xhtml @ 61,99 value
=“#{usuariousGruposBean.listOfUserGroups}”:读取br.view.UsuariousGruposBean类型的’listOfUserGroups’时出错

表示您正在用 getter 方法而不是(post)constructor或(action)listener方法执行JDBC
。这也是一个非常糟糕的主意,因为在渲染响应期间可以多次调用getter。相应地修复它。



 类似资料:
  • 我不知道这个错误意味着什么,也不知道如何修复它。我试图从我的一个数据库中检索一些数据,但一直遇到下面的错误消息。

  • 我计划使用yahoo finance csv api生成url,以获取股票的实时价格和时间。url是这样的http://download.finance.yahoo.com/d/quotes.csvs=@%5YHOO、GOOG、MSFT、BAC 我使用jdbc将数据存储到MySQL,但是总是有一个错误:“没有为参数5指定值”。代码如下:公共类Quote_Saver{私有无效连接(){try{Cla

  • 问题内容: 注册到我的Grails应用程序后,用户会收到一封带有确认链接的电子邮件。单击该链接,将她带到相应的“启用”操作。 这完美无瑕。但是,现在似乎有一个非常特定的令牌出现错误,该令牌的user.save()失败了: 堆栈跟踪: 请注意,我可以在同一运行实例中创建其他用户-但是(到目前为止)该错误仅在该代码中发生。 关于如何解决这个问题的任何想法? 使用的版本: PostgreSQL:9.1b

  • 问题内容: 假设我有一个PHP函数foo: 有什么办法只能指定第二个可选参数? 例: 问题答案: PHP本身不支持命名参数作为函数。但是,有一些方法可以解决此问题: 使用数组作为该函数的唯一参数。然后,您可以从数组中提取值。这允许在数组中使用命名参数。 如果要根据上下文允许可选数量的参数,则可以使用func_num_args和func_get_args而不是在函数定义中指定有效参数。然后,根据参数

  • 问题内容: 我在这里有用于登录的代码,遇到此错误,“ java.sql.SQLException:未为参数2指定值” 有时,“ java.sql.SQLException:参数索引超出范围(1>参数数量,为0)。” 我真的不知道 } 问题答案: 您正在将用户和密码都分配给相同的参数(1)。 更改此: 对此:

  • 我有java代码,我改成kotlin了,我的代码是用pdf-viewer库显示pdf的,我不明白为什么我的代码是错误的,下面是错误: 指定为non-null的是null参数:方法kotlin.jvm.internal.intrinsics.CheckParameterIsNotNull,inputStream参数 这是我的密码