gpt4 book ai didi

Java Hibernate 添加查询

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

我在尝试将现有库存保留在预生产环境中时遇到问题。我想做的实际上是循环一个文本文件并将该文件中的子字符串插入数据库。

这是我执行的类:

公共(public)类RepriseStock { 私有(private)静态Session session ;

    public RepriseStock() { 
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
}

public static int insererPartenaires(String sCurrentLine, int i) {
String sql = "INSERT INTO PARTENAIRE(ID,"
+ "MVTSOC,"
+ " MVTAGR, "
+ "MVTNOMSOC,"
+ "MVTCPTTMAG,"
+ "DATEAGREMENT,"
+ "MVTCHAINE,"
+ "MVTRGPT,"
+ "MVTUNION,"
+ "MVTNOMMAG,"
+ "MVTTELSOC,"
+ "MVTADRMAG,"
+ "MVTVILMAG,"
+ "MVTMAIL,"
+ "MVTSITU)"
+ " VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

Query query = session.createSQLQuery(sql);

query.setInteger(0, i);

query.setInteger(1, Integer.parseInt(sCurrentLine.substring(0, 3)));
query.setInteger(2, Integer.parseInt(sCurrentLine.substring(3, 10)));
query.setString(3, sCurrentLine.substring(10, 34));
query.setInteger(4, Integer.parseInt(sCurrentLine.substring(48, 53)));

query.setString(5, sCurrentLine.substring(77, 83));

query.setInteger(6, Integer.parseInt(sCurrentLine.substring(86, 90)));
query.setInteger(7, Integer.parseInt(sCurrentLine.substring(90, 94)));
// union
query.setInteger(8, Integer.parseInt(sCurrentLine.substring(94, 98)));
// enseigne 30
query.setString(9, sCurrentLine.substring(248, 278));
// tel
query.setString(10, sCurrentLine.substring(278, 293));
// adresse
query.setString(11, sCurrentLine.substring(293, 323));
// ville
query.setString(12, sCurrentLine.substring(323, 348));
// mail

query.setString(13, sCurrentLine.substring(398, 448));
// situ
query.setString(14, sCurrentLine.substring(449, 452));

return query.executeUpdate();

}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Module de remplacement de méthode auto-généré

BufferedReader br = null;
RepriseStock rs = new RepriseStock();

try {

String sCurrentLine;

br = new BufferedReader(
new FileReader(
"C:\\Users\\test\\Desktop\\test\\reprise de stock\\nouveauFichierPREPROD.dat"));
int i = 0;
sCurrentLine = br.readLine();
while ((sCurrentLine = br.readLine()) != null) {
i++;

RepriseStock.insererPartenaires(sCurrentLine, i);

System.out.println("Nombre de fois : " + i);

}

System.out.println("total (" + i + " )");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}

}

}

脚本执行后,总共循环了1022次。但数据没有持久化到oracle表(Partenaire)

我的日志没有显示任何错误。

您看到问题了吗?

最佳答案

您似乎没有提交交易。

如果您希望每个更新都是一个单独的事务,请尝试将 session.beginTransaction(); 移动到 insererPartenaires 方法的开头并捕获 Transaction 从变量中的语句返回的对象。然后,在每次更新后,确保对 Transaction 对象调用 commit()

如果您希望所有更新都是同一事务,请将 beginTransaction()commit() 方法移动到主方法中的 while 循环周围。

<小时/>

另请注意,您在这里不必要地混合了静态和非静态。尝试将 public static int insererPartenaires(String sCurrentLine, int i) 更改为 public int insererPartenaires(String sCurrentLine, int i)。然后只需使用实例化的 RepriseStock 对象来调用该方法,而不是静态调用它。

您还需要将私有(private)静态 session session 更改为私有(private) session session

关于Java Hibernate 添加查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29354543/

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