我是STRUTS和JDBC的新手,我的应用程序尝试连接到一个有3个表的简单数据库,现在所有人正在尝试查询只存储"第一个,姓氏的1个表和Id字段"
System.out.println("-------- Oracle JDBC Connection Testing ------");
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
System.out.println("Where is your Oracle JDBC Driver?");
e.printStackTrace();
return null;
}
System.out.println("Oracle JDBC Driver Registered!");
try {
connection =
DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","david","changeit");
} catch (SQLException e) {
System.out.println("Connection Failed! Check output console");
e.printStackTrace();
return null;
}
if (connection != null) {
System.out.println("You made it, take control your database now!");
} else {
System.out.println("Failed to make connection!");
}
如果匹配发生,我想获得1列的结果:
String sql = "SELECT S_ID FROM Students WHERE firstname=? AND lastname=?";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1, firstname);
ps.setString(2, lastname);
rs = ps.executeQuery();
while (rs.next()) {
studentid = rs.getString(1);
ret = SUCCESS;
}
} catch (Exception e) { ...
据我所知,连接已经完成, SQL查询
Select s_id from Students where firstname='first' and lastname='last';
在SQL Dev上运行时。工作并给我一个结果。
我没有真正得到一个堆栈跟踪,代码只是在' while(rs.next()){...'之前跳过。直接进入finally块
} catch (Exception e) {
e.printStackTrace();
ret = ERROR;
} finally {
if (connection != null) {
try {
connection.close();
} catch (Exception e) {
}
}
}
答案 0 :(得分:1)
我不确定Oracle驱动程序的工作原理。但是下面的声明是我在Oracle网站上看到的。您是否获得非空结果集? 由于您没有在.next()上获得nullpointerexception,我想知道Oracle驱动程序是否返回空ResultSet,这可能会导致此问题。
http://docs.oracle.com/cd/B28359_01/java.111/b31224/getsta.htm
如果是标准JDBC驱动程序,则执行SQL字符串 不返回ResultSet对象,然后是executeQuery方法 抛出SQLException异常。如果是Oracle JDBC驱动程序,则 即使是executeQuery方法也不会抛出SQLException异常 正在执行的SQL字符串不返回ResultSet对象。
答案 1 :(得分:1)
就像我说的那样,我很擅长使用它。 问题是我的架构没有为其分配CONNECT角色。
解决方案以'SYSTEM'身份登录并将角色授予我的架构
grant connect to MY_SCHEMA;