永发信息网

向mysql插入一个longtext对象,文件大小为968B,插进去却是933B?

答案:2  悬赏:0  手机版
解决时间 2021-01-24 01:54
  • 提问者网友:蔚蓝的太阳
  • 2021-01-23 11:22
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.Reader;
import java.sql.*;

public class WriteMySQL {
public static void main(String[] args){
// LongBlob
// create table test(b longblob,t longtext);
ConnFactory conn = null;//ConnFactory是一个连接数据库的工厂类
Connection con = null;
PreparedStatement ps = null;
String sql = "insert into test values(?,?)";
try{
conn = ConnFactory.newInstance();
con = conn.getConnection("mysql");
ps = con.prepareStatement(sql);
File file = new File("E:\\图片\\3.jpg");
InputStream is = new FileInputStream(file);
int len = (int)file.length();
ps.setBinaryStream(1,is,len);
File file2 = new File("E:\\学习\\Test.java");
Reader reader = new FileReader(file2);
int len2 = (int)file2.length();System.out.println(len2);
ps.setCharacterStream(2,reader,len2);
ps.executeUpdate();
reader.close();
is.close();
}catch(Exception e){
e.printStackTrace();
}finally{
conn.close(con,ps,null);
}
}
}

图片那个没问题,文本的那个每次都会少几行

不传长度的那个方法好像没实现!

我试了一下
确实是因为有汉字,为什么汉字不行呢???
最佳答案
  • 五星知识达人网友:忘川信使
  • 2021-01-23 12:32
可以试下以下俩种:
1.setCharacterStream(int parameterIndex,
Reader reader)
不传长度
2.用setNCharacterStream此方法,
可能你数据库中的字符集和你文件的字符集不一致导致的问题。
你看纯英文时也会有上述问题么?

因为字符集不同时一个中文所占的长度就不同。
GBK时中文占2个UTF-8时一个中文占3个字节。所以你用第二种方法试试看看,它会帮你转码。
全部回答
  • 1楼网友:傲气稳了全场
  • 2021-01-23 13:38
gbk就错了,应该用utf8才对。 不过你数据库要和程序统一。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯