Làm sao để sửa lỗi EXCEPTION_ACCESS_VIOLATION (0xc0000005)

mình bị lỗi ở dưới hôm qua đến giờ vẫn ko sửa được, mong mọi người giúp đỡ

# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ff9a00dd248, pid=4404, tid=3528
#
# JRE version: OpenJDK Runtime Environment Temurin-16.0.2+7 (16.0.2+7) (build 16.0.2+7)
# Java VM: OpenJDK 64-Bit Server VM Temurin-16.0.2+7 (16.0.2+7, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, windows-amd64)
# Problematic frame:
# V  [jvm.dll+0x3dd248]
#
# No core dump will be written. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# F:\Java\hs_err_pid4404.log
#
# If you would like to submit a bug report, please visit:
#   https://github.com/adoptium/adoptium-support/issues
#

Bạn có thể cho mọi người biết bạn đang làm gì được không?

Bạn đã thử mở file log này xem có gì chưa?

1 Like

Mình đang thử kết nối sql server với driver jdbc, còn đây là file log: http://codepad.org/8mI0Gat8 https://file.io/kLrU2FaIrvYi. Mong bác giúp đỡ.

@Nguyen_Quang_Minh2 lưu ý, trang file.io sẽ xóa tập tin sau khi tải 1 lần nên những người vào sau sẽ không thấy được.
Bạn nên đưa lên các trang lưu trữ dài hạn như CodePad mà mình đã sửa cho bạn.

Mình đọc sơ qua thì có thể do sqljdbc_auth.dll chứa mã JNI (Java Native Interface - C/C++) gây ra. Bạn thử dùng 1 thư viện JDBC phiên bản khác thử xem.

3 Likes

mình có để khá nhiều thư viện JDBC, giờ mình chỉ để lại mỗi JDBC 9.4 phù hợp với Java 16 của mình, thì giờ nó lỗi:

May 01, 2022 11:42:58 AM com.microsoft.sqlserver.jdbc.AuthenticationJNI <clinit>
WARNING: Failed to load the sqljdbc_auth.dll
Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: This driver is not configured for integrated authentication.
	at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2338)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:1929)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:1917)
	at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1061)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:833)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:716)
	at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:841)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
	at Kh.Test.main(Test.java:51)

mong bác giúp đỡ

Nó quăng ngoại lệ khi chạy rồi phải không?

1 Like

quá chán nản vì không sửa được, mình tạo project mới, dùng java 17, đã add lib rồi nhưng vẫn báo ngoại lệ: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver

code của mình:

   import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
    import com.microsoft.sqlserver.jdbc.SQLServerException;
    import com.microsoft.sqlserver.jdbc.SQLServerDriver;
    import java.sql.Connection;
    import java.sql.SQLException;
import java.sql.*;
public class kh {
    public static void main(String args[]) throws SQLException {
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            SQLServerDriver driver = new SQLServerDriver();
            String dbUrl = "jdbc:sqlserver://localhost:1433; DatabaseName=kh" ;
            String username = "sa"; String password= "123";
            Connection con=DriverManager.getConnection(dbUrl, username, password);
            Statement stmt=con.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM kh");
            System.out.println(rs);
        } catch(Exception e){
            System.out.println(e); 
        }
    }
}

Mình có tìm hiểu bên topic : Lỗi java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver khi truy xuất dữ liệu database trên web - programming - Dạy Nhau Học (daynhauhoc.com)
nhưng vẫn không được, ngoại trừ việc tạo thư mục lib trong WEB-INF vì mình thấy hơi khó hiểu
Mong bác giúp đỡ.

mình có thử dùng kết nối database của intellij thì hiện như ảnh
image
mình thử thêm JDBC driver 9.4 với JDBC4.2 thì khi chạy lại báo lỗi :

Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
        	at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2874)
        	at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:2361)
        	at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$100(SQLServerConnection.java:44)
        	at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:2347)
        	at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:6276)
        	at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1794)
        	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1405)
        	at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1069)
        	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:905)
        	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:452)
        	at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1014)
        	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:681)
        	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:229)
        	at kh.main(kh.java:15)
        Caused by: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
        	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
        	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
        	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
        	... 14 more
        Process finished with exit code 1 

Mình lại thử 1 project khác

    import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
        import com.microsoft.sqlserver.jdbc.SQLServerException;
        import com.microsoft.sqlserver.jdbc.SQLServerDriver;
    import java.sql.*;
    public class kh {
        public static void main(String args[]) throws SQLException {
            try{
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                SQLServerDriver driver = new SQLServerDriver();
                String dbUrl = "jdbc:sqlserver://localhost:1433; DatabaseName=kh;encrypt=true;trustServerCertificate=true;" ;
                String username = "sa"; String password= "123";
                Connection con= DriverManager.getConnection(dbUrl, username, password);
                Statement stmt=con.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT * FROM kh");
                System.out.println(rs);
            } catch(Exception e){
                System.out.println(e);
            }
        }
    }

lần này lại báo lỗi:

com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "No appropriate protocol (protocol is disabled or cipher suites are inappropriate)".

dù có thêm

encrypt=true;trustServerCertificate=true;

hay

encrypt=false;sslProtocol=TLSv1;"

cũng không được, mình có thử vào java.security như trên mạng để thêm vài dòng vào nhưng vẫn không được

Tớ chỉ thảo luận trên project mới nhất của cậu thôi nha :smile:
Như cậu đã thấy ở thông điệp lỗi, app của cậu không thiết lập được connection sử dụng SSL encryption, với nguyên nhân chi tiết có thể do protocol bị disable, hoặc cipher suits không phù hợp.
Tớ không biết cậu đang dùng Java version nào (cậu nên đề cập nó ở những lần sau, khi cậu mô tả lỗi khi dùng Java), nhưng Java version mới đã disable TLSv1 và TLSv1.1 (những giải thuật cần có để thiết lập kết nối secure tới sqlserver phiên bản cũ hơn). Khả năng cao đó là lý do khiến cậu gặp vấn đề.
Cậu thử làm các bước dưới đây xem nhé!

  • Mở file java.security của phiên bản jdk cậu đang dùng cho project (cậu biết nó rồi), tìm dòng jdk.tls.disabledAlgorithms.
  • Ở dòng này, cậu tìm và xóa 2 giải thuật TLSv1TLSv1.1. Save file sau khi sửa.
  • Restart JVM (nếu cậu không biết cách, restart máy :smile:)
  • Thử lại trên project.

Nếu gặp tiếp vấn đề, cậu nên đề cập rõ phiên bản jdk cậu đang dùng, cộng thêm với file pom.xml (hoặc file setting tương tự ở tool build mà cậu sử dụng). Nếu được, 1 project trên github sẽ là tốt nhất :smile:

Hope it helps!

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?