2016-06-15 5 views
-2

Я установил соединение с базой данных Oracle 10g Xe через следующий код.Моя программа не входит в часть «если», и она всегда идет в «else».

Context ctx=new InitialContext(); 
DataSource ds=(DataSource)ctx.lookup("java:OracleDS"); 
Connection con=ds.getConnection(); 

String mob=request.getParameter("mob_no"); 
String pass=request.getParameter("pass"); 
Statement stmt=con.createStatement(); 

//checking login details 
String sql="select * from user1 where mob_no='"+mob+"' and password='"+pass+"'"; 
ResultSet rs=stmt.executeQuery(sql); 
String sql2="select * from postpaid where mob_no='"+mob+"'"; 
ResultSet rs2=stmt.executeQuery(sql2); 

if(rs.isBeforeFirst()) 
{ 
    while(rs2.next()) 
    { 
     if(rs2.getInt(2)!=0) 
     { 
      out.println("You have total due of "+rs2.getInt(2)); 
      out.println("<a href=\"paybill.jsp\">Pay Bill</a>"); 
     } 
     else { 
      out.println("You have no dues!!!!!"); 
     } 
    } 
} 
else 
{ 
    out.println("Invalid login details.....<a href=\"#\">Back to home page</a>"); 
} 

Моя программа всегда показывает результат «Неверные логин Подробности»

+0

Я всегда получаю вывод «Недействительные данные для входа». –

+1

вы должны исправить форматирование скобок –

+0

убедитесь, что ваш первый запрос возвращает некоторый результат. – Sanjeev

ответ

0

Документация isBeforeFirst() говорит:

«Возвращает true, если курсор находится перед первой строкой; false если курсор находится в любой другой позиции или в результирующем наборе нет строк. "

В этом контексте false, скорее всего, означает последний; т. е. ваш результирующий набор пуст, потому что никакие строки не соответствуют предоставленному пользователю и паролю в первом запросе.

UPDATE

Мой ответ в основном то же самое. Финальная ветвь else берется из-за того, что первый запрос не соответствует строкам.

Почему?

Я мог догадаться ... но вместо этого предлагаю вам распечатать SQL-запрос, который вы выполняете, чтобы убедиться, что статуты - это то, что они должны быть.

Другое дело, следует отметить, что построение запросов, как это:

String sql="select * from user1 where mob_no='"+mob+"' and password='"+pass+"'"; 

является опасным. Предположим, что кто-то послал запрос с mob_no аргумента, значение которого было что-то вроде этого:

"foo' ; drop table user1 ;" 

Вы должны использовать PreparedStatement с SQL, как это:

String sql = "select * from user1 where mob_no = ? and password = ?"; 

и использовать PreparedStatement.setString(...) для добавления значений параметров.

+0

Я сделал некоторую коррекцию в коде .... на самом деле я новичок в stackoverflow, поэтому по ошибке я отправил неправильный квест ... я не знаю, что это за сайт –