如上图, 向MySQL数据库中插入中文内容时, 插入的信息变成了问号。
解决办法如下:
1. 设置jsp页面的编码格式。
我的项目中是这样的:
添加图书信息
图书名称:
图书价格:
图书数量:
图书作者:
2. 设置数据库的编码方式:
我的项目中是这样的:
TitleConnection connection = null;//Connection连接
Class.forName("com.mysql.jdbc.Driver");//加载数据驱动,注册到驱动管理器
String url = "jdbc:mysql://localhost:3306/mysql?characterEncoding=utf-8";//数据库连接字符串
String username = "Chintsai";//数据库用户名
String password = "1234";//数据库密码
connection = DriverManager.getConnection(url, username, password);
String sql = "insert into purchase_book(title,price,amount,author) values (?,?,?,?)";//添加图书信息的SQL语句
PreparedStatement preparedStatement = null;//获取PreparedStatement
try {
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, book.getTitle());//对SQL语句中的第1个参数赋值
preparedStatement.setDouble(2, book.getPrice());//对SQL语句中的第2个参数赋值
preparedStatement.setInt(3, book.getBookCount());//对SQL语句中的第3个参数赋值
preparedStatement.setString(4, book.getAuthor());//对SQL语句中的第4个参数赋值
int row = preparedStatement.executeUpdate();//执行更新操作,返回所影响的行数
if (row > 0)//判断是否更新成功
out.println("成功添加了" + row + " 条信息");//更新成功输出信息
} catch (Exception e) {
e.printStackTrace();
} finally {
try {//关闭PreparedStatement,释放资源
if (preparedStatement != null)
preparedStatement.close();
preparedStatement = null;
} catch (Exception e) {
e.printStackTrace();
}
try {//关闭Connection,释放资源
if (connection != null)
connection.close();
connection = null;
} catch (Exception e) {
e.printStackTrace();
}
}
%>
3. 设置JDBC连接的编码方式:
即上图中的那一行代码:
String url = "jdbc:mysql://localhost:3306/mysql?characterEncoding=utf-8";//数据库连接字符串
这一步很多人容易疏漏,因而产生乱码,要特别注意哟(^U^)ノ~YO
最后,贴上完整的项目代码:Github