Tag: jdbc

哪个更快? 声明或PreparedStatement

通常,在网络中可以找到这样的代码: private static final String SQL = “SELECT * FROM table_name”; …. 并且对于此SQL查询使用PreparedStatement。 为什么? 据我所知,PreparedStatement花时间预编译SQL语句。 事实certificate,Statement比PreparedStatement更快。 或者我错了?

使用JDBC从dbms_output.get_lines获取输出

如何在不使用数据库创建其他对象的情况下使用JDBC从Java应用程序中获取Oracle dbms_output.get_lines的输出?

运行时JDBC程序中的MySQLNonTransientConnectionException

我在Java中有一个JDBC MySQL连接。 我的程序适用于简单的查询执行。 如果我运行相同的程序超过10个小时并执行查询,那么我收到以下MySQLexception: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Connection.close() has already been called. Invalid operation in this state. at sun.reflect.NativeConstructorAccessorImpl.newInstance0( Native Method) com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after statement closed. at sun.reflect.NativeConstructorAccessorImpl.newInstance0( Native Method) 我没有在任何地方使用close()方法。 我创建了数据库连接并永远打开它并始终执行查询。 我没有明确提到连接超时的地方。 我无法确定问题所在。 这是我用于数据库连接的代码: String driver = PropertyReader.getDriver(); String url = dbURLPath; Class.forName(driver); connectToServerDB = DriverManager.getConnection(url); connectToServerDB.setAutoCommit(false); 是什么导致这种例外?

如何正确关闭资源

当我清理一些代码时,FindBugs向我指出了一些使用Connection,CallableStatement和ResultSet对象的JDBC代码。 这是该代码的一个片段: CallableStatement cStmt = getConnection().prepareCall(“…”); … ResultSet rs = cStmt.executeQuery(); while ( rs.next() ) { … } cStmt.close(); rs.close(); con.close(); FindBugs指出这些应该在finally块内。 我开始重构我的代码来做这个,我开始想知道如何处理finally块中的代码。 创建CallableStatement的Connection对象可能会抛出exception,将ResultSet对象保留为null。 当我尝试关闭ResultSet时,我会得到一个NullPointerException,而我的Connection将永远不会被关闭。 实际上, 这个线程提出了相同的概念,并表明将close()调用包装在null检查中是个好主意。 但是其他可能的例外呢? 根据Java API规范,如果发生数据库错误,Statement.close()可以抛出SQLException。 因此,即使我的CallableStatement不为null并且我可以成功调用它上的close(),我仍然可能会得到一个exception并且没有机会关闭我的其他资源。 我能想到的唯一“故障安全”解决方案是将每个close()调用包装在自己的try / catch块中,如下所示: finally { try { cStmt.close(); } catch (Exception e) { /* Intentionally Swallow Exception */ } try { rs.close(); } catch […]

从Java访问Visual FoxPro数据库

我一直试图从Java访问Visual Fox Pro数据库一周。 我变得绝望,因为我的项目预算和时间框架非常紧密。 (正如任何其他项目,我猜,哈哈哈) 我有.dbf , .cdx和.fpt文件。 我需要能够查找记录,提取数据和更新数据。 我没有VFP许可证。 我希望有人可以使用一些指针或工作示例。 如果唯一的方法是购买一个司机我会愿意根据收到的建议考虑它。 这是我尝试过的简短描述。 我发现这个xBaseJ:java对象可以读取和写入dBase文件 。 但它并没有支持CDX索引文件。 还发现此示例访问dbf 。 但是我的测试显示了这个exception: java.sql.SQLException: [Microsoft][Controlador ODBC dBase] La tabla externa no tiene el formato esperado. 我想这个错误的英文翻译可能是这样的: java.sql.SQLException: [Microsoft][ODBC dBase Driver] External table is not in the expected format 由于这个错误,我认为我需要一个更新的驱动程序。 在这个微软页面中说他们不再拥有ODBC驱动程序,并且每个人都应该使用OLE DB Provider。 问题是我还没有找到一种从java中使用它的方法。 据我所知, 没有办法直接做到。 在这里发现有人在谈论JACOB“thingy”,有人评论需要创建一个C ++或C#“某事”才能做我需要的东西。 我想他正在谈论JACOB项目:一个JAva-COM桥 。 […]

什么时候应该指定setFetchSize()?

我看到很多JDBC / MySQL的“最佳实践”指南告诉我指定setFetchSize()。 但是,我不知道何时指定,以及要指定的内容(语句,结果集)。 Statement.setFetchSize() or PreparedStatement.setFetchSize() ResultSet.setFetchSize() 在这两个中,我应该指定什么? 从javadoc和oracle文档中 ,这是我对“何时”感到困惑的地方 的Javadoc 默认值由创建结果集的Statement对象设置。 可以随时更改提取大小。 Oracle Doc 生成结果集后对语句对象的提取大小所做的更改将不会影响该结果集。 如果我错了,请纠正我。 这是否意味着setFetchSize在执行查询之前只是Affective?(因此,ResultSet上的setFetchSize是无用的?但是恰好“可以随时更改获取大小”?)

了解神秘的Oracle JDBC错误 – ORA-00911:无效字符

我正在制作Java 1.6-JDBC-Oracle 11代码。 我创建了一个名为employee的表,其中包含id,name和age。 我收到错误 – ORA-00911:无效字符。 我怎样才能解决这个问题 ? 这是我的代码 – import java.sql.*; import java.util.Properties; import java.io.IOException; import java.io.FileInputStream; public class HelloOracle { static String query = “SELECT emp_id, emp_name, emp_age ” + “FROM employee;”; public static void main(String[] args) { String username = “”; String password = “”; Properties prop = new Properties(); try […]

如何在java中进行连接池?

我试图理解connection pooling in java ,我在我的应用程序中使用jsp, servlet and tomcat 6 server 。 我在java class dbconnection.java编写了以下代码: 我在windows Xp OS中使用类型4 jdbc连接与oracle 10g EE import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class dbconnection { public Connection con = null; public Connection getConnection() throws Exception, SQLException { try { Class.forName(“oracle.jdbc.driver.OracleDriver”); con=DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:abc”,”abc”, “abc”); } catch(Exception e) { } return con; } […]

GlassFish JDBC领域组成员

我一直忙于在GlassFish 3.1上设置身份validation,特别是JDBC领域。 我一直在假设: “用户”表包含登录名(“email_address”)和密码(“密码”) “组”表包含组名列表(“名称”) “User_Group”表与用户和组匹配。 我无处可配置“User_Group”表,但是我想知道服务器如何能够将用户与组匹配。 不用说它不起作用。 然而,仔细检查表明: “用户”表包含登录名(“email_address”)和密码(“密码”) “组”表包含登录名(“email_address”) 作为主键 ,以及以逗号分隔的组名列表(“Administrator,User”)在一列中(“组”) 这是正确的,如果是这样,为什么要经历创建单独的“组”表的麻烦? 由于看起来每个登录只能有一个组列表(“email_address”),只是简单地将一个名为“组”的列添加到“用户”表并完全丢弃“组”表就不那么容易了吗? 谢谢!

MySQL通过Java代理连接

我正在开发客户端 – 服务器软件,其中客户端连接到数据库服务器,如下所示。 … try { Class.forName(“com.mysql.jdbc.Driver”); Connection conexion = DriverManager.getConnection(“jdbc:mysql://localhost/agenda”, “root”, “LA_PASSWORD”); }catch…. … 两个应用程序始终位于同一本地网络上。 我遇到的问题是当本地网络使用代理时,在这种情况下MySQL连接失败。 如何在本地网络上代理时使用Java编程语言,MySQL数据库进行连接? 谢谢您的帮助。 问候!