请教:java 线程中队数据库进行操作,程序返回值显示成功,单实际未成功

2019-03-25 13:46|来源: 网路

问题描述:
近些天公司要让我完成一个导数的模块。我写了一个导数的类AssetImpThread 实现了 Runnable接口。
类有一个 初始化方法 init() 调用了 一个利用 jndi连接对数据进行操作的类.

我已经 对 进行数据库操作的类进行了测试(main方法中 建立一个jndi的连接),数据库操作类正常运行。
然后我对线程进行测试,奇怪的事情发生了,
测试类的main() 方法中建立数据库连接, 启动线程,调用线程的init()方法,对数据进行操作。

利用 PreparedStatement 进行插入操作的时候,返回值为1(插入了一条数据),返回值正确。
但是实际没有插入值,我经过多次测试都是这样。

而且我这是循环插入,每插入一条,都会再次去取到 本表的 已有数据的数量。
插入过程中 数量是增加的。
但是实际中没有插入数据。

问题补充:已经提交了事务,开始的时候事务没有显示提交事务,事务会自动提交的。
后来改变成了显式的提交。
都不起作用。这个进行数据库操作的类,我已经单独测试了,没有关系。
现在主要考虑的是线程中调用,会不会有什么特殊情况我没有考虑到。

to ethen:
可能要显示的调用commit来提交事务。另外lz有没有考虑过线程同步的问题,及数据库的事务管理?

线程同步有考虑到了,这个线程是一个单例线程。只是将线程操作的静态变量设置为了同步。
数据库的事务管理,不太清楚你指的哪个方面。
谢谢指教

问题补充:问题已经解决~~
因为调用jndi方法用的公司的接口,没有进行关闭操作~
没有执行插入,所有查找不到~

谢谢各位~

相关问答

更多
  • //才几分啊,还有那么多要求?不干了! //RobotTest.java import java.awt.Color; import java.awt.Graphics; import javax.swing.*; public class RobotTest extends JPanel implements Runnable{ JLabel head,neck,body; boolean sw; RobotTest(){ super(null); head=new JLabel("HEAD"){ pro ...
  • 直接双击安装就可以了,装完以后配置系统环境变量,选中"我的电脑"右击后选属性-->>高级-->>环境变量新建环境变量,Windows下JAVA用到的环境变量主要有3个,JAVA_HOME、CLASSPATH、PATH。下面逐个分析。 JAVA_HOME指向的是JDK的安装路径,如x:\JDK_1.4.2,在这路径下你应该能够找到bin、lib等目录。值得一提的是,JDK的安装路径可以选择任意磁盘目录,不过建议你放的目录层次浅一点,如果你放的目录很深,比如x:\XXXXXX\xxxxx\XXXX\xxxx\X ...
  • 先学 j2se系列视频,然后 jsp、servlet,然后设计模式、三大框架。
  • flag = ftpClient.retrieveFile(remoteFileName, os); os为远程文件的outputStream |remoteFileName为A服务器上文件名 flag = ftpClient.storeFile(remoteFileName, is);is为远程文件的inputSteam |remoteFileName为C服务器上文件名 由此可见这个地方还是相当纠结的,必须要用B服务器做个中转,利用B服务器上文件的OutputStream 和InputStream 所以如 ...
  • /** @version 1.32 2004-05-05 @author Cay Horstmann */ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Calculator { public static void main(String[] args) { CalculatorFrame frame = new CalculatorFrame(); frame.setDefaultCloseO ...
  • 电子称有动态链接库,你使用JNI实现里面的接口就行了。 java直接操作是没办法发送的。
  • 首先谢谢你的回答。你说到helloworld.java因为简单,所以用到系统提供的类足以,这里,“系统提供的类”是指安装jdk后,jdk目录里面的类,是吧?因为设置了java环境,javac会自动到jdk安装目录下面去找需要的类,是这个意思吗?
  • 1、我不明白你具体想问的问题是什么。 2、我建议你附上你的代码、或截图求问。
  • 1. commit 有返回值的 UpdateResponse updateResponse = solrServer.commit();int status = updateResponse.getStatus()这里的 status 可以拿到操作执行的状态 ,0表示 成功 if (status != 0) { log.error("Some horrible error has occurred, status is:" + status); } 2. try{ UpdateResponse addBea ...
  • 印象里直接拿是拿不到的。 要拿泛型中的真实类型 api 中的 getTypeParameters() 希望能帮到你 可追问