请教:jdbc插入二进制文件问题

问题描述

staticvoidcreate()throwsSQLException,IOException,FileNotFoundException{Connectionconn=null;PreparedStatementps=null;ResultSetrs=null;try{conn=JdbcUtils.getConnection();Stringsql="insertintobig_bit(big_bit)values(?)";ps=conn.prepareStatement(sql);Filefile=newFile("1327037473696.jpg");InputStreamin=newBufferedInputStream(newFileInputStream(file));ps.setBinaryStream(1,in);inti=ps.executeUpdate();System.out.println(i);in.close();}finally{JdbcUtils.free(rs,ps,conn);}}

数据库列big_bit是blob类型的Exceptioninthread"main"com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'R;F碗蒇n撼ア竉?U爸5+M>5#觍Y妍l尟8#q騹霂滣璵W臈v鷙挾V*诋?Co;'atline1atsun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeMethod)atsun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)atsun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)atjava.lang.reflect.Constructor.newInstance(Constructor.java:525)atcom.mysql.jdbc.Util.handleNewInstance(Util.java:411)atcom.mysql.jdbc.Util.getInstance(Util.java:386)atcom.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)atcom.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4190)atcom.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122)atcom.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)atcom.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)atcom.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2818)atcom.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2157)atcom.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2460)atcom.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2377)atcom.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2361)atcn.lzy.base.BlobTest.create(BlobTest.java:72)atcn.lzy.base.BlobTest.main(BlobTest.java:27)运行是说我sql语法错误,看了和对了好几遍都没发现问题,求教。

解决方案

解决方案二:
Filefile=newFile(path);  InputStreamin=newBufferedInputStream(newFileInputStream(file));  ps.setBinaryStream(1,in,file.length());
解决方案三:
引用1楼rui888的回复:

  Filefile=newFile(path);  InputStreamin=newBufferedInputStream(newFileInputStream(file));  ps.setBinaryStream(1,in,file.length());

要不要length都一样的,有不要length的方法,也试过加上length还是不行,报sql语法问题
解决方案四:
你File没有路径?在什么地方如"C:\B.jpg"
解决方案五:
引用3楼rui888的回复:

你File没有路径?在什么地方如"C:\B.jpg"

用的是Eclipse,所以这个文件是在工作空间的根目录下的
解决方案六:
你换个路径试试看,猜测是读取数据的问题。
解决方案七:
引用5楼rui888的回复:

你换个路径试试看,猜测是读取数据的问题。

换了,没用我猜是不是setBinaryStream那里有问题还是我的sql语句有问题,应该是这两个其中一个吧
解决方案八:
每个数据库的驱动支持不同,楼主最好查看他的驱动文档的说明

时间: 2024-09-18 04:58:38

请教:jdbc插入二进制文件问题的相关文章

jdbc插入百万数据

问题描述 我使用以下代码插入5W数据要2分钟,100W就得40分钟左右,大家有没有更好的方法,提高速度....表T有70个字段.conn=getConnection();conn.setAutoCommit(false);stat=conn.createStatement();Stringsql="insertT.......";for(inti=0;i<50000;i++){stat.addBatch(sql);}stat.executeBatch();conn.commit(

【Spring实战】—— 14 传统的JDBC实现的DAO插入和读取

从这篇开始学习Spring的JDBC,为了了解Spring对于JDBC的作用,先通过JDBC传统的流程,实现一个数据库的插入和读取. 从这篇你可以了解到: 1 传统的JDBC插入和读取的过程. 2 如何通过JDBC连接Mysql 如何通过JDBC连接mysql 首先看一下下面这张图: 应用程序需要通过mysql的驱动程序,才能与数据连接. 驱动程序下载地址:mysql-connector-java-5.1.13-bin.jar 在设计程序的时候,应该采用接口编程的方式,这样能够减小数据操作与应用

Spring实战6-利用Spring和JDBC访问数据库

主要内容 定义Spring的数据访问支持 配置数据库资源 使用Spring提供的JDBC模板 写在前面:经过上一篇文章的学习,我们掌握了如何写web应用的控制器层,不过由于只定义了SpitterRepository和SpittleRepository接口,在本地启动该web服务的时候会遇到控制器无法注入对应的bean的错误,因此我决定跳过6~9章,先搞定数据库访问者一章. 在企业级应用开发中不可避免得会涉及到数据持久化层,在数据持久化层的开发过程中,可能遇到很多陷阱.你需要初始化数据库访问框架.

求救:怎么在java中插入text字段的数据

问题描述 由于项目的需要,将字段siteMap类型改为text,因此在java程序中一些jdbc插入.查询的方法connection.prepareStatement()等结果只截取长字符串的一部分,请问这是怎么回事,怎么解决这个问题?辛苦各位了,使劲给分备注:数据库是sqlserver2000 解决方案 解决方案二:在sql语句中进行截取,不要放到代码中解决方案三:引用1楼dyllove98的回复: 在sql语句中进行截取,不要放到代码中 怎么截取,能不能详细点啊?我的方法是这样的:其中,si

用SWT中的TableEidtor输入数据后,如何通过JDBC提交到数据库中

问题描述 import org.eclipse.swt.SWT;import org.eclipse.swt.custom.TableEditor;import org.eclipse.swt.graphics.Point;import org.eclipse.swt.graphics.Rectangle;import org.eclipse.swt.layout.FillLayout;import org.eclipse.swt.widgets.Display;import org.eclip

.net-请教tableLayoutPanel 插入行和列的问题

问题描述 请教tableLayoutPanel 插入行和列的问题 如上图,圈起来的是我新插入的行,我想要的效果是一个空行,但是原来第二行的控件还在那,而不是往下移一行.请教怎么解决 解决方案 你这是啥问题啊?问清楚了啊 解决方案二: 空行要做什么吗,还是只是起到间隔作用,这样的话加入其它Layout就好啦

关于jsp在往数据库中插入当前日期时间的问题

问题描述 请教一个插入当前时间的问题,这句语句ps.setDate(number,newjava.sql.Date(newjava.util.Date().getTime()));在往数据库中插入数据的时候是否只插入了年月日啊?我用的是mysql在数据库的相应的表中的那个属性的值的类型设为datetime.如果要获取小时分钟秒是否要再设置另外一个属性来取? 解决方案 解决方案二:插入当前时间的,数据库要设置成timestamp类型,插记录时留空就可以了.如果插入时间,用这个吧:newjava.s

java 与 mysql 中文问题的处理

mysql|问题|中文 问题:用 jdbc 插入.读取数据库种文字串乱码. 首先,mysql 数据库中的东西都是二进制存放的,支持任何数据,当然包括中文.你到命令行下 insert into testtable values ( '中文' ); select * from testtable; 全都显示正常. 但是,虽然存取中文没问题,但排序.匹配的时候有问题.所以如果你的数据库里有中文的话,记得在配置文件中,如 c:winntmy.ini 中的 [mysqld] 里添加一行: default-

Spring让LOB数据操作变得简单易行

概述 LOB 代表大对象数据,包括 BLOB 和 CLOB 两种类型,前者用于存储大块的二进制数据,如图片数据,视频数据等,而后者用于存储长文本数据,如论坛的帖子内容,产品的详细描述等.值得注意的是:在不同的数据库中,大对象对应的字段类型是不尽相同的,如 DB2 对应 BLOB/CLOB,MySql 对应 BLOB/LONGTEXT,SqlServer 对应 IMAGE/TEXT.需要指出的是,有些数据库的大对象类型可以象简单类型一样访问,如 MySql 的 LONGTEXT 的操作方式和 VA