Dbconn.java
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);
}
}
}
甲骨文.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数据库。
在 Oracle 数据库中,select USERID from userdetails
不会返回任何行。通过将查询更改为 SELECT 1 FROM DUAL
来确认这一点,这将返回一行。然后,调查MySQL和Oracle数据库之间的区别。
看起来您的结果集中没有任何记录。由于 rs.next(( 在第一次调用时返回 false,这意味着它没有任何行。查看结果集文档-http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html
连接到数据库并验证表中是否有行。结果集应该独立于基础数据库正常工作。
尝试这样,您将知道结果集是否包含行
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());
}