在JSP中使用MySQL,常常需要处理中文字符的问题。因为MySQL默认使用UTF-8编码,而JSP也可以指定使用UTF-8编码。但是在连接MySQL数据库时,需要设置字符集,确保中文字符能够正确存储和读取。
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<%@ page import="javax.naming.*" %>
<%!
Connection conn;
%>
<%
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC", "root", "password");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
%>
上面的代码片段就是一个JSP页面连接MySQL数据库,并且设置了UTF-8编码的示例。需要注意的是,加载MySQL的驱动程序需要使用Class.forName()方法;连接MySQL数据库需要指定URL、用户名、密码,并且在URL中设置了useUnicode和characterEncoding属性值。
在JSP页面中执行MySQL查询操作,也需要设置字符集,并且在查询之后,对中文字符进行编码转换,以免乱码的情况发生。
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<%@ page import="javax.naming.*" %>
<%!
Connection conn;
%>
<%
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC", "root", "password");
Statement stmt = conn.createStatement();
String sql = "SELECT * FROM mytable";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
String name = rs.getString("name");
String content = rs.getString("content");
name = new String(name.getBytes("ISO-8859-1"), "UTF-8");
content = new String(content.getBytes("ISO-8859-1"), "UTF-8");
out.println("<p>" + name + " - " + content + "</p>");
}
rs.close();
stmt.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
%>
上面的代码片段展示了如何在JSP页面中执行MySQL查询,并将查询结果输出到页面上。需要注意的是,设置了字符集之后,在读取ResultSet中的数据时,使用了getBytes()方法获取字符数组,并且通过String类的构造函数,将其转换为UTF-8编码的字符串。
总之,JSP和MySQL的结合可以实现强大的网站应用开发,但在处理中文字符时需要特别注意编码和转换的问题。