最近搜集了2005年至2012年所有在我们国家登陆的有名称记载的台风数据,加之前段时间刚刚学习了Hibernate框架,因此想将这个数据做一个简单的入库存放至mysql当中,但是将一些中文值存入至数据库中时候为出现乱码问号,在网上搜集了一下解决办法,大多数说修改mysql的配置文件,经过尝试还是没办法解决问题,后来发现需要在控制台中用命令行才能解决。具体方法如下:
1)首先在命令行中输入show variables like “%char%”;
2 )依次输入set names utf8;
ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `tb_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;这样以后按理说应该已经解决问题了,经过测试发现从程序中写进去依旧是问号, 但是在数据库中直接修改则可以保存为中文;因此可以断定不是mysql的问题了;
经查发现是Hibernate框架的编码问题,只要在hibernate.cfg.xml中添加
就可以解决问题啦。
import java.sql.Date;
import java.util.HashMap;
public class TyphoonTable {
private int id;
private String typhoonNum;
private String typhoonName;
private int typhoonIntensity;
private String typhoonLocation;
private String longitude;
private String latitude;
private Date time;
private int windCircleRadius;
private int windPower;
private int windSpeed;
private int airPressure;
private double casualties;
private double cropsDamaged;
private double housesCollapsed;
private double directEconomicLosses;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTyphoonNum() {
return typhoonNum;
}
public void setTyphoonNum(String typhoonNum) {
this.typhoonNum = typhoonNum;
}
public String getTyphoonName() {
return typhoonName;
}
public void setTyphoonName(String typhoonName) {
this.typhoonName = typhoonName;
}
public int getTyphoonIntensity() {
return typhoonIntensity;
}
public void setTyphoonIntensity(int typhoonIntensity) {
this.typhoonIntensity = typhoonIntensity;
}
public String getTyphoonLocation() {
return typhoonLocation;
}
public void setTyphoonLocation(String typhoonLocation) {
this.typhoonLocation = typhoonLocation;
}
public String getLongitude() {
return longitude;
}
public void setLongitude(String longitude) {
this.longitude = longitude;
}
public String getLatitude() {
return latitude;
}
public void setLatitude(String latitude) {
this.latitude = latitude;
}
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
public int getWindCircleRadius() {
return windCircleRadius;
}
public void setWindCircleRadius(int windCircleRadius) {
this.windCircleRadius = windCircleRadius;
}
public int getWindPower() {
return windPower;
}
public void setWindPower(int windPower) {
this.windPower = windPower;
}
public int getWindSpeed() {
return windSpeed;
}
public void setWindSpeed(int windSpeed) {
this.windSpeed = windSpeed;
}
public int getAirPressure() {
return airPressure;
}
public void setAirPressure(int airPressure) {
this.airPressure = airPressure;
}
public double getCasualties() {
return casualties;
}
public void setCasualties(double casualties) {
this.casualties = casualties;
}
public double getCropsDamaged() {
return cropsDamaged;
}
public void setCropsDamaged(double cropsDamaged) {
this.cropsDamaged = cropsDamaged;
}
public double getHousesCollapsed() {
return housesCollapsed;
}
public void setHousesCollapsed(double housesCollapsed) {
this.housesCollapsed = housesCollapsed;
}
public double getDirectEconomicLosses() {
return directEconomicLosses;
}
public void setDirectEconomicLosses(double directEconomicLosses) {
this.directEconomicLosses = directEconomicLosses;
}
}
@Test
public void addTyphoonDis() throws IOException
{
FileReader fileReader=new FileReader(new File("typhoon.txt"));
@SuppressWarnings("resource")
BufferedReader bufferedReader=new BufferedReader(fileReader);
String everyLine;
String[] cells;
everyLine=bufferedReader.readLine() ;
while (everyLine!= null )
{
//everyLine.replaceAll(" ", "");
cells=everyLine.split("\t");
Session session=HibernateUtils.getSession();
TyphoonTable typhoon=new TyphoonTable();
typhoon.setTyphoonNum(cells[0]);
typhoon.setTyphoonName(cells[1]);
typhoon.setTyphoonIntensity(intensity.get(cells[2]));
typhoon.setTyphoonLocation(cells[3]);
typhoon.setLongitude(cells[4]);
typhoon.setLatitude(cells[5]);
typhoon.setTime(Date.valueOf(cells[6]));
typhoon.setWindCircleRadius(Integer.parseInt(cells[7]));
typhoon.setWindPower(Integer.parseInt(cells[8]));
typhoon.setWindSpeed(Integer.parseInt(cells[9]));
typhoon.setAirPressure(Integer.parseInt(cells[10]));
typhoon.setCasualties(Double.parseDouble(cells[11]));
typhoon.setCropsDamaged(Double.parseDouble(cells[12]));
typhoon.setHousesCollapsed(Double.parseDouble(cells[13]));
typhoon.setDirectEconomicLosses(Double.parseDouble(cells[14]));
Transaction transaction=session.beginTransaction();
try {
session.save(typhoon);
transaction.commit();
}
catch (Exception e)
{
// TODO: handle exception
e.printStackTrace();
transaction.rollback();
}
finally
{
session.close();
}
everyLine=bufferedReader.readLine() ;
}
}
结果:
PS:刚才开始学习,所以水平难免不登台面,希望能请各位牛人多多指点!