gpt4 book ai didi

java - 代码部分我不明白

转载 作者:行者123 更新时间:2023-12-02 03:59:03 25 4
gpt4 key购买 nike

我不明白为什么在这段代码中,它会这样做:

query.setString("idFamilleDeProduit", String.valueOf(familleDeProduits.getFamilleDeProduitsGenerique().getId()));

当我在数据库中查看表时,id 列是整数

它是 PostgreSql-9.4.1207

我的功能:

public List<ContratMdd> recherchePourDuplication(String typeAccord, FamilleDeProduitsNomenclature familleDeProduits, SocieteInterne societeInterne, SocieteExterne societeExterne, String anneeAccord) throws PersistenceException {

List<ContratMdd> listContratMdd = new ArrayList<ContratMdd>();

String requete = "";

if (!"".equals(anneeAccord)){
requete += " anneeAccord = :anneeAccord";
}
if (!"".equals(typeAccord) && ! "".equals(requete)){
requete += " AND";
}
if (!"".equals(typeAccord)){
requete += " type = :type";
}

boolean existFamille = false;

requete += (familleDeProduits != null && familleDeProduits.getFamilleDeProduitsGenerique() != null) ? " AND " : "";

if(familleDeProduits != null && familleDeProduits.getFamilleDeProduitsGenerique() != null){
existFamille = true;
requete += " estAppliqueSur.familleDeProduitsGenerique IS NOT NULL AND estAppliqueSur.familleDeProduitsGenerique.id = :idFamilleDeProduit";
}


boolean existSocieteInterne = false;
boolean existSocieteExterne = false;

requete += (societeInterne != null) ? " AND " : "";

if(societeInterne != null){

existSocieteInterne = true;
String table = societeInterne instanceof Master ? "MasterImpl" : "AdherentImpl";
requete += " contractantInterne.id = :idsocieteInterne AND contractantInterne IN (FROM "+table+") ";
}

requete += (societeExterne != null) ? " AND " : "";

if(societeExterne!=null){

existSocieteExterne = true;
String table = societeExterne instanceof GroupeIndustriel ? "GroupeIndustrielImpl" : "FournisseurImpl";
requete += " contractantExterne.id = :idsocieteExterne AND contractantExterne IN (FROM "+table+") ";

}


if (!"".equals(requete)) {

requete = "from ContratMddImpl where" + requete;
Query query = createQuery(requete);

if (!"".equals(anneeAccord)){
query.setBigInteger("anneeAccord", new BigInteger(anneeAccord));
}
if (!"".equals(typeAccord)){
query.setString("type", typeAccord);
}
if(existFamille){
query.setString("idFamilleDeProduit", String.valueOf(familleDeProduits.getFamilleDeProduitsGenerique().getId()));
}
if (existSocieteInterne){
query.setInteger("idsocieteInterne", societeInterne.getId());
}
if (existSocieteExterne){
query.setInteger("idsocieteExterne", societeExterne.getId());
}

listContratMdd.addAll((List<ContratMdd>) query.list());
}

return listContratMdd;
}

最佳答案

发生这种情况是因为 Postgre 的数据库驱动程序允许这样做。但是对于 Integer,您应该使用 setInt() 而不是 setString(),因为其他数据库驱动程序可能不支持它。

以下是 java.sql.PreparedStatement 文档的内容:

Note: The setter methods (setShort, setString, and so on) for setting IN parameter values must specify types that are compatible with the defined SQL type of the input parameter. For instance, if the IN parameter has SQL type INTEGER, then the method setInt should be used.

关于java - 代码部分我不明白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35101214/

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