通過JDBC操作資料庫時出現中文亂碼的問題,Navicat
阿新 • • 發佈:2018-12-21
問題的發生
昨天我幫我同學做了一個前端加後端的專案,使用的是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";