Tag: jdbc

如何将ascii流绑定到预准备语句

我正在测试官方teradata网站上的 fastload示例代码。 为了谨慎起见,我使用样本上的FastLoad1.csv样本FastLoad1.csv在这里 当我运行此示例代码时,我在此行中收到错误 pstmtFld.setAsciiStream(1, dataStream, -1); // This method is not implemented setAsciiStream如何与预准备语句一起使用? 我正确使用setAsciiStream吗? 这是控制台中的错误消息 Attempting connection to Teradata with FastLoadCSV. Connection to Teradata with FastLoadCSV established. Creating a PreparedStatement object with FastLoadCSV. Created a PreparedStatement object with FastLoadCSV. Checking connection for warnings Streaming FastLoad1.csv SQL State = HY000, Error Code = 1151 com.teradata.jdbc.jdbc_4.util.JDBCException: […]

使用不同的jdbc驱动程序连接到多个数据库

我需要编写一个基于守护进程的java进程(非基于Web),它将连接到Oracle 10G数据库,从中读取一些数据,然后连接到SQL Server数据库并将数据写入表。 听起来很简单,但我对此有几个疑问。 我需要有两个jdbc驱动程序,一个用于连接到Oracle数据库,另一个用于连接到sql server数据库。 sql server jdbc驱动程序是jtds jdbc驱动程序( http://jtds.sourceforge.net/ ),对于Oracle我将使用标准的oracle jdbc驱动程序。 我可能会遇到类路径中可用的两个驱动程序的任何问题吗? 我的猜测是我需要的是一个ConnectionManager类来管理连接和一个客户端DAO类,它将调用相关的方法来获取它需要的连接,具体取决于它是从Oracle读取还是写入SQL Server。 这是一种合理的方法还是有更好的设计/模式? 编辑 好吧,我试图整理一个快速的设计解决方案。 见下图 我认为我遇到的问题是如何提交。 这是处理流程 InvoiceBD从工厂类获取Oracle连接,并调用InvoiceUploadDAO.readData将Oracle连接对象传递给它。 InvoiceBD从工厂类获取SQL Server连接,并调用InvoiceUploadDAO.writeData,将SQL Server连接对象传递给它。 InvoiceBD重用Oracle连接将InvoiceUploadDAO.update状态调用为Oracle数据库上的“完成”设置状态。 InvoiceBD提交Oracle连接。 InvoiceBD提交SQL Server连接。 或者如果出现问题,两个连接对象都会回滚。 那个听起来是对的吗? 谢谢

如何创建可滚动的ResultSet?

我得到了这个简单的代码来从MSSQL Server 2008中检索记录集,由于我设置了ResultSet.TYPE_SCROLL_INSENSITVE,因此必须可以滚动它,与Javadocs中的示例相同: String qry = “SELECT * from tblPeople”; SQLConnection sql = new SQLConnection(); Statement stmt = sql.getConnection().createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executeQuery(qry); 不幸的是,当我想获得像rs.last(); int rowCount = rs.getRow();这样的行数时,我仍然得到了这个Stack Trace rs.last(); int rowCount = rs.getRow(); rs.last(); int rowCount = rs.getRow(); : java.sql.SQLException: ResultSet may only be accessed in a forward direction. at net.sourceforge.jtds.jdbc.JtdsResultSet.checkScrollable(JtdsResultSet.java:304) at […]

不关闭我的JDBC PreparedStatements会导致内存泄漏吗?

我正在使用java.sql PreparedStatements,我想知道以下内容: 在Java中是Pass-by-Value,Dammit! ,以下是Java的Pass-By约定的示例: public void foo(Dog d) { d = new Dog(“Fifi”); // creating the “Fifi” dog } Dog aDog = new Dog(“Max”); // creating the “Max” dog // at this point, aDog points to the “Max” dog foo(aDog); // aDog still points to the “Max” dog 在我的代码中,这出现如下(半Java伪代码): public void method() { PreparedStatement pstmt […]

列索引无效,使用PreparedStatement进行更新

我正在使用PreparedStatement更新表 以下代码完美无缺 pst = conn.prepareStatement(“UPDATE playjdbc SET jlname =’javafx10new’ WHERE jfname = ‘java10′”); int i = pst.executeUpdate(); 但是当我尝试这样的时候它会抛出exception pst = conn.prepareStatement(“UPDATE playjdbc SET jlname =’javafx10new’ WHERE jfname =?”); pst.setString(2, “java10”); // yeah second column is jfname int i = pst.executeUpdate(); 堆栈跟踪 : java.sql.SQLException: Invalid column index at oracle.jdbc.driver.OraclePreparedStatement.setStringInternal(OraclePreparedStatement.java:5330) at oracle.jdbc.driver.OraclePreparedStatement.setString(OraclePreparedStatement.java:5318) at oracle.jdbc.driver.OraclePreparedStatementWrapper.setString(OraclePreparedStatementWrapper.java:282) at com.indus.database.EmployeeDTO.updateData(EmployeeDTO.java:114)

使用Oracle Wallet身份validation从Spring-jdbc连接到Oracle DB

我使用Spring-jdbc和org.apache.commons.dbcp.BasicDataSource使用用户名和密码进行连接。 我想使用BasicDataSource,因为我只有一个连接。 我有这个代码: 现在我必须使用基于Oracle Wallet的身份validation,在没有Spring的简单应用程序测试中我没有问题,但我无法将此新身份validation与Spring集成。 有谁知道我怎么做?

Oracle JDBC预取:如何避免RAM耗尽

使用Oracle java JDBC(ojdbc14 10.2.x),加载具有多行的查询需要永远(高延迟环境。显然,Oracle JDBC中的默认预取是默认大小“10”,这需要每10行一次往返时间。我试图设置一个积极的预取大小,以避免这种情况。 PreparedStatement stmt = conn.prepareStatement(“select * from tablename”); statement.setFetchSize(10000); ResultSet rs = statement.executeQuery(); 这可以工作,但我得到一个内存不足的例外。 我曾经假设setFetchSize会告诉它在它们进入时缓冲“那么多行”,使用每行所需的RAM。 如果我运行50个线程,即使使用16G的-XMX空间,它也会耗尽内存。 感觉几乎像泄漏: Exception in thread “main” java.lang.OutOfMemoryError: Java heap space at java.lang.reflect.Array.newArray(Native Method) at java.lang.reflect.Array.newInstance(Array.java:70) at oracle.jdbc.driver.BufferCache.get(BufferCache.java:226) at oracle.jdbc.driver.PhysicalConnection.getCharBuffer(PhysicalConnection.java:7422) at oracle.jdbc.driver.OracleStatement.prepareAccessors(OracleStatement.java:983) at oracle.jdbc.driver.T4CTTIdcb.receiveCommon(T4CTTIdcb.java:273) at oracle.jdbc.driver.T4CTTIdcb.receive(T4CTTIdcb.java:144) at oracle.jdbc.driver.T4C8Oall.readDCB(T4C8Oall.java:771) at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:346) at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186) at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521) at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:205) at […]

为什么调用Class.forName(“com.mysql.jdbc.Driver”)注册MySQL for JDBC?

正如“Class.forName()”和“Class.forName()。newInstance()”之间的区别所解释的那样? ,Class.forName()方法执行以下操作: 调用Class.forName(String)返回与具有给定字符串名称的类或接口关联的Class对象 但是,如果只是这样做,为什么要调用这个方法以便在MySQL中使用MySQL呢? 没有它我得到以下错误: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/calender at java.sql.DriverManager.getConnection(DriverManager.java:689) at java.sql.DriverManager.getConnection(DriverManager.java:247) at Database.main(Database.java:25) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

DBCPConnectionPool用于SQL Server的控制器服务,jdbcexception

在Windows 7和RHEL 7上测试了NiFi 1.1.1。 后台主题​​就在这里 。 我创建了一个指向SQL Server数据库的DBCPConnectionPool控制器服务,我能够从表中获取数据并将其写入本地磁盘(ExecuteSQL – > ConvertAvroToJSON – > PutFile)。 我的代码: public byte[] getMaxLSN(Connection connection, String containerDB) { String dbMaxLSN = “{? = CALL sys.fn_cdc_get_max_lsn()}”; byte[] maxLSN = null; try (final CallableStatement cstmt = connection.prepareCall(dbMaxLSN);) { cstmt.registerOutParameter(1, java.sql.JDBCType.BINARY); cstmt.execute(); if (cstmt.getBytes(1) == null || cstmt.getBytes(1).length <= 0) { System.out.println("Coudln't retrieve the […]

Spring dataSource bean定义失败

我正在尝试使用Spring的JdbcTemplate来简化在Tomcat中部署并连接到Postgres的Java Web服务中的DAO。 我正在关注Spring的文档 ,我正在尝试在应用程序上下文文件中配置DataSource,如下所示: 我在适当的位置有以下db.properties文件: driverClassName=org.postgresql.Driver url=jdbc:postgresql://pgprod.ecnext.com:5432/manta username=my_user_name password=my_password 当我尝试部署时,我在catalina.out找到以下堆栈跟踪: SEVERE: Context initialization failed org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name ‘dataSource’ defined in ServletContext resource [/WEB-INF/context.xml]: Could not resolve placeholder ‘driverClassName’ at org.springframework.beans.factory.config.PlaceholderConfigurerSupport.doProcessProperties(PlaceholderConfigurerSupport.java:209) at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.processProperties(PropertyPlaceholderConfigurer.java:220) at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:84) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:681) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:656) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:446) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:385) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:284) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4765) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5260) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) […]