日期:2014-05-20  浏览次数:20867 次

JAVA-JDBC向数据库插入文件错误
这是我的数据库建表代码:
CREATE TABLE userclob(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
note LONGTEXT
) ;

JAVA code :

import java.sql.Connection ;
import java.sql.DriverManager ;
import java.io.File ;
import java.io.FileInputStream ;
import java.io.InputStream ;
import java.sql.PreparedStatement ;

public class ClobDemo{
//MySQL-JDBC驱动
public static final String DBRIVER = "org.gjt.mm.mysql.Driver" ;
//MySQL数据库连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
//MySQL 用户名
public static final String DBUSER = "root" ;
//MySQL 密码
public static final String DBPASSWORD = "mysqladmin" ;
public static void main(String args[]) throws Exception{
Connection conn = null ;
PreparedStatement prs = null ;
String sql = "INSERT INTO userclob(name,note) VALUES (?,?) " ;
Class.forName(DBRIVER) ; //加载JDBC驱动
//实例化Connection对象获得与数据库连接
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
//实例化PreparedStatement对象
prs = conn.prepareStatement(sql) ; //使用预处理写入SQL语句
String name = "罗星笔记";
//用输入流读取文件
File f = new File("d:" + File.separator + "sql.txt") ;
InputStream input = null ;
input = new FileInputStream(f) ;
prs.setString(1,name) ;
prs.setAsciiStream(2,input) ;
prs.executeUpdate() ; //执行更新操作
input.close() ; //关闭输入流
conn.close() ; //关闭数据库
}
}

抛错:

D:\test\clobdemo>java ClobDemo
Exception in thread "main" java.sql.SQLException: Incorrect string value: '\xB4\
xB4\xBD\xA8\xBA\xCD...' for column 'note' at row 1
  at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
  at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3597)
  at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529)
  at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1990)
  at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151)
  at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2625)
  at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.ja
va:2119)
  at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java
:2415)
  at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java
:2333)
  at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java
:2318)
  at ClobDemo.main(ClobDemo.java:33)


------解决方案--------------------
探讨
引用:

传入的参数要和数据库对应的字段类型一致呢。
看看setAsciiStream把InputStream 如何转化了才是关键。


你好,这是mldn李兴华用的方法 直接把输入流参数放在setAsciiStream()里就行了 , 这是数据表的结构:
mysql> DESC userclob ;
+-------+-------------+……