Tag: jdbc

JdbcTemplate多个结果集

我试图找到一种简单的方法来处理Stored Procedures / SQL返回多个结果集。 我一直在使用SimpleJdbcOperations#queryForList()方法,但是这只会将第一个结果集作为List<Map> 。 我需要能够获得多个结果集,理想情况下是List<Map>的Collection 。 我写的程序是一个中间件组件,所以我不知道SQL将是什么,或结果集的forms。 我想我必须使用JdbcOperations类,它允许我访问更多方法,包括execute(CallableStatementCreator csc, CallableStatementCallback action)但现在我被卡住了。 CallableStatementCallback callback = new CallableStatementCallback() { @Override public T doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { boolean results = cs.execute(request); while(results) { ResultSet result = cs.getResultSet(); results = cs.getMoreResults(); } return null; } }; 我不确定如何使用该方法,或者如何处理ResultSet以获取我的通用List<Map> 。

为什么我需要连接来创建PreparedStatements?

出于多种原因 ,我想使用准备好的陈述。 但是,我想创建一个如下所示的方法: /* This opens a connection, executes the query, and closes the connection */ public static void executeNonQuery(String queryString); 换句话说,我希望我的应用程序逻辑只需要制定查询和feed参数,而不是处理连接和语句。 但是,PreparedStatements是从连接对象创建的,所以我当前被迫使用String.format()准备查询字符串 – 但是很丑陋且危险。 有没有办法在不使用String.format()的情况下做我想做的事情?

date_trunc org.postgresql.util.PSQLException:错误:语法错误在“$ 1”或附近

运行此Java / JDBC代码时出现此错误。 任何想法如何绕过它? 好像它在抱怨date_trunc函数中的参数? org.postgresql.util.PSQLException:错误:语法错误在“$ 1”或附近位置:100 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryEx ecutorImpl.java:2161) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutor Impl.java:1890) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.ja va:255) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Stat ement.java:560) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(Abstract Jdbc2Statement.java:417) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc 2Statement.java:302) Java代码: static PreparedStatement searchErrorPP = connection.prepareStatement( “select count(*) from tracking where date_trunc(‘day’, run_date) <= date_trunc('day', timestamp ?)"); public static int queryCount(java.util.Date date) throws SQLException { PreparedStatement ps = null; try […]

我应该关闭来自数据源的连接吗?

当我执行dataSource.getConnection()时,当我希望连接返回池(而不是关闭)时,调用close方法是否返回到池的连接或实际关闭它?

在Oracle JDBC中是否可以批量存储过程调用并检索OUT参数?

我在Oracle 11g数据库中有一个存储过程,如f(a IN,b IN,c OUT)。 我想在批处理模式下从JDBC调用它,然后读取所有OUT变量。 这可能吗? 到目前为止我有这个 CallableStatement statement = connection.prepareCall(“f(?, ?, ?)”); for(Item i : items) { int i = 0; statement.setString(++i, item.getA()); statement.setString(++i, item.getB()); statement.registerOutParameter(++i, Types.NUMERIC); statement.addBatch(); } statement.executeBatch(); int[] answers = ? 谢谢

不通过执行Java Applikation在ARM上加载JDBC库

好的我们在带有外部Sqlite驱动程序库的unix主目录中有一个Java应用程序“app.jar”。 – myapp/app.jar – myapp/lib/sqlite-jdbc-3.8.7.jar 设备Udoo ARM Cortex V9与Raspberry Pi相似。 java -version java version “1.8.0_06 Java(TM) SE Runtime Environment (build 1.8.0_06-b23) Java HotSpot(TM) Client VM (build 25.6-b23, mixed mode) 尝试运行此应用程序失败。 java -classpath lib/sqlite-jdbc-3.8.7.jar -jar myapp.jar 似乎应用程序找不到库。 java.lang.Exception: No native library is found for os.name=Linux and os.arch=arm at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:284) at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:65) 直到现在我都找不到解决方案。 可以将.jar文件复制到jdk / lib文件夹吗? 编辑: […]

java.sql.SQLException:没有为jdbc找到合适的驱动程序:hive:// localhost:10000 / default

我是Hadoop和生态系统的新手。 我正在尝试用Java编写Hive。 这是我的简单代码,仅用于测试驱动程序: import java.sql.DriverManager; import java.sql.SQLException; public class PrepareHiveTable { private static String driverName = “org.apache.hive.jdbc.HiveDriver”; public static void main(String[] args) throws ClassNotFoundException, SQLException { Class.forName(driverName); Connection con = DriverManager.getConnection(“jdbc:hive://localhost:10000/default”, “”, “”); } } 我已将org.apache.hive.jdbc.HiveDriver导入到类路径中,这是我的DriverManager上的驱动程序列表: org.apache.calcite.avatica.remote.Driver@45ff54e6 org.apache.calcite.jdbc.Driver@3581c5f3 org.apache.derby.jdbc.AutoloadedDriver40@4f8e5cde com.mysql.jdbc.Driver@6f75e721 org.apache.hive.jdbc.HiveDriver@69222c14 但是,当我运行代码时,我收到此错误: Exception in thread “main” java.sql.SQLException: No suitable driver found for jdbc:hive://localhost:10000/default at java.sql.DriverManager.getConnection(DriverManager.java:689) […]

在一个事务中执行两个不同的查询

我试图在一个Statement执行两个插入查询,将它们放在一个事务中。 我正在查看addBatch方法,但如果我理解正确,它可以与单个PreparedStatement一起使用,使用不同的参数多次执行相同的插入,或者在Statement对象上使用以向批处理添加更多查询,但没有添加参数的能力(所以我可能能够在sql字符串中添加值.SQL注入风格)。 我也试过一种简单的方法,在一个sql语句中写入两个插入( insert into table1 values(?, ?); insert into table2 values(?, ?); ),但这样PreparedStatement只能看到前两个参数,并且试图设置第3和第4次抛出exception。

在JDBC中缓存

我想在JDBC中使用缓存。 我怎样才能做到这一点? 是否有任何内置机制或我是否必须使用第三方解决方案? 使用JDBC进行缓存的最佳做法是什么。 谢谢你,杰克 编辑:CachedRowSet怎么样? http://docs.oracle.com/javase/tutorial/jdbc/basics/cachedrowset.html

安全的JDBC连接

我有一个普通的Java应用程序,应该连接到数据库。 我不想在属性文件中存储数据库连接URL和用户名/密码,也不想在应用程序中对其进行硬编码。 解决这个问题的常用方法是什么? Java应用程序如何在不泄露用户名/密码的情况下连接到数据库?