是你的数据库版本或者说其所对应的连接驱动包有问题! 参考下文: ORA-01461: can bind a LONG value only for insert into a LONG column 开发项目,今天又难到问题。junit测试写数据到oracle时,出现:ORA-01461: can bind a LONG value only for insert into a LONG column错误,郁闷,试了几次发现,中文才会有这个问题,而且jsp页面里输入的中文又不会报这个错(前端是struts)。像mysql的话,很有可能是数据库字符编码问题,就怀疑是否为字符编码问题(这种思维不知道会不会很傻),因为项目所有编码都是utf-8, 看了下oracle是zhs16GBK。然后就建一个gbk的项目来测试,结果还是出现此问题。后来就换用旧系统的classes12.jar驱动测试下,^_^, 不会了,太好了。看了下classes12.jar的版本是9.0.2.0.0的而且又是 classes12.jar不爽,后来看到一个帖子,说:用9的和10.2的没有此问题,我回去看下之前出问题的版本是10.1.0.2.0,郁闷,用的数据库是10.2.0.1.0。马上换成10.2.0.1.0的版本。当初不注意,今天花了我几个小时。我一直以为jdbc是数据库对应的。对应的jdbc在oracle安装目录可以找到oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar
public boolean addmessage(Message message)
{
try {
ps=ConnDb.getInstance().getConn().prepareStatement("insert into message values(sq1.nextval,?,?,?,?,?,?,?,?,sysdate)");
ps.setString(1, message.getUsername());
ps.setString(2, message.getTitle());
ps.setString(3, message.getEmail());
ps.setString(4, message.getAddress1());
ps.setString(5, message.getQq());
ps.setString(6, message.getHomepage());
ps.setString(7, message.getBoard());
ps.setString(8, message.getIp());
r=ps.executeUpdate();
if(r>0){
return true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
!!!!r=ps.executeUpdate();这句话有错!
检查一下,你插入的各个值和对应的数据库中列的定义大小。查看一下具体是那个列的插入值超过了数据库中定义的大小。
参考下文:
ORA-01461: can bind a LONG value only for insert into a LONG column
开发项目,今天又难到问题。junit测试写数据到oracle时,出现:ORA-01461: can bind a LONG value only for insert into a LONG column错误,郁闷,试了几次发现,中文才会有这个问题,而且jsp页面里输入的中文又不会报这个错(前端是struts)。像mysql的话,很有可能是数据库字符编码问题,就怀疑是否为字符编码问题(这种思维不知道会不会很傻),因为项目所有编码都是utf-8, 看了下oracle是zhs16GBK。然后就建一个gbk的项目来测试,结果还是出现此问题。后来就换用旧系统的classes12.jar驱动测试下,^_^, 不会了,太好了。看了下classes12.jar的版本是9.0.2.0.0的而且又是 classes12.jar不爽,后来看到一个帖子,说:用9的和10.2的没有此问题,我回去看下之前出问题的版本是10.1.0.2.0,郁闷,用的数据库是10.2.0.1.0。马上换成10.2.0.1.0的版本。当初不注意,今天花了我几个小时。我一直以为jdbc是数据库对应的。对应的jdbc在oracle安装目录可以找到oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar
你把对应的数据库的启动包放到你的工程中去,试试。
oracle的启动包是ojdbc14.jar,其他数据库没有使用过。