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);
}
}
}
图片那个没问题,文本的那个每次都会少几行
不传长度的那个方法好像没实现!
我试了一下
确实是因为有汉字,为什么汉字不行呢???
向mysql插入一个longtext对象,文件大小为968B,插进去却是933B?
答案:2 悬赏:0 手机版
解决时间 2021-01-24 01:54
- 提问者网友:蔚蓝的太阳
- 2021-01-23 11:22
最佳答案
- 五星知识达人网友:忘川信使
- 2021-01-23 12:32
可以试下以下俩种:
1.setCharacterStream(int parameterIndex,
Reader reader)
不传长度
2.用setNCharacterStream此方法,
可能你数据库中的字符集和你文件的字符集不一致导致的问题。
你看纯英文时也会有上述问题么?
因为字符集不同时一个中文所占的长度就不同。
GBK时中文占2个UTF-8时一个中文占3个字节。所以你用第二种方法试试看看,它会帮你转码。
1.setCharacterStream(int parameterIndex,
Reader reader)
不传长度
2.用setNCharacterStream此方法,
可能你数据库中的字符集和你文件的字符集不一致导致的问题。
你看纯英文时也会有上述问题么?
因为字符集不同时一个中文所占的长度就不同。
GBK时中文占2个UTF-8时一个中文占3个字节。所以你用第二种方法试试看看,它会帮你转码。
全部回答
- 1楼网友:傲气稳了全场
- 2021-01-23 13:38
gbk就错了,应该用utf8才对。 不过你数据库要和程序统一。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯