gpt4 book ai didi

java - SQL错误参数太少

转载 作者:行者123 更新时间:2023-11-30 09:29:00 25 4
gpt4 key购买 nike

我有一个 sql 问题。我在 Access 数据库之上编写了一个 Java 应用程序。这是一个针对多个字段的搜索查询,我知道错误出在我需要计算一个人失踪时的年龄的部分。我在我的方法中返回了一个表模型,所以我需要在我的查询中进行计算。我最近尝试让它工作是这样的:

public TableModel UpdateTable(String dossiernr, String naam, String voornaam,
String startleeftijd, String eindleeftijd, String dossierjaar, String geslacht)
{
TableModel tb = null;
String sql= "SELECT [Nr dossier],[Annee],[Nom],[Prenom],[Disparu le],[Ne le],[Sexe], DATEDIFF('yyyy',[Ne le],[Disparu le]) - iif(DATEADD('yyyy', DATEDIFF('yyyy',[Ne le],[Disparu le]),"
+ "[Ne le])>[Disparu le],1,0) AS Age FROM TotalTable "
+ "WHERE [Nr dossier] LIKE ? AND [Nom] LIKE ? AND [Prenom] LIKE ? AND [Annee] LIKE ? AND Age >= ? AND Age <= ? AND [Sexe] LIKE ?;";

try
{
PreparedStatement pstatement;
Connection connection = PersistentieController.getInstance().getConnection();

pstatement = initStatement(connection,sql);
pstatement.setString(1, "%" + dossiernr + "%");
pstatement.setString(2, "%" + naam + "%");
pstatement.setString(3, "%" + voornaam + "%");
pstatement.setString(4, "%" + dossierjaar + "%");
pstatement.setString(5, startleeftijd);
pstatement.setString(6, eindleeftijd);
pstatement.setString(7, "%" + geslacht + "%");
rs=pstatement.executeQuery();
tb = DbUtils.resultSetToTableModel(rs);
pstatement.close();
}//einde try
catch (SQLException e)
{
e.printStackTrace();
} //einde catch

return tb;
}

当我运行它时,出现以下错误:

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 8.

我只使用 7 个参数,不明白他为什么要 8 个参数。谢谢

最佳答案

您在 WHERE 子句中计算了 7 个参数。不幸的是,Access 数据库引擎在那种情况下将 Age 视为另一个参数,因此它认为您有 8 个参数而不是只有 7 个。

要了解原因,请从这个在我的 Access 数据库中运行且没有错误的查询开始:

SELECT some_text AS foo
FROM tblFoo
WHERE some_text Is Not Null;

但是,当尝试在 WHERE 子句中使用别名而不是字段名称时,Access 会提示我为 foo 提供一个值,因为它将它视为参数:

SELECT some_text AS foo
FROM tblFoo
WHERE foo Is Not Null;

Access 限制了您稍后在查询中重复使用别名的能力。在某些情况下,它会接受别名,但您的情况不是其中之一。

您可以在子查询中定义别名。然后,当您在父查询中引用子查询的别名时,数据库引擎将正确识别它。

如果可能,请直接在 Access 中测试您的 SQL 语句。如果他们失败了,这种努力将为您提供确定原因的最佳机会。

关于java - SQL错误参数太少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13768688/

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