package Blob;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;//Blob主要用于处理大二进制文件,最大4G
//使用Blob类可以简化写出操作
public class BlobDemo01 {
//定义mysql的数据库加载驱动
public static final String dbDriver="org.gjt.mm.mysql.Driver";
//定义mysql数据库的连接地址
public static final String dbUrl="jdbc:mysql://localhost:3306/mydb"; //连接到指定数据库
//定义连接数据库的用户名
public static final String dbUser="root"; //连接到指定数据库
//定义连接数据库的密码
public static final String dbPass="admin"; //连接到指定数据库
public static void main(String[] args) throws Exception{
Class.forName(dbDriver); //加载驱动程序
Connection conn=null;
conn=DriverManager.getConnection(dbUrl, dbUser, dbPass); //获得连接
String name="myPhoto";
PreparedStatement pstat=null;
String sql="Insert into userblob (name,photo) values(?,?)";
pstat=conn.prepareStatement(sql);// 实例化PreapredStatement对象
pstat.setString(1, name);
/*FileInputStream fis=new FileInputStream("E:/eclipse/javawork/JDBC_lixinghua/src/Blob/12.jpg");
pstat.setAsciiStream(2, fis);*/
InputStream is=null;
File f=new File("E:/eclipse/javawork/JDBC_lixinghua/src/Blob/12.jpg");
is=new FileInputStream(f);
pstat.setBinaryStream(2,is, (int)(f.length())); //File类有获取字节长度方法
pstat.executeUpdate();
pstat.close();
conn.close(); }}
mysql中创建表的语句:create table userBlob(
id int auto_increment primary key,
name varchar(30) not null,
photo longBlob
); 运行后提示:
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?\\??A¤^i????[?M\'y?.8.à=T?\0<Y?_????u????F??i,??yq?d9ùQy??\0?ZN
ù}<K?' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1053)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2794)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2375)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2359)
at Blob.BlobDemo01.main(BlobDemo01.java:56)
怎么会错呢?mysqljdbc
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;//Blob主要用于处理大二进制文件,最大4G
//使用Blob类可以简化写出操作
public class BlobDemo01 {
//定义mysql的数据库加载驱动
public static final String dbDriver="org.gjt.mm.mysql.Driver";
//定义mysql数据库的连接地址
public static final String dbUrl="jdbc:mysql://localhost:3306/mydb"; //连接到指定数据库
//定义连接数据库的用户名
public static final String dbUser="root"; //连接到指定数据库
//定义连接数据库的密码
public static final String dbPass="admin"; //连接到指定数据库
public static void main(String[] args) throws Exception{
Class.forName(dbDriver); //加载驱动程序
Connection conn=null;
conn=DriverManager.getConnection(dbUrl, dbUser, dbPass); //获得连接
String name="myPhoto";
PreparedStatement pstat=null;
String sql="Insert into userblob (name,photo) values(?,?)";
pstat=conn.prepareStatement(sql);// 实例化PreapredStatement对象
pstat.setString(1, name);
/*FileInputStream fis=new FileInputStream("E:/eclipse/javawork/JDBC_lixinghua/src/Blob/12.jpg");
pstat.setAsciiStream(2, fis);*/
InputStream is=null;
File f=new File("E:/eclipse/javawork/JDBC_lixinghua/src/Blob/12.jpg");
is=new FileInputStream(f);
pstat.setBinaryStream(2,is, (int)(f.length())); //File类有获取字节长度方法
pstat.executeUpdate();
pstat.close();
conn.close(); }}
mysql中创建表的语句:create table userBlob(
id int auto_increment primary key,
name varchar(30) not null,
photo longBlob
); 运行后提示:
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?\\??A¤^i????[?M\'y?.8.à=T?\0<Y?_????u????F??i,??yq?d9ùQy??\0?ZN
ù}<K?' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1053)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2794)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2375)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2359)
at Blob.BlobDemo01.main(BlobDemo01.java:56)
怎么会错呢?mysqljdbc
解决方案 »
- Hibernate一对多双向关系,取一端数据同时抓取多端到Set<E>中,如何避免重复
- 有个别人写的jar包。我想修改里面的一个class,然后再打jar包,还原回去,怎么办?
- myEclipse 工具如何再次生成hibernate配置文件
- 请救:Hibernate访问数据库大表时一次全取数据的问题
- 倒遍历linkedhashmap
- java远程控制
- java.lang.NoSuchMethodException: Action does not contain specified method
- jdom删除节点后 残留空白的问题
- 谁有好的xml学习资料啊 介绍一个啊 up有分
- 【求助】J2EE普通客户端访问错误,求助!
- 请教一个正则表达式问题
- (求助)能将web项目转换成EJB项目吗?
InputStream in = new FileInputStream("E:/eclipse/javawork/JDBC_lixinghua/src/Blob/12.jpg");
pstm.setBinaryStream(2, in, in.available());
是啊,终于找到答案了,把mysql的字符集从GBK改成UTF8就好了。。
void setBinaryStream(int parameterIndex,
InputStream x,
int length)
throws SQLException
void setBinaryStream(int parameterIndex,
InputStream x,
int length)
throws SQLException