Questions tagged «jdbc»

JDBC(Java数据库连接)是基本的API,通过使用Java编程语言执行SQL语句,可以与SQL数据库服务器进行交互。

15
声明和PreparedStatement之间的区别
“ Prepared Statement”是Statement的稍微强大一点的版本,并且应始终至少与Statement一样快捷且易于处理。 准备好的语句可能已参数化 大多数关系数据库通过四个步骤来处理JDBC / SQL查询: 解析传入的SQL查询 编译SQL查询 规划/优化数据采集路径 执行优化的查询/获取并返回数据 对于发送到数据库的每个SQL查询,一个Statement将始终执行上述四个步骤。一条Prepared Statement预执行上述执行过程中的步骤(1)-(3)。因此,在创建Prepared Statement时,会立即执行一些预优化。这样做的目的是减轻执行时数据库引擎的负担。 现在我的问题是-“使用预处理语句还有其他好处吗?”
222 java  jdbc 

5
如何使用Spring的JDBCTemplate有效执行IN()SQL查询?
我想知道是否有使用Spring的JDBCTemplate进行IN()查询的更优雅的方法。目前,我正在执行以下操作: StringBuilder jobTypeInClauseBuilder = new StringBuilder(); for(int i = 0; i < jobTypes.length; i++) { Type jobType = jobTypes[i]; if(i != 0) { jobTypeInClauseBuilder.append(','); } jobTypeInClauseBuilder.append(jobType.convert()); } 这是很痛苦的,因为如果我只有九行用于为IN()查询构建子句。我想要类似预准备语句的参数替换
177 java  sql  spring  jdbc  jdbctemplate 

6
在准备好的语句中使用“ like”通配符
我正在使用准备好的语句来执行mysql数据库查询。我想基于各种关键字实现搜索功能。 为此,我需要使用LIKE关键字,这一点我知道很多。而且我之前也使用过预处理语句,但是我不知道如何使用它,LIKE因为从以下代码中,我将在哪里添加'keyword%'? 我可以直接在pstmt.setString(1, notes)as (1, notes+"%")或类似的东西中使用它吗?我在网络上看到很多帖子,但在任何地方都没有好的答案。 PreparedStatement pstmt = con.prepareStatement( "SELECT * FROM analysis WHERE notes like ?"); pstmt.setString(1, notes); ResultSet rs = pstmt.executeQuery();

13
如何获取PreparedStatement的SQL?
我有一个带有以下方法签名的常规Java方法: private static ResultSet runSQLResultSet(String sql, Object... queryParams) 它将打开一个连接,PreparedStatement使用sql语句和queryParams可变长度数组中的参数构建一个,运行它,然后将ResultSet(CachedRowSetImpl),关闭连接,然后返回缓存的结果集。 我在记录错误的方法中有异常处理。我将sql语句记录为日志的一部分,因为它对调试非常有帮助。我的问题是,记录String变量会sql记录带有?而不是实际值的模板语句。我想记录实际已执行(或尝试执行)语句。 所以...有什么方法可以获取将由a运行的实际SQL语句PreparedStatement?(没有自己构建它。如果我找不到访问PreparedStatement'sSQL的方法,我可能最终会在自己的catches中最终构建它。)

16
可以异步调用jdbc吗?
我想知道是否有一种方法可以对数据库进行异步调用吗? 例如,假设我有一个很大的请求,需要很长时间来处理,我想发送请求并在请求将返回值时(通过传递侦听器/回调等)接收通知。我不想阻止等待数据库答复。 我不认为使用线程池是一种解决方案,因为它无法扩展,在大量并发请求的情况下,这会产生大量线程。 我们正面临着网络服务器的此类问题,并且已经找到解决方案,方法是使用select / poll / epoll系统调用来避免每个连接只有一个线程。我只是想知道如何在数据库请求中具有类似的功能? 注意:我知道使用FixedThreadPool可能是一个不错的解决方法,但令我惊讶的是,没有人开发出真正异步的系统(无需使用额外的线程)。 **更新** 由于缺少实际可行的解决方案,我决定自己创建一个库(finagle的一部分):finagle-mysql。它基本上解码/解码mysql请求/响应,并在后台使用Finagle / Netty。即使有大量连接,它的扩展性也非常好。

28
ORA-12505,TNS:侦听器当前不知道连接描述符中给出的SID
我已经在Windows 7 64位操作系统中安装了Oracle 11g Express Edition Release 2,并尝试执行JDBC程序,然后出现以下错误: java.sql.SQLException: Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:412) at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531) at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at com.jlcindia.jdbc.JDBCUtil.geOracleConnection(JDBCUtil.java:28) at Lab3O.main(Lab3O.java:15) Caused …
153 oracle  jdbc 


5
如何在JDBC中使用try-with-resources?
我有一种使用JDBC从数据库中获取用户的方法: public List<User> getUser(int userId) { String sql = "SELECT id, name FROM users WHERE id = ?"; List<User> users = new ArrayList<User>(); try { Connection con = DriverManager.getConnection(myConnectionURL); PreparedStatement ps = con.prepareStatement(sql); ps.setInt(1, userId); ResultSet rs = ps.executeQuery(); while(rs.next()) { users.add(new User(rs.getInt("id"), rs.getString("name"))); } rs.close(); ps.close(); con.close(); } catch …


12
'0000-00-00 00:00:00'不能表示为java.sql.Timestamp错误
我有一个包含日期的数据库表 (`date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'). 我正在使用MySQL。有时从程序中将没有日期的数据传递到数据库。因此,0000-00-00 00:00:00 当使用带错误的日期列调用表数据时,日期值会自动分配给它 ...'0000-00-00 00:00:00' can not be represented as java.sql.Timestamp....... 在插入数据时,我尝试将null值传递给日期,但是将其分配给当前时间。 有什么办法可以在ResultSet不更改表结构的情况下获得?
141 java  mysql  jdbc  timestamp 


4
JPA或JDBC,它们有何不同?
我正在学习Java EE,并且下载了带有glassfish的日食。我看到了一些示例,还阅读了Oracle文档,以全面了解Java EE5。连接到数据库非常简单。我打开了一个动态Web项目,创建了一个会话EJB,我使用EntityManager并通过get方法可以访问存储的数据表。 对于我的下一个项目,我创建了一个简单的类,然后访问一些数据库表。我遇到的第一个问题是PersistenceUnit属性只能由EJB,Servlet等识别,而不是简单的Java类。因此,我无法使用EntityManager方式(或者可以吗?) 我被要求通过“ JDBC”方式进行操作。我遇到的第一个问题是获得与数据库的连接。似乎所有这些都必须经过硬编码。我有一个persistence.xml,可用来轻松配置数据库连接。甚至为数据库设置驱动程序都很容易。JDBC中也没有用于访问表实体的get / set方法。 我如何了解JPA和与JDBC相关的持久性?JPA的目的是什么?为什么会有set / get方法?有人可以阐明这两者的本质吗?没有“行话”的利弊是什么?还请提出一些链接。一个简单的Google搜索JPA和JDBC差异使我进入了一些无法理解的充满“术语”的网站:(
119 java  jpa  jdbc 


3
java:comp / env /做什么?
我一天中花了太多时间试图找出一些连接JNDI工厂bean的错误。问题原来是,而不是这个... <bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/loc"/> </bean> 我实际上已经写过了... <bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="jdbc/loc"/> </bean> 我推断java:comp/env/也许引用了一些环境变量并使之生效,以便最终查看我的上下文文件。唯一的区别是java:comp/env/。从专家的口中,这是做什么的? java:comp/env/在值中没有前缀的情况下,我将收到一条错误消息,指出“名称jdbc在此上下文中未绑定”。
116 spring  jdbc  jndi  factory 

13
java.sql.SQLException:-ORA-01000:已超过最大打开游标
我收到了ORA-01000 SQL异常。因此,我对此有一些疑问。 最大打开游标是否与JDBC连接的数量完全相关,还是与我们为单个连接创建的语句和结果集对象相关?(我们正在使用连接池) 有没有一种方法可以配置数据库中的语句/结果集对象的数量(如连接)? 是否建议在单线程环境中使用实例变量statement / resultset对象而不是方法local statement / resultset对象? 在循环中执行准备好的语句是否会导致此问题?(当然,我本可以使用sqlBatch的)注:一旦循环结束,pStmt将关闭。 { //method try starts String sql = "INSERT into TblName (col1, col2) VALUES(?, ?)"; pStmt = obj.getConnection().prepareStatement(sql); pStmt.setLong(1, subscriberID); for (String language : additionalLangs) { pStmt.setInt(2, Integer.parseInt(language)); pStmt.execute(); } } //method/try ends { //finally starts pStmt.close() } //finally ends …
115 java  oracle  jdbc 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.