问题的发生

昨天我帮我同学做了一个前端加后端的项目,使用的是mysql+jdbc+Servlet+jsp技术。
但是通过junit测试向数据库插入数据时,插入中文,在Navicat中是以问号显示的。
献上代码

@Test
public void test1() throws ParseException {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");


Book book = new Book(4,"冯凡利","hao",sdf.parse("2016-12-23"));
BookDao book1 = new BookDao();
try {
Integer integer = book1.addBook(book);
System.out.println(integer);
} catch (SQLException e) {
e.printStackTrace();
}
}

dao层数据库

public Integer addBook(Book book) throws SQLException {

int i = 0;
try {
connection = DB.getConnection();
String sql = "INSERT INTO book(b_name,b_type,b_time) VALUES(?,?,?)";
preparedStatement = (PreparedStatement) connection.prepareStatement(sql);

preparedStatement.setString(1,book.getB_name());
preparedStatement.setString(2,book.getB_type());
/* public void setDate(int parameterIndex, java.sql.Date x) */

/*
* 前边传过来的是java.util.Date
* 所以要
* java.util.Date 转 java.sql.Date
*
* */
java.util.Date b_time = book.getB_time();
java.sql.Date sqlDate=new java.sql.Date(b_time.getTime());

/*
* java.util.Date utilDate=new Date();
java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());
* */

preparedStatement.setDate(3,sqlDate);
i = preparedStatement.executeUpdate();

} catch (SQLException e) {
e.printStackTrace();
}finally {
DB.closeTwo(connection,preparedStatement);
}
return i;

}

解决方法

在jdbc驱动时,在URL后面放上这段代码 ?characterEncoding=utf-8
代码献上

private final static String URL = "jdbc:mysql://ip地址:3306/数据库名?characterEncoding=utf-8";
private final static String USERNAME = "root";
private final static String PASSWORD = "123456";