我正在从Java应用程序访问Oracle数据库,当我运行我的应用程序时出现以下错误: java.sql.SQLException:ORA-00604:在recursionSQL级别1发生错误ORA-01882:找不到时区
我正在使用CsvJdbc (它是csv-files的JDBC驱动程序)来访问一个csv文件。 我不知道csv文件包含多less列。 我怎样才能得到列的数量? 有没有JDBC的function呢? 我在java.sql.ResultSet中找不到任何方法。 为了访问文件,我使用类似于CsvJdbc网站上的例子的代码。
我应该使用哪个JDBC连接池库用于新的应用程序项目(而不是Web应用程序)? Apache DBCP有足够的未解决的问题推到2.0我认为。 C3P0的开发似乎停止了。 而且他们两个看起来都比较慢 。 Proxool已经死了。 DBPool几乎没有社区(至less我没有发现任何公共的 – 没有论坛,没有邮件列表…) 如果没有Tomcat, Apache Tomcat池看起来是不可用的 我在Oracle网站上发现了SQL Datasources文章,但它似乎只能应用于像servlet和Web服务这样的容器中运行的applet。 我应该selectBoneCP吗? 我没有任何巨大的要求。 我只需要一个简单易用的数据库连接池,就是在积极的开发中。 图书馆,作者可以回应错误报告,回答一些具体的问题等。 顺便说一句,实际上,我只使用MySQL。 我发现,MySQL驱动程序支持DriverManager接口,但我不确定它是否真的集中连接。
可能重复: 如何在JDBC中获取插入ID? 嗨,我使用JDBC通过Java连接数据库。 现在,我做了一些插入查询,我需要得到最后插入的值的id(所以,在stmt.executeUpdate )。 我不需要像SELECT id FROM table ORDER BY id DESC LIMIT 1 ,因为我可能有并发问题。 我只需要检索与最后一个插入关联的id(关于我的Statement的实例)。 我试过这个,但似乎不适用于JDBC: public Integer insertQueryGetId(String query) { Integer numero=0; Integer risultato=-1; try { Statement stmt = db.createStatement(); numero = stmt.executeUpdate(query); ResultSet rs = stmt.getGeneratedKeys(); if (rs.next()){ risultato=rs.getInt(1); } rs.close(); stmt.close(); } catch (Exception e) { e.printStackTrace(); errore = e.getMessage(); […]
在information_schema数据库中find一个高峰,并在我的一个宠物项目的元数据中find最高点,但我很难理解create schema命令和create database命令之间的差异(如果有的话)。 有什么区别? 如果不是,这是关系数据库的一个相当典型的行为模式(我听说对于其他数据库,如Oracle,模式存在于数据库中,而不是与数据库处于同一级别)。 谢谢!
如果我尝试做,我会得到一个exception(见下文) resultset.getString("add_date"); 对于包含DATETIME值为0000-00-00 00:00:00(DATETIME的准空值)的MySQL数据库的JDBC连接,尽pipe我只是试图以stringforms获取该值,而不是目的。 我这样做了 SELECT CAST(add_date AS CHAR) as add_date 哪个工作,但似乎很傻…有没有更好的方法来做到这一点? 我的意思是,我只想要原始的DATETIMEstring,所以我可以自己parsing它。 注意:这里是0000进来的地方:(来自http://dev.mysql.com/doc/refman/5.0/en/datetime.html ) 非法的DATETIME,DATE或TIMESTAMP值将转换为相应types(“0000-00-00 00:00:00”或“0000-00-00”)的“零”值。 具体的例外是这一个: SQLException: Cannot convert value '0000-00-00 00:00:00' from column 5 to TIMESTAMP. SQLState: S1009 VendorError: 0 java.sql.SQLException: Cannot convert value '0000-00-00 00:00:00' from column 5 to TIMESTAMP. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) at com.mysql.jdbc.ResultSetImpl.getTimestampFromString(ResultSetImpl.java:6343) at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5670) at […]
可能吗? 我可以在连接url上指定它吗? 怎么做?
我们使用JDBC的标准代码部分是… Connection conn = getConnection(…); Statement stmt = conn.conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rset = stmt.executeQuery (sqlQuery); // do stuff with rset rset.close(); stmt.close(); conn.close(); 问题1:使用连接池时,是否应该closures连接? 如果是这样,是不是汇集失地的目的? 如果不是,那么DataSource如何知道Connection的特定实例什么时候被释放并且可以被重用呢? 我对这个有点困惑,任何赞赏的指针。 问题2:以下方法是否接近标准? 看起来像试图从池中获得连接,如果无法build立数据源,则使用旧式的DriverManager。 我们甚至不知道哪个部分在运行时被执行。 重复上面的问题,是否应该closures从这种方法出来的连接? 谢谢, – MS。 synchronized public Connection getConnection (boolean pooledConnection) throws SQLException { if (pooledConnection) { if (ds == null) { try { Context […]
Spring 3.2中不推荐使用JdbcTemplate中的queryforInt / queryforLong方法。 我找不到为什么或什么被认为是使用这些方法取代现有代码的最佳实践。 一个典型的方法: int rowCount = jscoreJdbcTemplate.queryForInt( "SELECT count(*) FROM _player WHERE nameKey = ? AND teamClub = ?", playerNameKey.toUpperCase(), teamNameKey.toUpperCase() ); OK上面的方法需要重写如下: Object[] params = new Object[] { playerNameKey.toUpperCase(), teamNameKey.toUpperCase() }; int rowCount = jscoreJdbcTemplate.queryForObject( "SELECT count(*) FROM _player WHERE nameKey = ? AND teamClub = ?", params, Integer.class); 显然,这种弃用使得JdbcTemplate类变得更简单了(或者做到了?)。 QueryForInt总是一个方便的方法(我猜),已经有很长一段时间了。 […]
我需要find我的MySQL用户名。 当我打开MySQL命令行客户端时,它只会询问我的密码。 我不记得我的用户名。 为了与JDBC连接,我需要URL,主机和端口号。 我在哪里可以find所有这些?