2016-05-24 12 views
0

Der Code hier ist mit falschen/unerwarteten Ergebnis zurück aus der Datenbank zurück. Ich kann das Problem nicht herausfinden. Hier ist der CodeJdbc liefert unexpected Ergebnis aus der Datenbank

import java.sql.*; 

class test1 
{ 
public static void main(String [] args) 
{ 
    try 
    { 
     Class.forName("oracle.jdbc.OracleDriver");  

     System.out.println("Driver loaded successfully"); 
    } 
    catch(ClassNotFoundException ex) 
    { 
     System.out.println("Could not load "+ex.getMessage()); 
     System.exit(0); 
    } 
    Connection con=null; 
    try 
    { 
     con=DriverManager.getConnection("jdbc:oracle:thin:@//Apoorv-PC:1521/orcl","scott","tiger"); 
     Statement st=con.createStatement(); 
     //st.setMaxRows(2); 
     //System.out.println(st.getMaxRows()); 
     ResultSet rs=st.executeQuery("Select park_space from park_available where area='M.P.Nagar'"); 

     while(rs.next()) 
     {  
      String p=rs.getString(1); 
      System.out.println(" "+p); 
     } 
     con.close(); 
     System.out.println("Connection closed!"); 
    } 
    catch(SQLException e) 
    { 
     System.out.println("Error in database"+e.getMessage()); 
    } 
    if(con!=null) 
    { 
     System.out.println("Successful!"); 
    } 
} 
} 

Mein park_available Tabelle in Oracle hat 5 Spalten: Bereich (varchar2), arr_date (varchar2), arr_time (varchar2), park_space (Anzahl), dept_time (varchar2).

Hier versuche ich auf die 4. Spalte "park_space" zuzugreifen, die den Wert "10" für jede Zeile hat, aber mein Code gibt 0 zurück, wenn er mit getInt() und null verwendet wird, wenn getString() verwendet wird.

Muss ich die Methode rs.next() verwenden, da das zurückgegebene Ergebnis gemäß meinem Code eine bestimmte Spalte einer bestimmten Zeile ist, also nur ein einzelner Wert?

+0

Können Sie das Skript "CREATE TABLE ..." bereitstellen? Ich würde gerne sehen, welche Typen diese Spalten haben. – Marin

+0

'getString (1)' ... gibt das nicht die zweite Spalte zurück, die in Ihrer RS ​​nicht existiert? – Zircon

+0

park_space ist der Zahl Datentyp rest all ist varchar2 Typ –

Antwort

0

Try this:

while(rs.next()) {  
    BigDecimal p=rs.getBigDecimal(1); 
    System.out.println(" "+p); 
} 

Ich denke, da Ihre Spalte eine Zahl ist, ist es für einen int einfach zu groß ist (siehe beispielsweise Oracle Hinweise dazu Daten taype Mappings: https://docs.oracle.com/cd/E11882_01/java.112/e16548/datacc.htm#JJDBC28367).

[Bearbeiten] So importieren "java.math.BigDecimal" müssen Sie eine Import-Anweisung wie folgt hinzu:

import java.sql.*; 
import java.math.BigDecimal; 

Zu Beginn Ihrer Java-Datei.

+0

Seine Generierung "kann Symbolfehler nicht finden" muss ich einige Paket importieren –

+0

BigDecimal befindet sich in java.math. Sie müssen ein "import java.math.BigDecimal;" hinzufügen an den Anfang Ihrer Java-Datei, direkt unter dem "import java.sql. *;" Linie. –

+0

Ok danke. Es funktioniert. Es funktioniert mit int auch nur ich war mit einer anderen Datenbank verbunden. Mein Fehler. –

-1
Dear The above your code is write no problem. 

I think May be problem in Your Connection URL Check that Once clearly... 

I was Executed code in Eclipse with localhost url i got output.No Errors 

See Code Bellow 

    import java.sql.*; 

class test1 
{ 
public static void main(String [] args) 
{ 
    try 
    { 
     Class.forName("oracle.jdbc.OracleDriver");  

     System.out.println("Driver loaded successfully"); 
    } 
    catch(ClassNotFoundException ex) 
    { 
     System.out.println("Could not load "+ex.getMessage()); 
     System.exit(0); 
    } 
    Connection con=null; 
    try 
    { 
     con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521","sample1","sample1"); 
     Statement st=con.createStatement(); 
     //st.setMaxRows(2); 
     //System.out.println(st.getMaxRows()); 
     ResultSet rs=st.executeQuery("Select park_space from park_available where area='M.P.Nagar'"); 

     while(rs.next()) 
     {  
      String p=rs.getString(1); 
      System.out.println(" "+p); 
     } 
     con.close(); 
     System.out.println("Connection closed!"); 
    } 
    catch(SQLException e) 
    { 
     System.out.println("Error in database"+e.getMessage()); 
    } 
    if(con!=null) 
    { 
     System.out.println("Successful!"); 
    } 
} 
} 
0

Sie nicht ein Problem mit Ihrem Fahrer zu überprüfen hat, ist hier ein komplettes Testprogramm:

public static void main(String[] args) throws Exception { 
    try (Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@...", "...", "...")) { 
     try { 
      try (Statement stmt = conn.createStatement()) { 
       stmt.executeUpdate("CREATE TABLE NUMBER_TEST (COL1 NUMBER)"); 
      } 
      try (PreparedStatement stmt = conn.prepareStatement("INSERT INTO NUMBER_TEST VALUES (?)")) { 
       Random rnd = new Random(); 
       for (int i = 0; i < 10; i++) { 
        stmt.setDouble(1, rnd.nextDouble() * 100.0); 
        stmt.executeUpdate(); 
       } 
      } 
      try (Statement stmt = conn.createStatement(); 
       ResultSet rs = stmt.executeQuery("SELECT COL1 FROM NUMBER_TEST")) { 
       while (rs.next()) { 
        System.out.println(rs.getInt(1) + " " + rs.getDouble(1) + " " + rs.getString(1)); 
       } 
      } 
     } finally { 
      try (Statement stmt = conn.createStatement()) { 
       stmt.executeUpdate("DROP TABLE NUMBER_TEST"); 
      } catch (Exception e) { 
       System.out.println("DROP failed: " + e); 
      } 
     } 
    } 
} 

SAMPLE OUTPUT (randomisierte Daten)

52 52.076813172962844 52.076813172962844 
7 7.747368165641289 7.747368165641289 
1 1.906398483271876 1.906398483271876 
95 95.4035973169611 95.4035973169611 
60 60.2402712112802 60.2402712112802 
72 72.70235593122439 72.70235593122439 
62 62.18918689642948 62.18918689642948 
16 16.87108578421145 16.87108578421145 
20 20.20241078545453 20.20241078545453 
0 0.32630814336951364 .32630814336951364 

Wie Sie können sehen, getInt, getDouble, und getString alle gute Daten zurückgeben.

Getestet am 11.2.0.4 JDBC-Treiber gegen 9.2-Datenbank.

0
while(rs.next()) 
     {  
      String p=rs.getInt(1); 
      System.out.println(" "+p); 
     } 

@Apoorv singhai Sie versuchen, String-Eingang zu nehmen, während Ihre Spalte Anzahl Datentyp besteht, verwenden Sie stattdessen diesen Code.

Verwandte Themen