Tag: oracle

将CLOB插入Oracle数据库

我的问题是:你怎么解决ORA-01704: string literal too long在CLOB插入(或在查询中做任何事情)时ORA-01704: string literal too long错误? 我想要这样的查询: INSERT ALL INTO mytable VALUES (‘clob1’) INTO mytable VALUES (‘clob2’) –some of these clobs are more than 4000 characters… INTO mytable VALUES (‘clob3’) SELECT * FROM dual; 当我尝试使用实际值但我得到ORA-01704: string literal too long了。 这很明显,但是如何插入clobs(或者使用clob执行任何语句)? 我试过看这个问题 ,但我认为它没有我想要的东西。 我拥有的clobs在List ,我遍历它们来制作语句。 我的代码如下: private void insertQueries(String tempTableName) throws FileNotFoundException, DataException, […]

SQLException:没有为jdbc找到合适的驱动程序:oracle:thin:@ // localhost:1521 / orcl

我正在尝试开发一个从eb服务类连接到Oracle数据库的Java EE应用程序,但我遇到了一个 SQLException: No suitable driver found for jdbc:oracle:thin:@//localhost:1521/orcl 我在类路径中有ojdbc6.jar ,我也在JBoss部署文件夹中validation了这一点。 我的应用程序EAR由WAR组成。 这有什么问题(根本原因)? 请帮忙。 persistence.xml中的连接URL: > “jdbc:oracle:thin:@//localhost:1521/orcl” 堆栈跟踪: 16:06:32,687 WARN [com.arjuna.ats.arjuna] (default-workqueue-1) ARJUNA012125: TwoPhaseCoordinator.beforeCompletion – failed for SynchronizationImple: javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Could not open connection at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1361) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final] at Caused by: java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@//localhost:1521/orcl at java.sql.DriverManager.getConnection(DriverManager.java:602) [rt.jar:1.6.0_26] at java.sql.DriverManager.getConnection(DriverManager.java:154) [rt.jar:1.6.0_26] at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:173) […]

与Oracle DB连接时,网络适配器无法建立连接

尝试通过JDBC连接远程Oracle数据库时,我收到以下exception: java.sql.SQLRecoverableException: IO-fout: The Network Adapter could not establish the connection at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:419) at oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:536) at oracle.jdbc.driver.T4CConnection.(T4CConnection.java:228) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521) at java.sql.DriverManager.getConnection(DriverManager.java:322) at java.sql.DriverManager.getConnection(DriverManager.java:358) 以下是我的设置: Database: Oracle 10g Release 2 Standard Edition JDBC library: ojdbc6.jar JDBC driver: oracle.jdbc.driver.OracleDriver JDBC URL: jdbc:oracle:thin:@9.2.2.2:1521:ORCL where ORCL is database’s SID JDBC User/pwd: Correct username / password 关于这个问题的奇怪之处在于,当我在工作时,连接工作正常。 当我尝试通过AT&T […]

Hibernate本机查询 – char(3)列

我在Oracle中有一个表,其中SC_CUR_CODE列是CHAR(3) 当我做: Query q2 = em.createNativeQuery(“select sc_cur_code, sc_amount from sector_costs”); q2.setMaxResults(10); List rs2 = q2.getResultList(); for (Object[] o : rs2) { System.out.println(“>>> cur=” + o[0]); } 我看到cur=E和cur=U而不是cur=EUR和cur=USD o[0]是java.lang.Character 我怎样才能获得EUR和USD的全部价值?

Oracle在Java中的RETURNING INTO使用(JDBC,Prepared Statement)

我正在使用JDBC来执行如下所示的Oracle语句: “INSERT INTO MYTABLE(MYDATA) VALUES(?) RETURNING MY_CALCULATED_DATA INTO ?” // MYTABLE’s def makes MY_CALCULATED_DATA be auto-generated by DB on insert 我找到了几种在Java中调用上述语句的方法,主要是: 使用OraclePreparedStatement: ps = (OraclePreparedStatement)conn.prepareStatement(sql); ps.setString(1, “myvalue”); ps.registerReturnParameter(2, Types.VARCHAR); ps.execute(); rs = ps.getReturnResultSet(); rs.next(); System.out.print(rs.getString(1)); 使用CallableStatement: cs = conn.prepareCall(sql); cs.setString(1, “myvalue”); cs.registerOutParameter(2, Types.VARCHAR); cs.execute(); System.out.print(cs.getString(1)); 问题: 方法#2抛出“SQLException:并非所有返回参数都已注册” , 但是 ,如果我将SQL语句包装成“ BEGIN..END; ” – 则方法#2工作正常。 为什么方法#1在没有“ […]

在JPQL中有这样的CASE表达吗?

假设有一张表: TableA:Field1, Field2, Field3 和相关的JPA实体类 @Entity @Table(name=”TableA”) public class TableA{ @Id @Column(name=”Field1″) private Long id; @Column(name=”Field2″) private Long field2; @Column(name=”Field3″) private Long field3; //… more associated getter and setter… } 有没有办法构造一个松散地翻译成这个SQL的JPQL语句,即如何将case表达式翻译成JPQL? select field1, case when field2 = 1 then ‘One’ when field2 = 2 then ‘Two’ else ‘Other number’ end, field3 from tableA;

在Oracle数据库中持久处理并发请求?

我有这个场景,在航空公司网站上(使用Java)两个独立的客户同时发送两个请求预订同一航空公司的同一个座位 从纽约到芝加哥。 我正在使用oracle数据库并且已提交隔离级别。 我的问题是oracle数据库是否提供了处理这种并发场景的任何解决方案? 我所知道的是,当第一个事务DML语句被触发时,它将在受影响的行上获得锁定,并在事务完成时释放,即在发出回滚或commit时发布。但是一旦提交完成,第二个请求将在第一个完成后立即继续并将覆盖第一个。 所以它没有帮助? 在Java中是的我可以处理将我的db类作为单例并在正在执行更新的方法上使用synchronized关键字。 但是想要知道我们在数据库级别本身是否存在这种问题?可序隔离级别可以帮助。 但不确定?

设置JDBC连接的网络超时

我正在尝试使用Java设置网络超时我的Oracle数据库连接。 但是,我收到了一个错误。 下面是示例代码,它是相应的例外。 try{ conn = new Database(“oracle”).connect(); conn.setNetworkTimeout(null, 30000); //I don’t have an Executor, so the field is set to null System.out.println(Switch.date() + ” -> Database Connection Initialized”); } catch(SQLException ex){ Logger.getLogger(Switch.class.getName()).log(Level.SEVERE, null, ex); } 我得到的例外是: Exception in thread “main” java.lang.AbstractMethodError:oracle.jdbc.driver.T4CConnection.setNetworkTimeout(Ljava/util/concurrent/Executor;I)V at ke.co.smart.Switch.(Switch.java:524) at ke.co.smart.Switch.main(Switch.java:161) Java Result: 1 我认为它与抽象方法(读取AbstractMethodError)有关。 什么可能导致这个错误,因为我只实现了我认为已经在Java中定义的方法,因此,不拒绝编译。 注意:如果有抽象方法,Java不允许编译具体类。

DriverManager getConnection的连接超时

我正在尝试使用标准JDBC方式连接到DB connection = DriverManager.getConnection(url, username, password); 连接上是否存在最大超时值,连接存在多长时间,是否可以增加该值。 我希望在连接永远打开的情况下,这是一个好主意。

oracle上的Hibernate序列,@ GeneratedValue(strategy = GenerationType.AUTO)

我使用@GeneratedValue(strategy = GenerationType.AUTO)来生成我的实体上的ID。 我现在不知道它是如何工作的,但在我的子表上,生成ID值,它遵循父序列。 //parent table @Entity @Table (name = “parent”) public class Parent { @Id @GeneratedValue (strategy = GenerationType.AUTO) @Column (name = “id”) private long id; @OneToMany (cascade = {CascadeType.ALL}, fetch = FetchType.LAZY) @JoinColumn (name = “parentId”) @ForeignKey (name = “FKparent”) private List child; } //child table @Entity @Table (name = “child”) public class […]