1. 程式人生 > >通過JDBC操作資料庫時出現中文亂碼的問題,Navicat

通過JDBC操作資料庫時出現中文亂碼的問題,Navicat

問題的發生

昨天我幫我同學做了一個前端加後端的專案,使用的是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";