- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - phát hiện rò rỉ bộ nhớ Ruby/Ruby on Rails
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我在 SQLite 的 JDBC 驱动程序中遇到问题。
我正在使用 SELECT 语句执行查询。
如果我得到一个空的 ResultSet
(0 行),那么我会在调用 getString(1)
时看到抛出的“Closed ResultSet”异常。
在没有太多 JDBC 经验的情况下,我的理论(我无法通过 JavaDocs 确认 ResultSet
)是
getString(1)
不适用于空(零行)结果集(设计或由于错误)ResultSet
的“打开”标志在零行上设置为 SAI
(同样,设计或错误)我看到了这个bug report但不确定是否相关。
Câu hỏi của tôi là:
ResultSet
?对于 #4,我的解决方案是在 executeQuery()
之后立即调用 isFirst()
来检查结果集中是否有任何行。这是最佳实践方法吗?
(我也可以简单地选择一个插入的计数,因为我真的不需要结果集,只需要零-非零标志,但如果我确实关心选择的结果,我想知道正确的做法)
Cảm ơn!
câu trả lời hay nhất
无论是否为空,但执行以下操作总是错误:
resultSet = statement.executeQuery(sql);
string = resultSet.getString(1); // Epic fail. The cursor isn't set yet.
这不是错误。这是 documented behaviour .每个 decent JDBC tutorial提到它。在能够访问任何数据之前,您需要使用 Kế tiếp()
设置 ResultSet 的游标。
如果您真的对假定唯一的行是否存在感兴趣,那么只需检查Kế tiếp()
的结果。例如在一个虚构的 UserDAO
类中:
public boolean exist(String username, String password) throws SQLException {
boolean exist = false;
try (
Connection connection = database.getConnection();
PreparedStatement statement = connection.prepareStatement("SELECT id FROM user WHERE username = ? AND password = MD5(?)");
) {
statement.setString(1, username);
statement.setString(2, password);
try (ResultSet resultSet = statement.executeQuery()) {
exist = resultSet.next();
}
}
return exist;
}
如果您实际上只期望零 hoặc一个 行,那么只需执行以下操作:
public User find(String username, String password) throws SQLException {
User user = null;
try (
Connection connection = database.getConnection();
PreparedStatement statement = connection.prepareStatement("SELECT id, username, email, birthdate FROM user WHERE username = ? AND password = MD5(?)");
) {
statement.setString(1, username);
statement.setString(2, password);
try (resultSet = statement.executeQuery()) {
if (resultSet.next()) {
user = new User(
resultSet.getLong("id"),
resultSet.getString("username"),
resultSet.getString("email"),
resultSet.getDate("birthdate"));
}
}
}
return user;
}
然后在业务/领域对象中相应地处理它,例如
User user = userDAO.find(username, password);
if (user != null) {
// Login?
}
khác {
// Show error?
}
如果您实际上只期望零 hoặc许多 行,那么只需执行以下操作:
public List list() throws SQLException {
List users = new ArrayList();
try (
Connection connection = database.getConnection();
PreparedStatement statement = connection.prepareStatement("SELECT id, username, email, birthdate FROM user");
ResultSet resultSet = statement.executeQuery();
) {
while (resultSet.next()) {
users.add(new User(
resultSet.getLong("id"),
resultSet.getString("username"),
resultSet.getString("email"),
resultSet.getDate("birthdate")));
}
}
return users;
}
然后在业务/领域对象中相应地处理它,例如
List users = userDAO.list();
if (!users.isEmpty()) {
int count = users.size();
// ...
}
khác {
// Help, no users?
}
关于java - JDBC 驱动程序在空 ResultSet 上抛出 "ResultSet Closed"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1813858/
Vấn đề rất đơn giản: Tôi đang tìm một cách hay để sử dụng CompleteableFuture#đặc biệt với CompletableFuture#supplyAsync. Cách này không hiệu quả: priva.
Đối với các dịch vụ web, chúng tôi thường sử dụng maven-jaxb2-plugin để tạo java Beans và sử dụng mã hóa JAXB2 trong Spring. Tôi muốn biết cách xử lý (SOAP-
Câu hỏi này đã có câu trả lời: Chỉ mục mảng ngoài hành vi bị ràng buộc (10 câu trả lời) Đã đóng 8 năm trước. Tôi tò mò về mã C sau đây int main(){
Khi đối tượng MediaPlayer được khởi tạo ở đầu lớp với ngữ cảnh và tài nguyên, nó sẽ ném ngoại lệ NullPointer, nhưng khi nó được khai báo ở đầu lớp (vì vậy nó là null), thì nó được khởi tạo theo cách tương tự trên bên Tạo
Xin chào, tôi đang cố gắng kết nối chương trình java với API REST. Sử dụng cùng một phần mã, tôi nhận được ngoại lệ Java trong Java 6 và nó hoạt động tốt trong Java 8. Môi trường giống nhau: tin tưởng vào tác nhân người dùng unix của máy
Tôi đang cố gắng phân tích Twitter bằng Flume và Hive. Để nhận được các tweet từ Twitter, tôi đặt tất cả các tham số bắt buộc (consumerKey, ConsumerKey,
Tôi đang gặp một số vấn đề với ngoại lệ JavaFX. Dự án của tôi đang chạy trong Eclipse, nhưng bây giờ bạn tôi cũng đang cố gắng truy cập vào dự án. Chúng tôi đã chia sẻ và lưu trực tiếp vào thư mục dropbox. Nhưng đơn giản là anh ấy không thể làm cho nó hoạt động được. Anh ấy đang ở bàn điều khiển
Giả sử tôi đã xác minh id email bằng sự kiện Blur(), tôi đang thực hiện việc này: $('#email').blur(function(){ //make ajax call , kiểm tra xem có trùng lặp không
Tôi làm điều này để gọi các hàm không được quản lý từ mã C. pCallback là một con trỏ hàm và do đó là một đại biểu ở phía được quản lý. [DllImport("MyDLL.dll")] trạng thái công khai
Tại sao mã này đúng: try { } Catch(ArrayOutOfBoundsException e) {} Mã này sai: try { } Catch(IOException e) {} Mã này
Tôi gặp sự cố sau: Một tệp DLL có các hàm được xuất. Ví dụ về mã như sau: [Thư viện liên kết động] __declspec(dllexport) int openDevice(int,void**) [Application] dev.h: __de
Từ các chủ đề khác, tôi biết rằng chúng ta không nên ném ngoại lệ vào hàm hủy! Nhưng đối với ví dụ bên dưới, nó vẫn hoạt động. Điều này có nghĩa là chúng ta chỉ có thể ném ngoại lệ vào hàm hủy của một thể hiện? Chúng ta nên hiểu ví dụ mã này như thế nào!
Tại sao chúng ta cần ngoại lệ để tăng public static void main(String[
1. Cơ chế ngoại lệ của Java Lớp Throwable là lớp cha cấp cao nhất của các loại ngoại lệ Java. Chỉ khi một đối tượng là một thể hiện (trực tiếp hoặc gián tiếp) của lớp Throwable thì nó là một đối tượng ngoại lệ và có thể được cơ chế xử lý ngoại lệ nhận ra. . Trong JDK
Tôi mới làm quen với Python và tôi có câu hỏi về việc triển khai một phương pháp ngoại lệ nhất định. Đây là mã (viết tắt): class OurException(Exception): """Ngoại lệ do người dùng xác định"
Tôi đã tạo lược đồ sau để thể hiện mối liên kết giữa một người dùng và một tập hợp các chủ đề được sắp xếp theo thông báo cuối cùng của họ (luồng nào người dùng đã đọc và chuỗi nào chưa): CREATE TABLE table(user_id bigint, mes
Tôi đang viết một tập lệnh tự động hóa đơn giản bằng Python có thể đưa ra ngoại lệ ở nhiều nơi. Trong mỗi người trong số họ tôi muốn ghi lại một tin nhắn cụ thể và thoát khỏi chương trình. Để làm điều này, tôi nâng cao Sys sau khi bắt được ngoại lệ và xử lý nó (thực hiện các thao tác ghi nhật ký cụ thể, v.v.)
Bất cứ ai có thể giải thích tại sao điều này sẽ gây ra lỗi: let xs = [| "Mary"; "Mungo"; "Midge" |] Array.iter printfn xs Mặc dù đây không phải là trường hợp: Array.iter pr
Trên trang web sử dụng Play! của tôi, tôi có phần quản trị. Tất cả Bộ điều khiển dành cho quản trị viên đều có chú thích @With và @Check. Sau khi ngắt kết nối, mọi thứ hoạt động tốt. Sau khi kết nối, mỗi khi một trang được tải (bất kỳ trang nào, bất kể
Tôi cố gắng kết nối với bộ lưu trữ bảng Azure và thêm một đối tượng. Nó hoạt động tốt trên localhost, nhưng trên máy chủ tôi đang sử dụng, tôi gặp ngoại lệ sau với ngoại lệ bên trong của nó: Ngoại lệ của loại 'Microsoft.Wind
Tôi là một lập trình viên xuất sắc, rất giỏi!