该问题发生在向数据库插入String中是出现乱码问题:
网上有很多解决办法,但是只有自己结果的方法才是好方法
问题的原因:
(1).创建数据库的时候数据编码设置错误
(2).连接数据库的时候数据编码设置错误
(3).创建表的时候数据编码设置错误
第一个问题解决办法是设置数据库的字符集
第二个问题的解决办法是
jdbc.url=jdbc:mysql://localhost:3306/ecmbs?useUnicode=true&characterEncoding=utf8
第三个解决办法
创建字段时使用utf8mp4字符集
但是此时依然是乱码,这是因为进行IO操作(获取文本字符内容)的时候没有使用OutputStreamReader,使用OutputStreamReader的话可以将编码设置为gbk
logger.info("向Photo表插入信息!");
//声明一个PhotoModel类的对象保存要插入的对象
PhotoModel photoModel = new PhotoModel();
photoModel.setTitle("富山春居图");
//定义一个字符串变量保存从一个文件中读取的内容
String remark = null;
//定义一个字节数组变量保存从一张图片中读取的内容
byte[] picture = null;
//声明一个字符输入流读取文件中的内容
InputStreamReader read = null;
//定义一个字节输入流对象读取照片的文件
InputStream inputStream = null;
//定义一个整型变量保存插入结果的返回值
int flag = 0;
try{
//声明File类的对象并实例化
File fileRemark = new File("G:"+File.separator+"remark.txt");
File filePictrue = new File("G:"+fileRemark.separator+"ECMBS.jpg");
//定义一个StringBuffer保存从文件中读取的数据
StringBuffer buf = new StringBuffer();
//声明一个字符输入流读取文件中的内容
read = new InputStreamReader(new FileInputStream(fileRemark),"gbk");
//定义一个变量保存读取的字符
int ch = read.read();
//当没有字符时,返回-1
while(ch != -1){
buf.append((char)ch);
ch = read.read();
}
System.out.println("buf = "+buf.toString());
//将字符数组转化为字符串,并赋值给PhotoModel对象的成员变量
photoModel.setRemark(buf.toString());
//定义一个字节输入流对象读取照片的文件
inputStream = new FileInputStream(filePictrue);
//定义一个字节数组保存读取照片内容
picture = new byte[inputStream.available()];
//读取照片内容
inputStream.read(picture);
//将读取的内容传给PhotoModel的对象
photoModel.setPicture(picture);
//执行插入操作
flag = photoMapper.insertPhoto(photoModel);
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {
//关闭输入输出流
inputStream.close();
read.close();
} catch (Exception e2) {
e2.printStackTrace();
}
//提交数据库操作
sqlSession.commit();
}
System.out.println("插入操作的返回结果是:"+flag);