Tag: jdbc

测量Java应用程序中的sql执行时间

有没有一种简单的方法来测量JDBC执行的所有sql语句的执行时间并将结果打印到输出? 有些人可能会建议我使用AOP来做到这一点,但我试图尽可能避免这种情况。 还有另一种方式吗?

Apache Derby – java.sql.SQLException:无法启动数据库

首先,这是我第一次使用Apache Derby。 我正在使用netbeans,愿意使用嵌入式apache derby,我按照以下教程配置和安装数据库。 然后,我使用项目属性将derby.jar文件附加到我的项目中。 http://netbeans.org/kb/docs/ide/java-db.html#starting 附加的图像将在netbeans中显示我的数据库状态 我的数据库名称是“contact”。 表名是“FRIENDS”。 以下是我的测试代码 **DatabaseConnector.java** import java.sql.*; public class DataBaseConnector { private Connection con; public DataBaseConnector() { } private void createConnection() { try { Class.forName(“org.apache.derby.jdbc.EmbeddedDriver”); con = DriverManager.getConnection(“jdbc:derby:C:/Users/yohan/.netbeans-derby/contact”,”yohan”,”xyz”); } catch(Exception e) { e.printStackTrace(); } } private void closeConnection() { try { con.close(); } catch(Exception e) { e.printStackTrace(); } } […]

com.microsoft.sqlserver.jdbc.SQLServerException:结果集没有当前行

我试图在结果集的第一行中获取第一列。 我知道我可以改变我的SQL查询来做到这一点。 但不是。 我想要全桌,我只想做我刚刚提到的。 注 – Winners是我的SQL查询中的别名列。 错误基本上是 – com.microsoft.sqlserver.jdbc.SQLServerException: The result set has no current row. 更多的错误 – at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190) at com.microsoft.sqlserver.jdbc.SQLServerResultSet.verifyResultSetHasCurrentRow(SQLServerResultSet.java:483) at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getterGetColumn(SQLServerResultSet.java:2047) at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:2082) at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:2067) at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getString(SQLServerResultSet.java:2401) 这是我到目前为止所尝试的,我需要你的帮助来解决它 – ResultSet rs = statement.executeQuery(“get a whole table”); //pseudocode try{ rs.next(); numberOne = rs.getString(“Winners”); rs.first(); } catch (SQLException e) { e.printStackTrace(); }

在HttpSession中存储JDBC连接

我最近inheritance了一些代码,我在其中发现了一个在filter中初始化的JDBC连接,并为每个用户添加了HttpSession。 然后,在Web应用程序的各个部分中为用户重用该连接。 这立即让我感觉像代码味道。 我想回到编写它的开发人员并解释他为什么不应该这样做……但也许我不太确定自己…… 除了占用内存中不必要的空间并可能限制与数据库的可用连接之外,还有其他原因导致您不在会话中存储JDBC连接吗?

如何从JDBC检索序列元数据?

我试图从Java代码(使用基本JDBC)检索我的Oracle DB的不同类型的元数据。 例如,如果我想检索带有_FOO后缀的表列表,我可以执行以下操作: Connection connection = dataSource.getConnection(); DatabaseMetaData meta = connection.getMetaData(); ResultSet tables = meta.getTables(connection.getCatalog(), null, “%_FOO”, new String[] { “TABLE” }); // Iterate on the ResultSet to get information on tables… 现在,我想从我的数据库中检索所有序列 (例如,所有序列都命名为S_xxx_FOO )。 我怎么会这样做,因为我没有在DatabaseMetaData看到与序列相关的任何内容? 我是否必须运行select * from user_sequences等查询?

Spring NamedParameterJDBCTemplate重用Prepared Statements

我使用Spring NamedParameterJdbcTemplate从表中获取一些值。 出于某种原因,查询在我的Java应用程序中运行速度非常慢,而不是在SQL Management Studio上运行相同的查询。 我还注意到在分析器中,准备好的语句不会被重用。 如果我多次在我的JAVA应用程序中运行相同的查询,我会看到正在执行的不同预处理语句。 因此,不确定为什么语句不会被重用。 性能是否因为我在查询中使用IN子句而变慢? 这是我的示例java代码 StringBuilder vQuery = new StringBuilder(); vQuery.append(” SELECT SUM(Qty) FROM vDemand”); vQuery.append(” WHERE ProductID = :ProductID”); vQuery.append(” AND [Date] >= :StartDate AND [Date] <= :EndDate"); vQuery.append(" AND CustomerID IN ( :CustomerID )"); MapSqlParameterSource vNamedParameters = new MapSqlParameterSource(); vNamedParameters.addValue("ProductID", aProductID); vNamedParameters.addValue("CustomerID", aCustomerlIDs); vNamedParameters.addValue("StartDate", aDate, Types.TIMESTAMP); vNamedParameters.addValue("EndDate", aDate, […]

比较jdbc中的结果集

在我的java代码中,我有两个结果集rs1和rs2获得如下: rs1 = statement.executeQuery(“select * from tableA”) rs2 = statement.executeQuery(“select * from tableB”) 两个表都具有相同的模式,包括字段ID,名称和地址,我想比较两个结果集。 我可以直接做rs1 == rs2吗? 如果没有我应该如何比较两个结果集? 一些例子将非常感激。 谢谢

使用Types.NVARCHAR和oracle JDBC驱动程序来处理Cyrillic字符

我正在尝试使用“JDK 1.6中的国家字符集类型数据的新方法” ,以获得处理西里尔字符的标准JDBC解决方案,但是当执行到达任何具有NVARCHAR类型的行时,例如: preparedSelect.setObject(3, “суббота”, Types.NVARCHAR); 然后我得到这个例外: java.sql.SQLException: Invalid column type at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70) at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:131) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:197) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:261) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:269) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:490) at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:7922) at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:7502) at oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:7975) at oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject(OraclePreparedStatementWrapper.java:222) 我也尝试使用setNString(),但我得到一个更奇怪的例外: java.lang.AbstractMethodError: oracle.jdbc.driver.OraclePreparedStatementWrapper.setNString(ILjava/lang/String;)V 如果我使用带有常规Types.VARCHAR的java -Doracle.jdbc.defaultNChar = true myApplication,则会正确存储俄语单词。 但是使用-Doracle.jdbc.defaultNChar = true不是一个选项,因为我正在处理遗留应用程序,我无法控制运行生产环境,我只是在编写一个组件。 此外,这篇“NChar How-to自述文件”指出“这种转换对性能产生了重大影响”。 因此,默认情况下,只有不到1%的表需要进行此转换而不是智能选择时,将所有内容设置为NChar。 我正在使用oracle瘦驱动程序,我的classpath中有ojdbc6.jar和orai18n.jar。 我正在寻找标准的JDBC解决方案。 我不能在它们上使用任何带有“oracle”的方法或常量。 OraclePreparedStatement对我来说不是一个选项。 我尝试使用Types.NVARCHAR与MSSQL Server,它运行正常。

准备好的语句和JDBC驱动程序

我在Java中的准备语句中有以下问题。 当SQL Query没有任何Where子句时,使用Prepared Statements是否有益? 假设一个简单的查询Select * from tablename; 据说Prepared Statement被编译一次,只有值被第二次替换。 因此,它可以更快,因为可以跳过查询validation和编译步骤。 编译表格存储在哪里? 这个编译表格的生命周期是多少?

jTDS JDBC驱动程序:getNString()抛出错误

我正在使用jtDS JDBC驱动程序,当我调用ResultSet.getNString(index); 我得到以下exception: run: Exception in thread “main” java.lang.AbstractMethodError: net.sourceforge.jtds.jdbc.JtdsResultSet.getNString(I)Ljava/lang/String; at javasql.ProductsController.PrePopulate(ProductsController.java:51) at javasql.ProductsController.(ProductsController.java:37) at javasql.Program.main(Program.java:25) Java Result: 1 BUILD SUCCESSFUL (total time: 6 seconds) 当我使用getString(index)它工作正常..它只有getNString()我遇到问题,我的MSSQL表中的列被定义为NVarChar 。 那么,是什么给出的? jtDS不支持getNString()吗? 也许它通过相同的getString()函数获得VarChar和NVarChar ? 编辑: 相关的unicode问题..我可以看到尝试使用Unicode无法插入任何一个。 我的列定义为nvarchar(255) ,但以下INSERT语句不起作用: private final String INSERT_FORMAT = “INSERT INTO Products (Name, Price, QuantityInStock) VALUES (N’%s’, %s, %s)”; public void Insert(Product p) { […]