在准备好的语句中设置一行 null
set a row in prepared statement null
if(article.getAttribut() == null ) {
preparedStatement = initialisationRequetePreparee(connexion,
SQL_INSERT, true, article.getProduit().getId(), null ,
article.getDesignationArticle(), article.getArticleParent().getId());
} else {
preparedStatement = initialisationRequetePreparee(connexion,
SQL_INSERT, true, article.getProduit().getId(), article
.getAttribut().getId(),
article.getDesignationArticle(), article.getArticleParent().getId());
}
我的问题是如何在 null
上设置 article.getAttribut().getId()
因为我遇到了这个错误
Caused by: java.sql.SQLException: Parameter index out of range (4 > number of parameters, which is 3).
PreparedStatement初始化RequetePreparee方法
public static PreparedStatement initialisationRequetePreparee( Connection connexion, String sql, boolean returnGeneratedKeys, Object... objets ) throws SQLException {
PreparedStatement preparedStatement = connexion.prepareStatement( sql, returnGeneratedKeys ? Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS );
for ( int i = 0; i < objets.length; i++ ) {
preparedStatement.setObject( i + 1, objets[i] );
}
return preparedStatement;
}
在PreparedStatement
中有一个方法
void setNull(int parameterIndex, int sqlType) throws SQLException
您可以使用该方法将值设置为 null
注意:你的错误是不同的。与null
如何设置值无关,而是与需要设置的参数个数有关。
您的参数似乎少于您尝试设置的实际值的数量!参数的数量等于查询中存在的 ?
的数量。可能您的查询中只有 3 个问号,而您正在设置第 4 个(不存在的)值。
我想 SQL_INSERT
有不同的 sql 如果 article.getAttribut()
是 null
或不是。如果是这种情况,您不能使用单个 initialisationRequetePreparee
。您需要两个函数,或者您需要 initialisationRequetePreparee
的内部逻辑,类似于以下内容:
PreparedStatement ps = ...
if (articleAttribute == null) {
// 3 ps.set functions
} else {
// 4 ps.set functions
}
return ps;
if(article.getAttribut() == null ) {
preparedStatement = initialisationRequetePreparee(connexion,
SQL_INSERT, true, article.getProduit().getId(), null ,
article.getDesignationArticle(), article.getArticleParent().getId());
} else {
preparedStatement = initialisationRequetePreparee(connexion,
SQL_INSERT, true, article.getProduit().getId(), article
.getAttribut().getId(),
article.getDesignationArticle(), article.getArticleParent().getId());
}
我的问题是如何在 null
上设置 article.getAttribut().getId()
因为我遇到了这个错误
Caused by: java.sql.SQLException: Parameter index out of range (4 > number of parameters, which is 3).
PreparedStatement初始化RequetePreparee方法
public static PreparedStatement initialisationRequetePreparee( Connection connexion, String sql, boolean returnGeneratedKeys, Object... objets ) throws SQLException {
PreparedStatement preparedStatement = connexion.prepareStatement( sql, returnGeneratedKeys ? Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS );
for ( int i = 0; i < objets.length; i++ ) {
preparedStatement.setObject( i + 1, objets[i] );
}
return preparedStatement;
}
在PreparedStatement
中有一个方法
void setNull(int parameterIndex, int sqlType) throws SQLException
您可以使用该方法将值设置为 null
注意:你的错误是不同的。与null
如何设置值无关,而是与需要设置的参数个数有关。
您的参数似乎少于您尝试设置的实际值的数量!参数的数量等于查询中存在的 ?
的数量。可能您的查询中只有 3 个问号,而您正在设置第 4 个(不存在的)值。
我想 SQL_INSERT
有不同的 sql 如果 article.getAttribut()
是 null
或不是。如果是这种情况,您不能使用单个 initialisationRequetePreparee
。您需要两个函数,或者您需要 initialisationRequetePreparee
的内部逻辑,类似于以下内容:
PreparedStatement ps = ...
if (articleAttribute == null) {
// 3 ps.set functions
} else {
// 4 ps.set functions
}
return ps;