Я работаю над проектом для универа (это должно произойти через 14 часов), и я нахожусь в тупике. Это веб-магазин, работающий в eclipse на Apache Tomcat и Derby.
У меня есть подготовленный оператор, который проверяет имя пользователя и хэш пароля, независимо от того, что я пробую, этот оператор возвращает 0 строк. Тот же sql запускается в блокноте sql и возвращает ожидаемое.
Я использовал отладчик для проверки подготовленного объекта оператора, и запрос выглядит нормально. Символы? В тексте все еще на месте, а не заполнены переменными, но это кажется нормальным. Я также пытался запустить точно такой же рукописный sql из консоли, но безуспешно.
Запрос, который я запускаю в консоли sql:
SELECT * FROM username WHERE username='user@system.com' AND passwordhash='passwordhash'
Подготовленные отчеты выглядят так.
PreparedStatement pstmt = db.prepareStatement("SELECT * FROM reallynice.username " +
"WHERE emailaddress=?" +
" AND passwordhash=?");
pstmt.setString(1,username);
pstmt.setString(2, username + ":" + passwordLogin);
Я нахожусь в точке, где я перепробовал все, и у меня закончились поиски. Я знаю, что это уникальный проект, и стандартный ответ - дать людям где-нибудь посмотреть. На данный момент мне нужно кормить ложкой путь вниз.
РЕДАКТИРОВАТЬ Вот еще кое-что, я попытался выполнить известный рабочий запрос в этом конвейере, и он также не может вернуть строки.
public static User getUser(String username, String passwordHash) {
DBBean db = new DBBean();
System.out.println("Logging in for username " + username + " and password " + passwordHash);
try {
ResultSet rs;
PreparedStatement pstmt = db.prepareStatement("SELECT * FROM reallynice.username " +
"WHERE emailaddress=?" +
" AND passwordhash=?");
pstmt.setString(1,username);
pstmt.setString(2,passwordHash);
//PreparedStatement pstmt = db.prepareStatement("SELECT * FROM reallynice.product");
//PreparedStatement pstmt = db.prepareStatement("SELECT * FROM reallynice.username WHERE emailaddress='user@me.com' AND passwordhash='megahashstring'");
rs = pstmt.executeQuery();
System.out.println("Rows returned\t" + rs.getRow());
if(rs.getRow() < 1)
return null;
int id = rs.getInt("uid");
String name = rs.getString("name");
String emailaddress = rs.getString("emailaddress");
String password = rs.getString("passwordhash");
boolean isAdmin = false;
pstmt = db.prepareStatement("SELECT * FROM reallnice.admin WHERE uid= ?");
pstmt.setInt(1, id);
rs = pstmt.executeQuery();
if(rs.getMetaData().getColumnCount() > 0)
isAdmin = true;
return new User(id,isAdmin,name,emailaddress,password);
} catch(Exception ex) {
System.out.println(ex);
}
return null;
}
Я также включил другие запросы, которые я пробовал для этого.