问题描述
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语句有问题,应该是这两个其中一个吧
解决方案八:
每个数据库的驱动支持不同,楼主最好查看他的驱动文档的说明