[MySQL5.6版本]数据库创建脚本:
CREATE DATABASE mydb;
USE mydb;
CREATE TABLE userblob(
id INT AUTO_INCREMENT PRIMARY KEY ,
NAME VARCHAR(30) NOT NULL ,
photo LONGBLOB
)ENGINE=INNODB DEFAULT CHARSET=gbk;
JAVA代码如下:
import java.sql.* ;
import java.io.* ;
public class CopyOfBlobDemo{
public static void main(String args[]){
Connection conn = new DBConnection().getConn(); // 获得数据库连接(DBConnection为数据库连接自定义类)
PreparedStatement pstmt = null;
String sql = "INSERT INTO userblob(name,photo) VALUES (?,?) " ;
String name = "图片" ;
File f = new File("d:" + File.separator + "photo.jpg") ; // 图片文件
InputStream input = null;
try {
input = new FileInputStream(f);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
pstmt = conn.prepareStatement(sql) ;
pstmt.setString(1,name) ;
pstmt.setBinaryStream(2, input, (int)f.length()) ; // 设置输入流
pstmt.executeUpdate() ;
pstmt.close() ;
conn.close() ;
} catch (SQLException e1) {
e1.printStackTrace();
}
}
};
执行以上代码时,控制台输出异常,MySQL数据库插入记录失败:
com.mysql.jdbc.exceptions.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 'z”???????????…¨?R?????\0?uMS??–4?k????????“????!?????' at line 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1026)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922)
at com.sin.test.CopyOfBlobDemo.main(CopyOfBlobDemo.java:30)查询JDK 1.6 API,PreparedStatement类有如下方法:
求解?????????????

解决方案 »

  1.   

    会不会是字符集的问题
    LZ看一下这篇文章,把mysql的字符集都设置为utf-8试试
      

  2.   

    已经设置了MySQL数据库全局字符集了:my.ini
    default-character-set=utf8重新建表:
    ENGINE=INNODB DEFAULT CHARSET=utf8;
    还是报同样的错误。
      

  3.   

    先插入一条记录,这个记录中,二进制数据的字段是空的。
    然后,将这条记录查询出来并同时锁定,select for update ;
    之后,进行update操作,将二进制数据,更新到这条记录当中。
      

  4.   

    二进制字段的空数据,貌似可以创建一个空的Blob数据,进行占位。而不是null的空。