快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

java通过JDBC访问Oracle的2个非常


1.  连接异常慢, 连接成功后执行select操作出现非常:

   Exception in thread "main" java.sql.SQLException: ORA-00600: 内部错误代码,参数: [ttcgcshnd-1], [0], [], [], [], [], [], [] 

   解决: 使用oracle安装目录下的jdbc/lib/classes12.jar后正常.



2. 使用PreparedStatement的setString(i, s)时出现:

可以参考帖子:http://community.csdn.net/Expert/topic/3936/3936672.xml?temp=.2879145

 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);  //用此句则非常      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();  }}





说明: 引起此问题的原因估计和OraclePreparedStatement中的setString的实现有关.



kingfish

2005.4.14




返回类别: 教程
上一教程: Java中的Sizeof(二)
下一教程: 在java开发过程中常常遇到数据类型的问题

您可以阅读与"java通过JDBC访问Oracle的2个非常"相关的教程:
· Java 实现连接sql server 2000(JDBC数据库访问例子)
· 通过JDBC连接ORACLE数据库的十大技巧
· 通过JavaMail访问Hotmail邮箱
· Java中通过代理服务器(proxy)访问网络
· JSP通过JDBC与ORACLE相连
    微笑服务 优质保证 索取样品