2014-09-13 40 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被保持一些目标函数这由rs.next()上面的Sysout语句显示。但问题是它没有输入while(rs.next()),我试图通过在该循环内打印一些名称,即使该Sysout不打印。我不知道我的代码有什么问题。它适用于Mysql,但它不适用于Oracle数据库。

+0

也许,你在不同的数据库会话中插入记录,并忘记'提交'它? – 2014-09-13 09:15:42

回答

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 2017-07-29 03:39:15