Hic ai giúp em với ạ
Không đổ được dữ liệu sản phẩm vào trang jsp java web
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
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
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;
}
}
Oh, đây không phải là phần tớ cần, đây là phần cậu cần
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
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
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
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.
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