Java web使用JDBC连接MySQL进行插入操作时中文显示乱码

FfanWang 2018-03-25 10:29:04
在学习struts2框架,在使用insert语句插入MySQL数据库时中文显示为乱码???。常见的解决方法都试过了。

这是注册界面的jsp代码,规定了utf-8编码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册页面</title>
</head>
<body>
<form action="registeraction" method="post">
账号:<input type="text" name="userID"/><br />
用户名:<input type="text" name="username"/><br />
密码:<input type="password" name="password"/><br />
用户类别:<input type="text" name="level"/><br />
<input type="submit" value="注册"/>
</form>
</body>
</html>

这是相应的java代码,已经在连接数据库时加入了useUnicode=true&characterEncoding=utf-8语句
package com.user.regiseraction;

import java.sql.*;

public class registeraction {
private String userID = new String();
private String username = new String();
private String password = new String();
private String level = new String();
public String execute() throws ClassNotFoundException, SQLException{
ResultSet rs1 = null,rs2 = null ;
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Success loading Mysql Driver!");

String searchStr1 = null,searchStr2 = null;
System.out.println("for searchStr1,userID=" + userID);
searchStr1 = "select * from user where userID=\"" + userID + "\";";
switch (level){
case "1"://student
searchStr1 = "select * from student where studentID=\"" + userID + "\";";
break;
case "2"://teacher
searchStr1 = "select * from teacher where teacherID=\"" + userID +"\";";
break;
case "3"://assistant
searchStr1 = "select * from assistant where assistantID=\"" + userID +"\";";
break;
}
System.out.println(searchStr1);

Connection connect;
try {
connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/stufigure?useUnicode=true&characterEncoding=utf-8","root","fanfun");
Statement stmt = connect.createStatement();
rs1 = (ResultSet) stmt.executeQuery(searchStr1);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

searchStr2 = "select * from user where userID=\"" + userID + "\";";
try {
connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/stufigure?useUnicode=true&characterEncoding=utf-8","root","fanfun");
Statement stmt = connect.createStatement();
rs2 = (ResultSet) stmt.executeQuery(searchStr2);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (rs1.next() && !rs2.next()){
connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/stufigure","root","fanfun");
Statement stmt = connect.createStatement();
String str = "insert into user values(\"" + userID + "\",\"" + username + "\",\"" + password + "\"," + level + ");";
System.out.println(str);
stmt.executeUpdate(str);
return "success";
}
else
return "fail";
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
}

这是相应的web.xml文件,也是使用的utf-8编码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>library</display-name>
<welcome-file-list>
<!-- 设置起始欢迎界面 -->
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<!-- 定义核心filter名称 -->
<filter-name>struts2</filter-name>
<!-- 定义核心filter实现类 -->
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<!-- 核心filter名称 -->
<filter-name>struts2</filter-name>
<!-- 使用该核心filter接受所有的WEB请求 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

也改了数据库的编码方式




从jsp页面传回后台的参数是正确的,生成的插入语句中文格式正确
insert into user values("1140310601","用户","1",1);

以上为问题的详细描述,求问各路大神这个问题应该如何解决。谢谢了。
...全文
629 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
捞的不谈 2018-03-26
  • 打赏
  • 举报
回复
引用 4楼Dragion33 的回复:
web的三个基本编码方式,request里的修改字符编码方法,(set开头方法名我不会背)。第二个是用iso-8859-1统一编码,第三个是修改tomcat的server.xml文件,就是楼上的那种改法。
楼上改的是mysql的,哈哈 看错了
捞的不谈 2018-03-26
  • 打赏
  • 举报
回复
web的三个基本编码方式,request里的修改字符编码方法,(set开头方法名我不会背)。第二个是用iso-8859-1统一编码,第三个是修改tomcat的server.xml文件,就是楼上的那种改法。
  • 打赏
  • 举报
回复
以前也遇到过这种问题,还问过一个老师,他说是什么JVM字符编码得得。。。没有解决,心疼一发
快翻身啊咸鱼 2018-03-25
  • 打赏
  • 举报
回复
改一下数据库里面的my.ini文件 [client] port=3306 [mysql] default-character-set=utf8
沁海棠 2018-03-25
  • 打赏
  • 举报
回复
把表删了在建一下试试
FfanWang 2018-03-25
  • 打赏
  • 举报
回复
现在发现了一个问题,在修改数据库编码方式之后,通过命令行插入中文字符为非法,选择语句显示结果中文也是乱码


如果改回默认的编码方式,通过控制台执行操作的结果是正确的

67,517

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧