免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: uniora
打印 上一主题 下一主题

oracle ORA-01461错误 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-08-16 23:11 |只看该作者
插入多少个汉字时会报错

论坛徽章:
0
12 [报告]
发表于 2007-08-17 16:28 |只看该作者
就插入一个汉字就报错
我从网上看说是jdbc的问题,我从oracle上面下了最新的thin jdbc  : ojdbc14.jar
支持jdk1.4和jdk1.5,没有解决一点问题

要末就是字符集的问题,我的linux+oracle和HP-XU+oracle都已一样的字符集呀

是不是需要修改程序,但应用连接HP-UX下的oracle9.2.0.1一点问题都没有呀

论坛徽章:
0
13 [报告]
发表于 2007-08-20 15:12 |只看该作者
UP!哪位牛人能帮忙!啊啊啊啊,着急呀

论坛徽章:
0
14 [报告]
发表于 2007-08-20 16:23 |只看该作者
1. 用java写个测试程序,不要通过tomcat,测试中文插入情况
2. 把程序代码贴出来

论坛徽章:
0
15 [报告]
发表于 2007-08-20 17:14 |只看该作者
好的,我做完了贴出来

论坛徽章:
0
16 [报告]
发表于 2007-08-21 18:38 |只看该作者
我写了代码,基本上就是没有用tomcat,但也是放在tomcat下了,通过我的代码
往数据库插中文,数据库显示出来的中文是乱码,但是我直接用sqlplu或者pl/sql
插中文没问题,我的代码如下:

TestBean.java

package com.unisk.test;
import java.sql.Connection;
import java.sql.PreparedStatement;


public class TestBean {
       
        public void addTitle(String title)
        {
                ConnectDatabase myFetchDatabase = new ConnectDatabase();
                try
                {
                        Connection myconnection=myFetchDatabase.getConnection();
                        PreparedStatement ps=myconnection.prepareStatement("insert into D_TEST_ORACLEDB(TITLE) values ('"+title+"')";
                        ps.execute();
                        ps.close();
                        myconnection.close();
                       
                }catch(Exception ex)
                {
                        System.out.println(myFetchDatabase.getErrorMessage(ex,"Application error,please contact to your Software Designer!".toString());
                }
        }
}






package com.unisk.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;



public class ConnectDatabase {
        private final String oracleDriverName="oracle.jdbc.driver.OracleDriver";
        private final String oracleUrlToConnect="jdbcracle:thin192.168.0.206:1521:jvdb";       
        private Connection myConnection=null;
    /**
     * To load the jdbc driver
     *
     */
        public ConnectDatabase ()
        {
                try
                {
                        Class.forName(oracleDriverName);
                }catch (ClassNotFoundException ex)
                {
                        System.out.println(getErrorMessage(ex,"The Driver loaded error,please contact to your Software Designer!".toString());
                }
        }
       
        public StringBuffer getErrorMessage(Exception ex,String alarmMessage)
    {
        StringBuffer errorStringBuffer = new StringBuffer();
        errorStringBuffer.append(alarmMessage);
        errorStringBuffer.append(ex.getMessage());
        return errorStringBuffer;
    }
    /**
     * getConnection method
     * @return Connection
     */
    public Connection getConnection()
    {
        try
        {
            
            this.myConnection = DriverManager.getConnection(oracleUrlToConnect,"test","test";
            
            
        }catch(Exception ex)
        {
            System.out.println(getErrorMessage(ex,"Can not get connection,please contact to your Software Designer!".toString());
        }
        
        return this.myConnection;
        
    }   
}



看看咋回事

论坛徽章:
0
17 [报告]
发表于 2007-08-22 01:24 |只看该作者
export LANG=zh_CN
export CLASSPATH=/u01/app/oracle/product/10.2.0/db_1/jdbc/lib/ojdbc14.jar:$CLASSPATH

重新编译java程序,然后运行

我的测试例子:

import java.sql.*;

public class JdbcOracle {
  public static void main(String[] args) {

    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
    PreparedStatement ps = null;
    String url = "jdbc:oracle:thin:@192.168.1.128:1525:test3dup";
    String username = "test";
    String password = "test";
    String sql = "";
    try {
           
       String driver = "oracle.jdbc.driver.OracleDriver";
       Class.forName(driver);  
       conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.128:1525:test3dup", username, password);

       StringBuffer sqlString=new StringBuffer();
       sqlString.append("insert into test.test6(sql_text) values (?)");
      
       ps = conn.prepareStatement(sqlString.toString());
      
       sql = "中文";
       ps.setString(1, sql);
       System.out.println(sqlString + "   " +sql);
       ps.executeUpdate();
       conn.commit();
       ps.close();
       conn.close();
     
    }
    catch (Exception e) {
      System.out.println("error: " + e);
      try {
        conn.rollback();
      }
      catch (SQLException sqle) {}
    }
    finally {

      try {
        if (rs != null)
          rs.close();
      }
      catch (SQLException sqle) {
        System.out.println("SQLState: " + sqle.getSQLState());
        System.out.println("SQLErrorCode: 错误代码" + sqle.getErrorCode());
        System.out.println("SQLErrorMessage:错误情况的字符串 " + sqle.toString());
      }

      try {
              if (ps != null)
          ps.close();
         
        if (stmt != null)
          stmt.close();
      }
      catch (SQLException sqle1) {
        System.out.println("SQLState: " + sqle1.getSQLState());
        System.out.println("SQLErrorCode: 错误代码" + sqle1.getErrorCode());
        System.out.println("SQLErrorMessage:错误情况的字符串 " + sqle1.toString());
      }

      try {
        if (conn != null)
          conn.close();
      }
      catch (SQLException sqle2) {
        System.out.println(sqle2.toString());
        System.out.println(sqle2.getSQLState());
        System.out.println(sqle2.getErrorCode());
      }

    }

  }
}

输出:

insert into test.test6(sql_text) values (?)   中文

select sql_text from test.test6

sql_text
------------
中文

LANG=zh_CN

[[i] 本帖最后由 numenhuang 于 2007-8-22 01:28 编辑 [/i]]

论坛徽章:
0
18 [报告]
发表于 2007-08-22 10:40 |只看该作者
是这样的,我的数据库在206机器上,我的应用放在207机器上,
针对你的上面的,我其他没啥疑问,就是开始这两句环境变量:
export LANG=zh_CN
export CLASSPATH=/u01/app/oracle/product/10.2.0/db_1/jdbc/lib/ojdbc14.jarCLASSPATH

是设在207上吗?如果设置在206上,这个环境变量都设好了,如果设置在207上,CLASSPATH
这个参数设置有用吗,因为207上面就没有安装数据库

论坛徽章:
0
19 [报告]
发表于 2007-08-22 11:01 |只看该作者
应该在207上设置正确的LANG和NLS_LANG

CLASSPATH可以不管,这是我自己用的

论坛徽章:
0
20 [报告]
发表于 2007-08-22 14:01 |只看该作者
楼上哥们,是这样的,你的程序我用了,我自己的程序我也用了,插入
中文没问题,我就是在jsp页面里面加了:
<%@ page contentType="text/html;charset=gbk"%>
title = new String(title.getBytes("ISO8859_1"),"GBK");

这两行就可以了,插入中文都很正确,因为我数据字符集是ZHS16GBK的

但是我们的应用使用的字符集是UTF-8的,开发说UTF-8能支持简体中文和繁体中文,
但是我测试了一下,GBK的字符集也支持简体中问题和繁体中文,针对这个问题
需要你说明一下,为啥使用UTF-8的字符集在HP-UX+oracle下就可以,在linux+oracle就
不行,是不是linux平台对UTF-8的字符集支持不好,还是怎末的?
你建议用UTF-8还是用GBK??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP