java文件写入blob_java程序向IQ写入blob(image)类型数据问题的解决
最近一个用户的应用使用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)类型数据问题的解决相关推荐
- 学习大数据的第13天——Java面向对象(接口、分析参数返回值的类型不同时如何解决、包以及访问权限修饰符(public、protected、默认、private))
学习大数据的第13天--Java面向对象(接口.分析参数返回值的类型不同时如何解决.包以及访问权限修饰符(public.protected.默认.private)) 接口 接口的基本定义: 1.1.语 ...
- java将clob类型文件写到磁盘_Java对Oracle中Clob类型数据的读取和写入
Java对Oracle中Clob数据类型是不能够直接插入的,但是可以通过流的形式对clob类型数据写入或者读取,网上代码并不算特别多,讲的 Java对Oracle中Clob数据类型是不能够直接插入的, ...
- 如何使用命令行编译运行java文件(一个或多个),找不到主类解决
编译java文件: 一个正确的java文件是必要的,不要马虎了. 用到的两个主要命令: //编译得到class javac projectpath/projectname.java //运行class ...
- cmd下运行java文件时,找不到或无法加载主类的解决方法
最近再看java,却被一个看似很基础的hellorworld头疼了十几分钟,百度了一下,若你在cmd下编辑及运行.java文件时报错,解决方案如下,如图所示: d盘根目录下的.java文件. 打开cm ...
- java NameValuePair 实现 模拟 表单访问 服务 传输各类型数据
背景 今天通过api接口访问服务端,但是一直提示发送参数为空,后来使用NameValuePair 发送成功,记录在此,方便以后使用. 发送表单数据 /*** 发送消息* * @param u ...
- 黑莓java文件怎么安装程序_黑莓开发环境搭建windows7+eclipse+BlackBerry Java Plug+JDK6...
最近有点空闲时间,所以就学学黑莓开发,当然要开发第一步就是搭建开发环境,google了一下,有很多教程,但都是很老的了,可能是因为国内开发黑莓的人很少吧.黑莓的好处就是出了名的安全,所以有一批忠实的粉 ...
- java system.out.read_一个java文件操作小程序 system.out.in buffer read
按键 i buffer read abc123+E ...
- java代码实现读写txt文件(txt文件转换成java文件)
项目中要求批量txt文件可以转换为java文件或xml文件,以下主要是总结的几种IO读写的方法: 1.按行读写txt文件和java文件,以treemap默认升序的有序map类型保存读写的结果转换 ...
- Eclipse解决.java文件中文乱码问题
如果在eclipse工作台.Java文件中出现中文乱码问题,通过以下两个步骤快速解决: 1.选择Windows下Preferences 2.选择General下Content Types,Text下j ...
- java读取一个应用程序_Java IO – 在写入其他应用程序时读取一个大文件
我想使用java来读取weblogic日志文件,而weblogic正在将日志写入其中(缓冲),但我只想读取内容,当我开始阅读它时. 我怎样才能做到这一点 ? public class DemoRead ...
最新文章
- 2017年安防监控中的那些核心云计算技术
- sqlserver 字符串中添加单引号_Python3 教程-- 7、字符串
- android miui9.0改装条例,安卓的通知适配(更新至9.0)
- 聚集索引和填充因子fill factor的设置,减少死锁
- 代码不规范?985,211也不要!
- Apache Shiro SessionManager配置详解.
- 落地即王道,锁死企业智变CP——云+AI
- 自动化测试十大疑问解答 软件测试人必看
- 声网 java app视频录制_java 声音的播放与录制
- 【微信小程序】支付过程详解
- 断路器之一:Hystrix 使用与分析
- SQL:postgresql中st_union合并多条geom数据
- 深度linux运行浏览器中毒,使用深度Deepin系统的用户可在商店中安装360安全浏览器正式版...
- java编写QQ邮箱发送邮件_调用QQ邮箱接口
- USB 打印机 模拟 LPT 接口
- matlab各相关系数的计算,matlab 相关系数的计算
- 网站中网页最优色彩搭配方案学习--Java免费学习网
- 2022-2028年全球与中国粮食种植行业市场深度调研及投资预测分析
- 波士顿大学计算机硕士排名,波士顿大学计算机工程研究生排名重点消息重点解析...
- git拉取代码报错fatal Authentication failed for ‘httpxxxx.git‘‘解决方案
热门文章
- linux脚本定义量,Linux上增加自定义脚本的展现量
- python获取eth0_python 获取网卡实时流量
- python isodd()判断奇偶_EXCEL VBA:Iseven Isodd 判断奇偶
- ElementUI:input表单验证
- Java编程:爬楼梯问题、斐波那契数列问题
- 树莓派4B Ubuntu20.04 ROS2 DSO realsense d455
- MyQR库自动为网址生成二维码
- eclipse提交代码到github其他分支
- IIS反向代理/Rewrite/https卸载配置
- jquery实现无限滚动瀑布流实现原理