Tag: 数据库

Java关闭连接和findbugs

在我们的代码中,我们通常使用以下模式: Connection conn; try{ conn = getConnection(); //Do databasey stuff }catch(Exceptions that get thrown){ }finally{ try{ conn.close(); }catch(SQLException ex){ logger.error(“Failed to cleanup database connection”,ex); } } 然而,findbugs不喜欢这个。 由于conn.close()可以抛出exception,因此无法保证关闭连接。 findbugs是否过于迂腐或是否有更好的方法来关闭数据库连接。 编辑:添加删除尝试捕获关闭。

使用jsp-servlet从数据库中检索多个图像

看一下我用来从数据库中检索图像的以下代码片段: response.setContentType(“image/gif”); String url=”jdbc:oracle:thin:@localhost:1521:xe”; String username=”xyz”; String password=”abc”; Class.forName(“oracle.jdbc.driver.OracleDriver”); Connection conn=DriverManager.getConnection(url,username,password); String sql=”Select name,description,image from pictures”; PreparedStatement stmt=conn.prepareStatement(sql); ResultSet resultSet=stmt.executeQuery(); ServletOutputStream sos=response.getOutputStream(); while(resultSet.next()) { byte[] buffer=new byte[1]; InputStream is=resultSet.getBinaryStream(3); while(is.read(buffer)>0){ sos.write(buffer); } sos.println(); sos.flush(); } sos.close(); conn.close(); 我正在尝试使用此代码来显示从数据库中检索的图像。 该代码应该从存储在数据库中的多行中检索多个图像。 但是此代码显示单个图像。

EJB3 DataSource DataSource.getConnection

在CMT J2EE环境(容器管理事务)中,当我JDNI查找DataSource对象并调用DataSource.getConnection时,使用什么事务/连接? 这个连接是(可能是分布式的)交易的一部分吗? 每次我为同一个DataSource对象调用时, getConnection()是否返回相同的Connection? 我只知道使用本机SQL语句由同一个EntityManager使用Connections。 这让我感到困惑。 据我所知,SessionContext定义了一个每次使用数据源时都使用的事务系统。 我有一个问题,在会话bean内部使用DataSource.getConnection() ,然后关闭此连接。 如果遇到问题,则发出SessionContext.setForRollBack(true) 。 因此,服务的事务上下文如何与DataSource相关? 如果我们每次使用数据源或者至少查找数据源时都会生成一个新的Connection,那么我就会有一些问题需要理解我已经知道的事情。 任何澄清都会很精彩。 我知道容器管理的事务和其他系统,但DataSource的实际行为完全超出了我。

在oracle.jdbc.driver.T4CConnection上找到的锁定对象

我正在使用JMC执行应用程序分析,我没有看到任何锁定/线程争用,如下面的屏幕截图所示。 我在下面运行SQL(每隔几秒)也没有返回任何结果。 select (select username from v$session where sid=a.sid) blocker, a.sid, ‘ is blocking ‘, (select username from v$session where sid=b.sid) blockee, b.sid from v$lock a, v$lock b where a.block = 1 and b.request > 0 and a.id1 = b.id1 and a.id2 = b.id2; 什么可能是锁数据库连接的原因? 它可能是数据库记录/表锁吗? 下面是我在程序执行期间提取的线程转储,它似乎永远在运行。 java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at […]

基本hibernate选择所有语法

我试图用hibernate从我的数据库中检索数据,但它不断抛出exception 2012-11-11 11:35:45,943 [main] ERROR com.storage.hibernate.DatabaseAccessRequestsImpl – 出现错误javax.persistence.PersistenceException:org.hibernate.exception.SQLGrammarException:无法执行查询 @Override public List requestPeriod() { List trades = null; EntityManager manager = emf.createEntityManager(); Query query = manager.createQuery(“from trade”); try{ trades = query.getResultList(); } catch(PersistenceException e){ logger.error(“there was an error ” + e); } catch(SQLGrammarException e){ logger.error(“there was an error ” + e); } return trades; } 我猜测我使用的语法select […]

为什么hibernate在插入和删除操作期间会生成’T_’前缀tableName?

数据库:ORACLE 我们在hibernate和hbm文件中使用ImprovedNamingStrategy,我们明确地给出了表名。 但是,仍然,在删除和插入操作期间,它生成’T_’作为前缀,’HT_’作为一些表的前缀。 这导致SQLGrammarException: org.hibernate.exception.SQLGrammarException:无法执行语句 请注意,使用Oracle数据库时会发生这种情况,HSQL或Postgres不会发生这种情况。

具有JPA的不同数据库的不同列类型

根据使用的数据库,是否可以使用JPA定义不同的列类型? 我需要将id存储为uuid,它必须是可以保持的。 那就是问题所在。 PostgreSQL有’uuid’,MSSQL’uniqueidentifier’而且Oracle什么都没有,我想必须使用’RAW’。 有人有想法可以帮助我吗? 编辑:当前使用java.util.UUID生成ID并将其作为varchar存储在数据库中。 但是由于该数据类型的性能问题,我想将id存储为uuid类型。 对于Oracle,必须使用RAW类型,因为不存在uuid类型。 如何告诉JPA在Oracle中使用带PostgreSQ / MSSQL和RAW类型的uuid类型?

java中的Java derby数据库批量加载

Derby是否具有从CSV执行批量插入数据的function? 我能想到的最好的方法是逐行读取文件并创建一个批处理SQL更新语句并运行它。 与使用mySQL的LOAD语句从CSV文件加载相比,花费30到40分钟的100万行,对于相同的数据需要2-3秒

在自动触发的默认侦听器之前,激活Hibernate自定义事件侦听器

我创建了一个自定义的Hibernate事件监听器,扩展了org.hibernate.event.PreInsertEventListener。 自定义侦听器会覆盖onPreInsert方法,并在使用DAO将其保存到DB之前设置“Contact”实体的字段。 问题是,在侦听器为其赋值之前,该字段为null,并且在我的自定义侦听器之前自动触发默认的hibernate事件侦听器。 当他们检查ddl时,他们会看到字段上的not-null约束,并在让我的自定义事件侦听器为字段赋值之前抛出空检查exception。 (当使用spring AOP而不是hibernate自定义侦听器时会发生同样的问题:默认的hibernate侦听器在我的aspect方法之前执行) 因此,有可能在知道我使用spring会话工厂的情况下调整hibernate监听器的触发顺序吗? 谢谢

仅使用一组样本数据创建“生产”的“测试数据库”副本

我们有2个Oracle数据库。 一个是我们的生产客户数据库。 另一个是测试数据库。 测试数据库是没有任何数据的生产副本……只是空表。 我试图找到一种有效的方法将一组样本数据从Production db复制到Test。 我需要从Customer表中的PK样本列表开始,并编写一个过程来使用该样本填充测试数据库Customer表。 然后,我需要根据示例使用相关数据填充子表。 我们曾经有一个Java进程,它将使用预准备语句从Production中选择数据…根据结果集构建文件…然后使用update语句将其放入Test db。 这非常低效。 我不是DBA所以我对这个领域知之甚少。 我试图谷歌一些关于数据库链接的信息,但找不到很好的例子。 有谁知道这样做的方法……或者,至少给我一个起点?