क्योंकि आप संपूर्ण . को ढो रहे हैं जावा की स्मृति में डेटाबेस तालिका नीचे और परीक्षण प्रत्येक थोड़ी देर के लूप में पंक्ति। यदि कोई मेल मिलता है तो आप लूप को नहीं तोड़ते हैं ताकि वह अंतिम पंक्ति तक बूलियन परिणाम को ओवरराइट करना जारी रखे।
उस ने कहा, आप वास्तव में जावा में तुलना नहीं करना चाहते हैं। बस SQL WHERE
का इस्तेमाल करें खंड
. यह बहुत है अधिक कुशल और वास्तव में वह कार्य जो डीबी को करना चाहिए। जावा में डीबी के काम को लेने की कोशिश मत करो, यह केवल अक्षम होने जा रहा है।
public boolean exists(String username, String password) throws SQLException {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
boolean exists = false;
try {
connection = database.getConnection();
preparedStatement = connection.prepareStatement("SELECT id FROM client WHERE username = ? AND password = ?");
preparedStatement.setString(1, username);
preparedStatement.setString(2, password);
resultSet = preparedStatement.executeQuery();
exists = resultSet.next();
} finally {
close(resultSet);
close(preparedStatement);
close(connection);
}
return exists;
}
आप देखते हैं कि मैंने कुछ सुधार किए हैं:
- तैयार बयान का प्रयोग करें।
- इक्वलसिग्नोरकेस का प्रयोग न करें। "FooBar" का पासवर्ड "foobar" जैसा नहीं होना चाहिए।
- लीक होने से बचने के लिए समान दायरे में संसाधनों को धीरे-धीरे प्राप्त करें और बंद करें।
- इसे एक स्वतंत्र और पुन:प्रयोज्य गैर-स्थैतिक डीएओ पद्धति में रखें।
JDBC को उचित तरीके से उपयोग करने के बारे में अधिक जानने के लिए आपको यह मिल सकता है बुनियादी ट्यूटोरियल उपयोगी।