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

本文详细介绍了使用Hibernate框架处理中文乱码问题,并通过代码示例展示了如何将收集的数据入库至MySQL数据库。重点在于解决中文乱码显示为问号的问题,以及在hibernate.cfg.xml中配置解决编码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

                  

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值