Không đổ được dữ liệu sản phẩm vào trang jsp java web

Hic ai giúp em với ạ

Cậu show cho tớ kết quả của câu query này trong DB của cậu xem:

select * from tblProduct
4 Likes

Đây ạ

Cảm ơn cậu nhé!

Để cho cậu làm lần sau, khi cậu cần tìm hiểu lỗi, cậu cần loại trừ từng nguyên nhân một, để giảm phạm vi lỗi. Tớ mới giúp cậu loại trừ nguyên nhân cậu không có dữ liệu trong database :stuck_out_tongue:
Giờ, tớ cần cậu cung cấp thêm thông tin để loại trừ tiếp khả năng khác.

Trong code của cậu, có class Dao được implement như sau:

public class Dao {
	Connection conn = null;
	PreparedStatement ps = null;
	ResultSet rs = null;
	
	public ArrayList<Product> getAllProduct(){
		ArrayList<Product> list = new ArrayList<>();
		String query = "select * from tblProduct";
		try {
			conn = new DbConnection().getConnection();
			ps = conn.prepareStatement(query);
			rs = ps.executeQuery();
			while(rs.next()) {
				list.add(new Product(rs.getString(1), 
						rs.getString(2),
						rs.getDouble(3), 
						rs.getString(4), 
						rs.getString(5)));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return list;
	}
	
}

Cậu có thể thấy, cậu có bọc try/catch khi gọi tới CSDL, và không ghi lại thông tin exception khi có lỗi xảy ra. Đây là vài bài học tiếp theo cho cậu:

  • Khi implement bất cứ thứ gì, luôn luôn log lại thông tin exception. Đừng ỉm nó đi như vậy.
  • In general, fail-fast is better than fail-safe. Nếu có lỗi xảy ra, cậu nên dừng lại luôn và tung lỗi loạn xạ, thay vì ỉm đi như vậy.

Tớ cần cậu giúp: Ở phần catch, cậu có thể thêm e.printStackTrace() cho tớ, chạy lại chương trình, và nếu có exception tung ra, copy toàn bộ stacktrace của exception đó lên đây được không?

public class Dao {
	Connection conn = null;
	PreparedStatement ps = null;
	ResultSet rs = null;
	
	public ArrayList<Product> getAllProduct(){
		ArrayList<Product> list = new ArrayList<>();
		String query = "select * from tblProduct";
		try {
			conn = new DbConnection().getConnection();
			ps = conn.prepareStatement(query);
			rs = ps.executeQuery();
			while(rs.next()) {
				list.add(new Product(rs.getString(1), 
						rs.getString(2),
						rs.getDouble(3), 
						rs.getString(4), 
						rs.getString(5)));
			}
		} catch (Exception e) {
			e.printStackTrace(); // =====> thêm dòng này
		}
		return list;
	}
	
}
4 Likes

Cảm ơn bạn đã chỉ bảo nha.Bạn xem đây có đúng là phần bạn cần không ạ?

Oh, đây không phải là phần tớ cần, đây là phần cậu cần :smile:

Trong stacktrace, cậu có thấy vấn đề rồi:

  • Cậu bị ClassNotFoundException, do không tìm thấy class SQLServerDriver
  • Exception được tung ra ở DBConnection class, dòng 12

Bài học tiếp theo cho cậu: Cậu phải tập đọc stacktrace để biết lỗi của cậu ở đâu :smile:


Dưới đây là cài đặt của DbConnection:

public class DbConnection {
	
	public Connection getConnection()throws Exception {
        String url = "jdbc:sqlserver://"+serverName+":"+portNumber + "\\" + instance +";databaseName="+dbName;
        if(instance == null || instance.trim().isEmpty())
            url = "jdbc:sqlserver://"+serverName+":"+portNumber +";databaseName="+dbName;
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // dòng 12
        return DriverManager.getConnection(url, userID, password);
    }  
...

Cậu bị lỗi ở dòng Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");. Có vẻ như cậu chưa import jar file của thư viện này (file mssql-jdbc-8.2.0.jar), hoặc import không thành công.

Sau đó, tớ có tìm trong file .classpath của cậu, và thấy:

	<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
...
	<classpathentry kind="lib" path="C:/Users/admin/eclipse-workspace/jdbc/libs/mssql-jdbc-8.2.0.jre13.jar"/>

Đây là vấn đề của cậu. Cậu sử dụng JDK 8, nhưng lại dùng mssql-jdbc-8.2.0.jre13.jar của JDK 13 :scream:
Tớ biết cậu dùng JDK 13, nhưng cậu lại target project của cậu với JDK 8, nên cậu cần phải, hoặc target java 13 cho project này, hoặc import mssql-jdbc-8.2.2.jre8.jar vào để dùng.

Cậu thử import lại, dùng file mssql-jdbc-8.2.2.jre8.jar, rebuild project và chạy lại chương trình xem. Nhớ kiểm tra trong WEB-INF/lib có file jar đó trước không nhé!

See also: https://docs.microsoft.com/en-us/sql/connect/jdbc/using-the-jdbc-driver?view=sql-server-ver15

8 Likes

Cảm ơn bạn nhiều nha mình làm được rồi.Nhờ bạn mà mình học được rất nhiều thứ.Thank you so much.

1 Like

Bạn ơi mình cũng bị lỗi không đổ sản phẩm được lên jsp ó. Không biết giờ mình rep thì bạn có help được mình ko

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