我的 executeUpdate() 工作,但没有提交
Posted
技术标签:
【中文标题】我的 executeUpdate() 工作,但没有提交【英文标题】:My executeUpdate() working, but not commit 【发布时间】:2015-11-04 05:51:07 【问题描述】:我试图在我的 postgresql 数据库中插入数据,但是,当我执行 executeUpdate() 方法时,它不会在我的数据库中插入任何数据,而且我看不到我做错了什么......
Ps:我的数据库是 autocommit: on;
我在这里使用 Jboss 7.1.1 我的数据源配置:
<subsystem xmlns="urn:jboss:domain:datasources:1.0">
<datasources>
<datasource jta="true" jndi-name="java:jboss/datasources/PostgresqlDS" pool-name="PostgreDS" enabled="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:postgresql://dataBaseAddress/dataBaseName</connection-url>
<driver>org.postgresql</driver>
<pool>
<min-pool-size>2</min-pool-size>
<max-pool-size>20</max-pool-size>
</pool>
<security>
<user-name>user</user-name>
<password>password</password>
</security>
</datasource>
<drivers>
<driver name="org.postgresql" module="org.postgresql">
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
</subsystem>
这是我的连接类:
public Connection getConnection() throws TopLevelException, SQLException
Connection conn = null;
try
Context ctx = new InitialContext();
TransactionBean tal = (TransactionBean) ctx.lookup("java:global/snrng-ear/snrng-ejb-lgc/TransactionBean!br.com.compplied.snrng.ejb.TransactionBean");
conn = tal.getConnection();
catch (NamingException e)
throw new TopLevelException(e);
return conn;
这是执行我的插入的方法
public int inserirHistorico(RetornoHistoricoObject retorno) throws TopLevelException
int update = 0;
PreparedStatement ps = null;
ResultSet rs = null;
Connection con = null;
String sql = "INSERT INTO table ( column1, column2, column3, column4, column5, column6) values (?, ?, ?, ?, ?, localtimestamp)";
try
con = getConnection();
ps = con.prepareStatement(sql);
rs = ps.getResultSet();
ps.setString(1, retorno.getNome_arquivo());
ps.setString(2, retorno.getNumero_autenticacao().trim());
ps.setString(3, retorno.getNosso_numero());
ps.setDate(4, retorno.getData_pagamento());
ps.setDouble(5, retorno.getValor());
update = ps.executeUpdate();
catch (SQLException e)
throw new TopLevelException(e);
catch (Exception e)
throw new TopLevelException(e);
finally
try
close(rs, ps, con);
catch (SQLException e)
throw new TopLevelException(e);
return update;
当我执行 ps.executeUpdate() 方法时,返回给我一个插入新 id 的成功消息,但是,当我在我的桌子上查找这个 id 时,那里没有插入任何东西。我已经检查了我的数据库参数、连接等,但它仍然无法正常工作...有人可以帮帮我吗?
【问题讨论】:
这可能不是你的问题的原因,但你为什么有一个ResultSet
,你为什么打电话给getResultSet()
?
@Samuel 嗨,谢谢,resultSet 是错误的,我删除了它,坏的仍然不起作用:(
为什么不查找数据源而不是您的自定义 bean 并从中获取连接?
你的类/方法上有事务注解吗?
如果您在连接上调用commit()
会发生什么?也许您获得的连接已禁用自动提交。顺便提一句。为什么要使用 XADataSource?而不是“常规”数据源? XA DataSource 用于分发事务(在不同的应用程序服务器之间)。使用org.postgresql.ds.PGConnectionPoolDataSource
会改变什么吗?
【参考方案1】:
为了隔离问题,尝试:
在数据库中执行手动插入以检查自动提交设置?如果工作 - Java 中的问题。如果不起作用 - 数据库中的问题
创建一个简单的类来执行插入并检查它是否有效。可以,应用设置有问题。如果不起作用 - FU## 与 Java/Driver 一起使用!
如果 1 和 2 有效,请尝试使用事务:
Transaction t = beginTransaction(); // session???
//your code here
tx.commit;
【讨论】:
欢迎来到 SO!请发送tour 以获得您的第一个闪亮徽章。 大家好,我的问题解决了,我是JTA = "true" 发现当我们使用JTA时,如果发生任何异常他没有输入我的数据,然后挂断JTA解决了我的问题数据库和它的工作:))))))))以上是关于我的 executeUpdate() 工作,但没有提交的主要内容,如果未能解决你的问题,请参考以下文章
sql 异常 不能为带有 SELECT 查询的 SELECT 发出 executeUpdate
executeUpdate() 抛出 MySQLSyntaxErrorException
PrepareStatement 挂在 executeUpdate 函数上
通过 stmt.executeUpdate 更新 access 数据库中的整数