黑马程序员技术交流社区

标题: 有关数据库大文本数据的写入的问题 [打印本页]

作者: 何俊森    时间: 2013-4-26 10:05
标题: 有关数据库大文本数据的写入的问题
本帖最后由 何俊森 于 2013-4-26 10:14 编辑
  1. package org.klaus.lobdemo;

  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.InputStream;
  5. import java.sql.Connection;
  6. import java.sql.DriverManager;
  7. import java.sql.PreparedStatement;

  8. public class ClobDemo01 {

  9.     /**
  10.      * @param args
  11.      */
  12.     //定义mysql 的数据库驱动程序
  13.     public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";
  14.     public static final String DBURL = "jdbc:mysql://localhost:3306/mldn";
  15.     public static final String DBUSER = "root";
  16.     public static final String DBPASS = "mysqladmin";
  17.     public static void main(String[] args) throws Exception {
  18.         // TODO Auto-generated method stub
  19.         
  20.         Connection conn = null; //数据库连接
  21.         PreparedStatement pstmt = null; //数据库操作
  22.         String name = "jacob";
  23.         String sql = "insert into userclob(name,note)values(?,?)";
  24.         Class.forName(DBDRIVER);        //加载驱动程序
  25.         conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS); //连上mysql数据库
  26.         pstmt = conn.prepareStatement(sql); //实例化{reparedStatement
  27.         File f = new File("d:" + File.separator + "feiq.txt");  //声明一个File对象,用于要操作的大文本文件
  28.         InputStream input = new FileInputStream(f); //输入流读取文件
  29.         //设置"?"内容
  30.         pstmt.setString(1, name);   
  31.         pstmt.setAsciiStream(2,input,(int)f.length());
  32.         pstmt.executeUpdate(); //执行数据库更新操作
  33.         pstmt.close();    //操作关闭
  34.         conn.close();        //连接关闭
  35.     }

  36. }

复制代码
文本feiq .txt有中文内容就会抛异常:Exception in thread "main" java.sql.SQLException: Incorrect string value: '\xBF\xC9\xD3\xD0\xBF\xC9...' for column 'note' at row 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
    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:2815)
    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 org.klaus.lobdemo.ClobDemo01.main(ClobDemo01.java:32)
其中我的mysql中的character_set是这样的,一种是敲用户名进入的,另一个是安装了mysql后,开始目录下就有,直接点,不用输入用户名,要输入密码进去的,为什么显示字符设置不一样。我的 mysql是mysql-installer-community-5.5.28.3.msi。

捕获.PNG (35.05 KB, 下载次数: 18)

捕获.PNG

作者: Den_din    时间: 2013-4-26 11:33
我以前也出现这种问题,好像是编码问题,输入数据的编码与数据库中字段的编码不一致,你可以用MySQL Workbench 5.2 CE管理MySql数据库,把编码设置好。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2