Tag: jdbc

在批处理中使用JDBC preparedStatement

我使用Statement的批处理来查询我的数据库。 我现在做了一些研究,我想重写我的应用程序以使用preparedStatement但我很难弄清楚如何向prepareStatement批处理添加查询。 这就是我现在正在做的事情: private void addToBatch(String sql) throws SQLException{ sttmnt.addBatch(sql); batchSize++; if (batchSize == elementsPerExecute){ executeBatches(); } } 其中sttmnt是Statement类型的类成员。 我想要做的是使用preparedStatement的setString(int, String)方法设置一些动态数据,然后将其添加到批处理中。 不幸的是,我不完全理解它是如何工作的,以及如何将setString(int, String)用于批处理中的特定sql,或者为我拥有的每个sql创建一个新的preparedStatemnt ,然后将它们全部连接到一个批处理。 有可能这样做吗? 或者我是否真的错过了对preparedStatement理解?

Apache Commons DBCP连接对象问题,org.apache.tomcat.dbcp.dbcp.PoolingDataSource中的Thread:ClassCastException $ PoolGuardConnectionWrapper

我正在使用Apache Commons DBCP( commons-dbcp.jar )连接池。 一旦我从池中获得连接,它就被包装在类org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 。 我的要求是将一个字符串数组传递给Oracle中的pl / sql存储过程。 以下是我在以下代码片段中所做的事情: Connection dbConn = ConnectionManager.ds.getConnection(); //The above statement returns me an connection wrapped in the class //org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper. org.apache.commons.dbcp.DelegatingConnection del = new org.apache.commons.dbcp.DelegatingConnection(dbConn.getConnection()); con = del.getInnermostDelegate(); cs = con.prepareCall(“call SP_NAME(?,?,?,?)”); oracle.sql.ArrayDescriptor arDesc= oracle.sql.ArrayDescriptor.createDescriptor(“ARRAY_NAME”, (OracleConnection) con); CallableStatement c_stmt = conn.prepareCall(“begin update_message_ids_ota (:x); end;” ); c_stmt.setArray( 1, array_to_pass […]

Java MySQL JDBC内存泄漏

好吧,所以我有这个程序有很多(~300)个线程,每个线程都与一个中央数据库通信。 我创建了一个到DB的全局连接,然后每个线程都会创建业务创建语句并执行它们。 在某个地方,我有一个巨大的内存泄漏。 在分析堆转储后,我看到com.mysql.jdbc.JDBC4Connection对象是70 MB,因为它在“openStatements”(哈希映射)中有800,000个项目。 在某个地方它没有正确地关闭我创建的语句,但我不能为我的生活弄清楚在哪里(每次打开一个,我也关闭它)。 有什么想法可能会发生吗?

使用JDBC for Oracle迭代ResultSet需要花费大量时间大约16秒?

while( result_set.next() ) { … } 我使用System.nanoTime()并计算时间,每次迭代所用的时间以毫秒为单位,但整个循环大约需要16秒。 我正在考虑条件测试花费大量时间的可能原因,即next()函数。 仅供参考我正在连接到远程数据库服务器,并且我使用上述方法再次计算完成的选择查询(以毫秒为单位)。 有关为什么会发生这种情况的原因以及如何将结果集迭代到最多一秒的时间? 编辑: 我正在处理大约4000条记录,每条记录包含大约10列,每列大约有10个字符 EDIT2谢谢setFetchsize()做了神奇,真棒,真棒

在hibernate createSQlquery结果中使用sql列名

我有几个我想要查询的复合主键的sql视图,而且由于Hibernate使用复合键很难,我使用的是createSQLQuery 。 问题是这个方法只能返回一个List,我需要通过索引来引用colums。 我有可能做一些像jdbc这样的事情并通过他们的sql名称而不是他们的索引来引用列吗?

结果集到列表

我想在我的JSP页面中将我的Resultset转换为List。 并希望显示所有值。 这是我的查询: SELECT userId, userName FROM user; 我已经使用preparedstatement执行了该操作并获得了Resultset 。 但是如何将其转换为List并希望显示如下结果: userID userName —————— 1001 user-X 1006 user-Y 1007 user-Z

错过了在Java 8中修复JDBC日期处理的机会?

任何Java 8 + JDBC专家都能告诉我以下推理是否有问题吗? 而且,如果在众神的秘密中,为什么没有这样做呢? java.sql.Date当前是JDBC用于映射到DATE SQL类型的类型,它表示没有时间且没有时区的日期。 但是这个类设计得非常好,因为它实际上是java.util.Date的子类,它可以存储精确的瞬间,最长可达毫秒。 为了在数据库中表示日期2015-09-13,我们因此被迫选择一个时区,在该时区中将字符串“2015-09-13T00:00:00.000”解析为java.util.Date以获得毫秒value,然后从这个毫秒值构造一个java.sql.Date ,最后在预准备语句上调用setDate() ,传递一个包含所选时区的Calendar,以便JDBC驱动程序能够正确地重新计算日期2015-09 -13来自这个毫秒值。 通过在任何地方使用默认时区,而不是传递日历,可以使此过程更简单一些。 Java 8引入了一个LocalDate类,它更适合DATE数据库类型,因为它不是精确的时刻,因此不依赖于时区。 Java 8还引入了默认方法,这些方法允许对PreparedStatement和ResultSet接口进行向后兼容的更改。 那么,我们还没有错过一个清理JDBC中的混乱而仍然保持向后兼容性的巨大机会吗? Java 8可以简单地将这些默认方法添加到PreparedStatement和ResultSet: default public void setLocalDate(int parameterIndex, LocalDate localDate) { if (localDate == null) { setDate(parameterIndex, null); } else { ZoneId utc = ZoneId.of(“UTC”); java.util.Date utilDate = java.util.Date.from(localDate.atStartOfDay(utc).toInstant()); Date sqlDate = new Date(utilDate.getTime()); setDate(parameterIndex, sqlDate, Calendar.getInstance(TimeZone.getTimeZone(utc))); } […]

DBCP(Apache Commons Database Connection Pooling)仍然相关吗?

JDBC 3.0规范讨论了连接(和准备语句)池。 我们有几个独立的Java程序(即我们没有使用应用程序服务器),它们一直使用DBCP来提供连接池。 我们应该继续使用DBCP,还是可以利用JDBC提供的池并摆脱DBCP? 我们正在使用MySQL(Connector / J)并最终将添加SQL Server支持(jTDS); 我们不太可能支持任何其他数据库。 编辑:请参阅下面有关我尝试消除连接池库的注释。 似乎DBCP仍然相关(注意一些评论者推荐C3P0而不是DBCP)。

如何在没有JDBC 4.2驱动程序的情况下从java.sql.Timestamp获取java.time对象?

通过JDBC 4.1或更早版本从数据库中检索java.sql.Timestamp时 ,如何获取/转换为java.time对象? Postgres的开源JDBC驱动程序都没有兼容JDBC 4.2,所以我正在寻找一种方法来使用java.time和JDBC 4.1。

JDBC:简单的MSSql连接示例不起作用

我正在学习Java,需要运行一些简单的东西,通过JDBC从MSSQL中检索一些数据。 我书中的例子不起作用(但它已经有好几年了)以下MS的这个例子对我来说也不起作用: http://msdn.microsoft.com/en-us/library/ms378956(v=sql.90).aspx 这是我的代码: package javasql; import java.sql.*; import java.util.*; public class Program { private static String url = “jdbc:sqlserver://localhost\\SQLExpress;database=Northwind;integratedSecurity=true;”; //private static String userName = “sa”; //private static String password = “myPassword”; /** * @param args the command line arguments */ public static void main(String[] args) { RunDemo(); } public static void RunDemo() { try […]