Oracle异常访问的实际操作方案
以下的文章主要介绍的是如何使用Java通过JDBC来访问Oracle异常,我们都知道Java通过JDBC访问Oracle异常经常出现的在实际的运行中带来很多的不便,以下的文章就是介绍Oracle 字符集乱码的解决方案。
1. 连接非常慢, 连接成功后执行select操作出现Oracle异常:
- Exception in thread "main" java.sql.SQLException: ORA-00600:
内部错误代码,参数:
- [ttcgcshnd-1], [0], [], [], [], [], [], []
解决: 使用oracle安装目录下的jdbc\lib\classes12.jar后正常.
2. 使用PreparedStatement的setString(i, s)时出现:
java.sql.SQLException: 数据大小超出此类型的最大值: 3000
后面那个值大小不定, 感觉与s大小有关
表结构
- create table test(
- name char(32),
- addr varchar(3000)
varchar2也一样
)
解决办法: 采用setCharacterStream
- import java.sql.*;
- import java.io.*;
- import java.util.*;
- /**
Oracle测试
- * @author kingfish
- * @version 1.0
- */
- public class TestOra {
- public static void testORACLE() {
- String url = "jdbc:oracle:thin:@localhost:1521:oradb";
- String username = "system";
- String password = "manager";
- Connection conn = null;
- try {
- Class.forName("oracle.jdbc.driver.OracleDriver");
- conn = DriverManager.getConnection(url, username, password);
- }
- catch (Exception e) {
- e.printStackTrace();
- return;
- }
- char[] carray = new char[1000];
- Arrays.fill(carray, ′我′);
- String s = new String(carray);
- try {
- PreparedStatement pst = conn.prepareStatement(
- "insert into test(name,addr) values(?,?)");
- pst.setString(1, "kingfish");
- pst.setCharacterStream(2,
- new InputStreamReader(new ByteArrayInputStream(s.
- getBytes())), s.length());
- pst.setString(2,s);
用此句则Oracle异常
- pst.execute();
- Statement st = conn.createStatement();
- ResultSet r = st.executeQuery("SELECT * from test");
- while (r.next()) {
- s = r.getString(2);
- System.out.println("len=" + s.length());
- System.out.println("value=" + s);
- }
- r.close();
- st.close();
- conn.close();
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
测试
- * @param args String[]
- */
- public static void main(String[] args) {
- testORACLE();
- }
- }
以上的相关内容就是对如何使用Java通过JDBC来访问Oracle异常的介绍,望你能有所收获。
文章出自: http://www.programbbs.com/doc/class10-1.htm



