Mang đến cho bạn hành trang là Kiến thức và Kinh nghiệm

Lựa chọn chủ đề bạn quan tâm

Cùng nhau thảo luận về các vấn đề

Hãy theo dõi chúng tôi nếu bạn thấy bổ ích

  1. Hỏi đáp IT
  2. Hỏi nhanh

Java--Lỗi lưu tiếng Việt có dấu thông qua JDBC

Em đang dùng mySQL trong XAMPP để làm cái này, nhưng lưu xuống chỗ nào có dấu là thành dấu ? 
Ví dụ : Lỗi Hoài => "L?i hoài". 
Ai giúp em với !!
Code đây ạ !!

package DAO; 

import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.ArrayList; 

import model.CaSi; 
import Controller.ConnectionDB; 

public class CaSy { 
    public void getCaSy() throws SQLException { 
        String casyID = null; 
        String tenCaSy = null; 
        String moTa = null; 
        CaSi cs = new CaSi(casyID, tenCaSy, moTa); 
        String sql = "select * from casy"; 
        ArrayList list = new ArrayList(); 
        Connection con = ConnectionDB.getConnection(); 
     
        PreparedStatement ps = con.prepareStatement(sql); 
        ResultSet rs = ps.executeQuery(); 
         

        while (rs.next()) { 
            cs.setCasyID(rs.getString(1)); 
            cs.setTenCaSy(rs.getString(2)); 
            cs.setMoTa(rs.getString(3)); 
            list.add(cs); 
            System.out.print(rs.getString(1)); 
            System.out.print("\t"); 
            System.out.print(rs.getString(2)); 
            System.out.print("\t"); 
            System.out.print(rs.getString(3)); 
            System.out.println(); 
        } 
    } 
public static void themCaSi( CaSi cs1 ) throws SQLException{ 
    Connection connection = ConnectionDB.getConnection(); 
    String sql = "insert into casy(id,name,mota) values(?,?,?)"; 
    PreparedStatement ps; 
    ps = connection.prepareStatement(sql); 
    ps.setString(1, cs1.getCasyID()); 
    ps.setString(2, cs1.getTenCaSy()); 
    ps.setString(3, cs1.getMoTa()); 
    ps.executeUpdate(); 
    System.out.println("Thêm thành công"); 
    System.out.println(ps.toString()); 
    connection.close(); 
    public static void main(String[] args) { 
        CaSy cs = new CaSy(); 
        CaSi themCS = new CaSi("111", "Mệt quá", "Lỗi hoài"); 
        try { 
            cs.themCaSi(themCS); 
        } catch (SQLException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
             
        } 
    } 
}  
Câu trả lời

- Bạn đã sẵn sàng thảo luận về chủ đề này. Hãy bấm "Viết bình luận", bạn có thể lựa chọn sử dụng tài khoản Facebook hoặc Google++

- Vì sự phát triển của cộng đồng CNTT/CNPM tại Việt Nam!

Unknown user
No responses yet

Trong phần connect với database bạn cần set charset là UTF8 để có thể truy cập bằng tiếng Việt. Bạn có thể dùng cách sau:
1. Kiểm tra lại xem database bạn tạo có phải sử dụng UTF8, cụ thể với tiếng Việt thường dùng là utf8_unicode_ci hay không

2. sử dụng chuỗi sau trong phần kết nối jdbc: 

jdbc:mysql://localhost:3306/administer?characterEncoding=utf8
0 Lượt thích

package Controller; 

import java.sql.*; 

import javax.servlet.RequestDispatcher; 

public class ConnectionDB { 

    public static Connection getConnection() { 
        Connection connection = null; 
        try { 
            Class.forName("com.mysql.jdbc.Driver"); 
            connection = (Connection) DriverManager 
                    .getConnection( 
                            "jdbc:mysql://localhost:3306/detaiweb2?useUnicode=true&characterEcoding=utf-8", 
                            "root", ""); 
            return connection; 
        } catch (ClassNotFoundException e) { 
            // No driver err 
            e.printStackTrace(); 
        } catch (SQLException e) { 
            // Can not connect 
            e.printStackTrace(); 
        } catch (Exception e) { 
            // Orther err 
            e.printStackTrace(); 
        } 

        return connection; 
    } 

}  

Em cũng thử rồi bác ơi !! vẫn lỗi :'(
0 Lượt thích

Khó hiểu nhỉ mình làm thế có bao giờ lỗi đâu. Bạn kiểm tra lại database chưa?
Nếu database chuẩn rồi mà không được thì bạn thử thêm cái lệnh này 

stmt = connection.createStatement();
stmt.executeUpdate("SET CHARACTER SET UTF8");
stmt.close();

vào sau cái lệnh này

connection = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/detaiweb2?useUnicode=true&characterEcoding=utf-8","root", "");
0 Lượt thích



Vẫn lỗi bác à 
0 Lượt thích

Bạn thêm cái stmt.executeUpdate("SET CHARACTER SET UTF8"); vào nhầm chỗ rồi, ý mình là bạn thêm nó vào ngay sau khi vừa tạo xong kết nối ấy, chỉ cần 1 lần như thế thôi chứ bạn thêm vào chỗ kia thì không có ý nghĩa gì cả vì câu lệnh preparedstatement đã được tạo rồi.
0 Lượt thích

bnj nên xem lại trường dữ liệu "Tên Ca Sỹ" và "Mô Tả" trong database có đang để là nvarchar ko. Nếu để là varchar() thì lỗi dữ liệu là đúng rồi!
0 Lượt thích

Bạn Phạm Minh Quân..Trong database các trường đấy mình để type nvarchar() rồi bạn à.
0 Lượt thích

Trong java mình nhớ còn 1 cách thực thi truy vấn khác, hem có nhớ chính xác cũng 4 năm rồi ko đụng tới java là:
Code:
stmt = conn.createStatement();
sql = "INSERT INTO CaSy " + "VALUES(111, N'Mệt quá', N'Lỗi hoài')";
stmt.executeUpdate(sql);
Nếu có bạn hãy thử vậy xem có dc hem.
0 Lượt thích

-Mình sẽ bảo cho bạn cách này , đây là cách bọn mình thường làm trong công ty các dự án 
+ để tránh trường hợp tiếng việt bị lỗi , chúng ta ko nên viết trực tiếp vào trong code, mà phải thông qua 1
properties file .
+ //
+ open file đó ra và bạn sẽ thêm vào trong đó những câu mà cần hiện thị tiếng việt : 
- ví dụ : 
PHP Code:
                   //  
rồi save
+ sau đó bạn tạo 1 class tên : MessageLocal.java

 import java.io.FileInputStream;

import java.util.Locale;
import java.util.MissingResourceException;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;


public class 
MessageLocal {
   
//
    
}


    public static 
String getString(String key) {
        try {
            return 
rb.getString(key);
        } catch (
MissingResourceException e) {
            return 
'!' + key + '!';
        }
    }


}  

+ sau đó bạn sẽ gọi nó trong code của bạn chằng hạn : 

 public static void main(String[] args){
               
MessageLocal msgL = new MessageLocal();
                
Casy cs =new Casy();
                
Casi themCS =new Casi("111",msgL.loi1,msgL.loi2);
             } 

+ Bạn test thử xem , 

0 Lượt thích

"INSERT INTO CaSy " +
"VALUES(111, N'Mệt quá', N'Lỗi hoài')";
Thêm N' vào đằng trước này là đúng rồi.
Với SQL thì phải vậy, thêm n' đằng trước để insert, update ko bị lỗi dấu ?
0 Lượt thích

Từ khóa tìm kiếm

Câu trả lời mới nhất

Tin tuyển dụng