Hibernate框架下向mysql中写入中文乱码解决方案

         最近搜集了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:刚才开始学习,所以水平难免不登台面,希望能请各位牛人多多指点!

                  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值