2014-09-13 1 views
0

Dbconn.javars.next() цикл не функционирует в данных базы данных Oracle извлечения

import com.OracleCon; 
public class Dbconn{ 
    public static void main(String[] args){ 
     try{ 
      OracleCon oraclecon = new OracleCon(); 
      oraclecon.callmethod(); 
     }catch(Exception e){ 
      System.out.println("Ex e"+e); 
     } 
    } 
} 

OracleCon.java

package com; 

import java.lang.NullPointerException; 
import java.sql.*; 

public class OracleCon{ 

    String JDBC_DRIVER="oracle.jdbc.driver.OracleDriver"; 
    String db_URL="jdbc:oracle:thin:@localhost:1521:ORCL"; 
    String username="SYSTEM"; 
    String password="root"; 
    Connection conn = null; 

    public OracleCon() { 
     try{ 
      Class.forName("oracle.jdbc.driver.OracleDriver"); 
      conn=DriverManager.getConnection(db_URL,username,password); 
      if(conn!=null){ 
       System.out.println("Database connected"); 
      }else{ 
       System.out.println("Problem in connecting datbase"); 
      } 
     }catch(SQLException se){ 
      System.out.println("Error occured " + se.toString()); 

     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 

    public void callmethod() throws SQLException { 

     PreparedStatement statement = null; 
     conn = DriverManager.getConnection(db_URL,username,password); 
     try{ 
      Statement stmt = null; 
      stmt = conn.createStatement(); 
      String sql = "select USERID from userdetails"; 
      System.out.println(sql); 
      ResultSet rs = stmt.executeQuery(sql); 
      System.out.println("Result set finished "+rs); 
      while(rs.next()){ 
       System.out.println(rs.getString("USERID")); 
      } 
      rs.close(); 
     }catch(SQLException se){ 
      System.out.println("SQL ex"+se); 
     }catch(Exception e){ 
      System.out.println("Ex e"+e); 
     } 
     finally { 
      closeConnection(); 
     } 
    } 

    public void closeConnection(){ 
     try{ 
      if(conn!=null){ 
       conn.close(); 
      } 
     }catch(SQLException se){ 
      se.printStackTrace(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
} 

База данных успешно подключен и RS держит некоторый объект что показано выражением Sysout выше rs.next(). Но проблема в том, что он не входит в while (rs.next()), я попробовал это, напечатав какое-то имя внутри этого цикла, даже если Sysout не печатает. Я не знаю, что не так с моим кодом. Он работает для Mysql, но он не работает для базы данных оракула.

+0

Возможно, вы вставили записи в другую сессию БД и забыли «COMMIT»? –

ответ

0

В вашей базе данных Oracle select USERID from userdetails не возвращает никаких строк. Подтвердите это, изменив запрос на SELECT 1 FROM DUAL, который вернет одну строку. Затем исследуйте, какая разница между вашими базами данных MySQL и Oracle.

0

Похоже, что у вашего результирующего набора нет записи. Поскольку rs.next() возвращает false при первом вызове, это означает, что в нем нет никаких строк. Посмотрите документацию ResultSet. http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html

Подключитесь к своей базе данных и проверьте, есть ли в таблице строки. ResultSet должен отлично работать независимо от базовой базы данных.

0

Попробуйте, как вы узнаете, Resultset ли вы содержит строки или не

if (!resultSet.isBeforeFirst()) { 
    //this returns false if the cursor is not before the first record or if there are 
    // no rows in the ResultSet. 
System.out.println("No data"); 
} 
else{ 
do { 
    //your logic after fetching the data from the resultset 
} while (resultSet.next()); 
} 
-1
try (PrintWriter out = response.getWriter()) { 

     Connection con = ConnectionDB.connectDB(); 

     String inputalcno = request.getParameter("alcno"); 
     Double requestamount = Double.parseDouble(request.getParameter("amount")); 
     String inputtransactionp = request.getParameter("transpassword"); 

     String userid = null; 
     String password = null; 

     HttpSession httpsession = request.getSession(false); 
     if (httpsession != null) 
     { 
      userid = httpsession.getAttribute("uName").toString(); 
      password = httpsession.getAttribute("upassword").toString(); 
     } 

     String sql = "SELECT amount, accountno FROM customers WHERE userid = ? and password = ? and transactionp=?"; 
     PreparedStatement statement = con.prepareStatement(sql); 
     statement.setString(1, userid); 
     statement.setString(2, password); 
     statement.setString(3, inputtransactionp); 

     ResultSet rs = statement.executeQuery(); 

     while (rs.next()) { 

      Double actualamount = rs.getDouble("amount"); 
      String accountno = rs.getString("accountno"); 

      String sql3 = "SELECT amount FROM customers WHERE accountno = ?"; 
      PreparedStatement statement3 = con.prepareStatement(sql3); 
      statement.setString(1, inputalcno); 
      ResultSet rs3 = statement3.executeQuery(); 
      while (rs3.next()) { 

       Double anotheralcbal = rs3.getDouble("amount"); 

       if (actualamount > requestamount) { 

        String sql1 = "UPDATE customers SET amount=? where accountno=? "; 
        PreparedStatement statement1 = con.prepareStatement(sql1); 
        Double balance = actualamount - requestamount; 
        statement1.setDouble(1, balance); 
        statement1.setString(2, accountno); 
        statement1.executeQuery(); 

        String sql2 = "UPDATE customers SET amount=? where accountno=? "; 
        PreparedStatement statement2 = con.prepareStatement(sql2); 
        Double newbalance = anotheralcbal + requestamount; 
        statement2.setDouble(1, newbalance); 
        statement2.setString(2, inputalcno); 
        statement2.executeQuery(); 

        out.write("<h6><i>Transfer successful.</i></h6>"); 
        request.getRequestDispatcher("/transfer.html").include(request, response); 

       } else { 

        out.write("<h6><i>Transfer Failed. </br>Invalid Input.</br> Balance is LOW </i></h6>"); 
        request.getRequestDispatcher("/transfer.html").include(request, response); 
       } 

      } 
      String sql1 = "UPDATE customers SET amount=? where accountno=? "; 
      PreparedStatement statement1 = con.prepareStatement(sql1); 
      Double balance = actualamount - requestamount; 
      statement1.setDouble(1, balance); 
      statement1.setString(2, accountno); 
      statement1.executeQuery(); 

      out.write("<h6><i>Transfer successful.</i></h6>"); 
      request.getRequestDispatcher("/transfer.html").include(request, response); 

     } 
     out.write("<h6><i>Transfer Failed. </br>Invalid Input </i></h6>"); 
     request.getRequestDispatcher("/transfer.html").include(request, response); 

    } 

Почему я не могу выполнить некоторое время (rs3.next()) внутри время (rs.next ())?

+0

Вы должны создать новый вопрос вместо того, чтобы отправлять вопрос в качестве ответа – Maxime