最近一个用户的应用使用jConnect jdbc驱动程序访问Sybase IQ 15.2的数据库的一个表,这个表有个类型为long binary类型的字段,在插入数据超过32767个字节时会报如下错误:

SQL Anywhere Error -1000121: binary data not supported on data longer than 32767 Bind host variable,

-- (df_Heap.cxx 2858)

2013-05-12 16:04:41,108 WARN [http-8081-1] [JDBCExceptionReporter] SQL Error: 21, SQLState: QDB21

2013-05-12 16:04:41,108 ERROR [http-8081-1] [JDBCExceptionReporter] SQL Anywhere Error -1000121: binary data not supported on data longer than 32767 Bind host variable

为了诊断问题,在我自己的环境中编写了一个java程序进行再现和解决尝试,下面是测试表以及测试java程序:

1. 测试表

create table blob_test(id int, content blob)

2. 测试java程序

package net.db.test;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.Statement;

public class JDBCDemo {

private static final String DRIVER = "com.sybase.jdbc3.jdbc.SybDriver";

private static final String URL = "jdbc:sybase:Tds:192.168.0.197:6000/tpchdb?CHARSET=cp936&TEXTSIZE=2147483647"; //OK

public JDBCDemo() {

}

private byte[] getFileContent(String filename) {

try {

File file = new File(filename);

int length = (int)file.length();

InputStream input = new FileInputStream(filename);

byte[] content = new byte[length];

input.read(content, 0, length);

return content;

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

public void insert() throws Exception {

Connection con = this.getConnection(DRIVER, URL, "DBA", "sql");

String filename = "ccrmiq.rar";

String sqlString = "insert into test_blob (id,content) values(?,?)";

PreparedStatement pstmt = con.prepareStatement(sqlString);

pstmt.setInt(1,1000);

pstmt.setBytes(2, this.getFileContent(filename));

int state = pstmt.executeUpdate();

this.closeConnection(con, pstmt);

}

public static void main(String[] args) {

JDBCDemo demo = new JDBCDemo();

try {

demo.insert();

//demo.select();

//demo.delete();

} catch (Exception e) {

e.printStackTrace();

}

}

private Connection getConnection(String driver, String url, String user,

String password) throws Exception {

Class.forName(driver);

return DriverManager.getConnection(url, user, password);

}

private void closeConnection(Connection con, Statement stmt)

throws Exception {

if (stmt != null) {

stmt.close();

}

if (con != null) {

con.close();

}

}

}

在执行上面的java程序时再现了问题。

通过查找相关资料,最终的解决方法如下:

(1) 设置jConnect连接属性TEXTSIZE=2147483647

(2)  使用DBA用户登陆IQ,做如下设置:

set option public.ENABLE_LOB_VARIABLES='ON'

java文件写入blob_java程序向IQ写入blob(image)类型数据问题的解决相关推荐

  1. 学习大数据的第13天——Java面向对象(接口、分析参数返回值的类型不同时如何解决、包以及访问权限修饰符(public、protected、默认、private))

    学习大数据的第13天--Java面向对象(接口.分析参数返回值的类型不同时如何解决.包以及访问权限修饰符(public.protected.默认.private)) 接口 接口的基本定义: 1.1.语 ...

  2. java将clob类型文件写到磁盘_Java对Oracle中Clob类型数据的读取和写入

    Java对Oracle中Clob数据类型是不能够直接插入的,但是可以通过流的形式对clob类型数据写入或者读取,网上代码并不算特别多,讲的 Java对Oracle中Clob数据类型是不能够直接插入的, ...

  3. 如何使用命令行编译运行java文件(一个或多个),找不到主类解决

    编译java文件: 一个正确的java文件是必要的,不要马虎了. 用到的两个主要命令: //编译得到class javac projectpath/projectname.java //运行class ...

  4. cmd下运行java文件时,找不到或无法加载主类的解决方法

    最近再看java,却被一个看似很基础的hellorworld头疼了十几分钟,百度了一下,若你在cmd下编辑及运行.java文件时报错,解决方案如下,如图所示: d盘根目录下的.java文件. 打开cm ...

  5. java NameValuePair 实现 模拟 表单访问 服务 传输各类型数据

    背景      今天通过api接口访问服务端,但是一直提示发送参数为空,后来使用NameValuePair 发送成功,记录在此,方便以后使用. 发送表单数据 /*** 发送消息* * @param u ...

  6. 黑莓java文件怎么安装程序_黑莓开发环境搭建windows7+eclipse+BlackBerry Java Plug+JDK6...

    最近有点空闲时间,所以就学学黑莓开发,当然要开发第一步就是搭建开发环境,google了一下,有很多教程,但都是很老的了,可能是因为国内开发黑莓的人很少吧.黑莓的好处就是出了名的安全,所以有一批忠实的粉 ...

  7. java system.out.read_一个java文件操作小程序 system.out.in buffer read

    按键                          i                         buffer                           read abc123+E ...

  8. java代码实现读写txt文件(txt文件转换成java文件)

    项目中要求批量txt文件可以转换为java文件或xml文件,以下主要是总结的几种IO读写的方法:    1.按行读写txt文件和java文件,以treemap默认升序的有序map类型保存读写的结果转换 ...

  9. Eclipse解决.java文件中文乱码问题

    如果在eclipse工作台.Java文件中出现中文乱码问题,通过以下两个步骤快速解决: 1.选择Windows下Preferences 2.选择General下Content Types,Text下j ...

  10. java读取一个应用程序_Java IO – 在写入其他应用程序时读取一个大文件

    我想使用java来读取weblogic日志文件,而weblogic正在将日志写入其中(缓冲),但我只想读取内容,当我开始阅读它时. 我怎样才能做到这一点 ? public class DemoRead ...

最新文章

  1. 2017年安防监控中的那些核心云计算技术
  2. sqlserver 字符串中添加单引号_Python3 教程-- 7、字符串
  3. android miui9.0改装条例,安卓的通知适配(更新至9.0)
  4. 聚集索引和填充因子fill factor的设置,减少死锁
  5. 代码不规范?985,211也不要!
  6. Apache Shiro SessionManager配置详解.
  7. 落地即王道,锁死企业智变CP——云+AI
  8. 自动化测试十大疑问解答 软件测试人必看
  9. 声网 java app视频录制_java 声音的播放与录制
  10. 【微信小程序】支付过程详解
  11. 断路器之一:Hystrix 使用与分析
  12. SQL:postgresql中st_union合并多条geom数据
  13. 深度linux运行浏览器中毒,使用深度Deepin系统的用户可在商店中安装360安全浏览器正式版...
  14. java编写QQ邮箱发送邮件_调用QQ邮箱接口
  15. USB 打印机 模拟 LPT 接口
  16. matlab各相关系数的计算,matlab 相关系数的计算
  17. 网站中网页最优色彩搭配方案学习--Java免费学习网
  18. 2022-2028年全球与中国粮食种植行业市场深度调研及投资预测分析
  19. 波士顿大学计算机硕士排名,波士顿大学计算机工程研究生排名重点消息重点解析...
  20. git拉取代码报错fatal Authentication failed for ‘httpxxxx.git‘‘解决方案

热门文章

  1. linux脚本定义量,Linux上增加自定义脚本的展现量
  2. python获取eth0_python 获取网卡实时流量
  3. python isodd()判断奇偶_EXCEL VBA:Iseven Isodd 判断奇偶
  4. ElementUI:input表单验证
  5. Java编程:爬楼梯问题、斐波那契数列问题
  6. 树莓派4B Ubuntu20.04 ROS2 DSO realsense d455
  7. MyQR库自动为网址生成二维码
  8. eclipse提交代码到github其他分支
  9. IIS反向代理/Rewrite/https卸载配置
  10. jquery实现无限滚动瀑布流实现原理