我尽量剪了一下,如下:
package app;
import java.sql.*;
import java.io.*;
import java.util.*;
import java.net.*;
public class Query{
ResultSet rs;
public ResultSet Querynum(String stationFlag,String stationType,String dataName,String fromTime,String toTime,int pageFlag,String stationId,String stationName,String deviceName){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
ResultSet rs2 = null;
int pageSize=20;
int result = 0 ;
int pageNum=0 ;
String query ="";
try {
String url = "jdbc:oracle:thin:@192.168.0.240:1521:bakkgl";
query = "select stringvalue,time from tb_data_history where id=(select p.id from tb_param p where p.stationid='"+stationType+"' and p.dataname='"+dataName+"') and time<to_date('"+toTime+"','yyyy/mm/dd hh24:mi:ss') and time>to_date('"+fromTime+"','yyyy/mm/dd hh24:mi:ss') " ;
String driver="oracle.jdbc.driver.OracleDriver";
if (url ==null) throw new IllegalArgumentException("No database specified");
conn=DriverManager.getConnection(url,"web","web");
stmt=conn.createStatement();
rs = stmt.executeQuery(query1);
}catch(Exception e){
e.printStackTrace();
}
return rs;
}
public static class Test{
public static void main(String[] args){
Connection conn=null;
Statement stmt = null;
ResultSet rs = null;
// ResultSet rs1 = null;
int result=0;
try{
String stationFlag="stationid";
String stationType="705";
String dataName="交流电频率";
String fromTime="20040914010000";
String toTime="20041020010000";
int pageFlag=1;
String stationId=null;
String stationName=null;
String deviceName=null;
String tableName="tb_user";
String userName="lpz1";
String passWd="12345";
String driver="oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@192.168.0.240:1521:bakkgl";
String query = "select * from tb_device";
if (url ==null) throw new IllegalArgumentException("No database specified");
if (driver != null) {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
System.out.println("Cannot found class : " + driver);
e.printStackTrace();
}
}
Query a=new Query();
rs=a.Querynum(stationFlag,stationType,dataName,fromTime,toTime,pageFlag,stationId,stationName,deviceName);
while (rs.next ()) {
System.out.println (rs.getString (1) + " " +rs.getString (2));
}
}
catch (Exception e){
System.err.println(e);
if (e instanceof SQLException)
System.err.println("SQL State:"+((SQLException)e).getSQLState());
}
finally{
try{
conn.close();
rs.close();
stmt.close();
}
catch (Exception e){
}
}
}
}
} 就是这样了,怎末我在类Test调用类Query的方法Querynum返回值是空的,不应该呀,我在方法Querynum里面打印rs这个值都是没问题的,这是咋回事?
package app;
import java.sql.*;
import java.io.*;
import java.util.*;
import java.net.*;
public class Query{
ResultSet rs;
public ResultSet Querynum(String stationFlag,String stationType,String dataName,String fromTime,String toTime,int pageFlag,String stationId,String stationName,String deviceName){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
ResultSet rs2 = null;
int pageSize=20;
int result = 0 ;
int pageNum=0 ;
String query ="";
try {
String url = "jdbc:oracle:thin:@192.168.0.240:1521:bakkgl";
query = "select stringvalue,time from tb_data_history where id=(select p.id from tb_param p where p.stationid='"+stationType+"' and p.dataname='"+dataName+"') and time<to_date('"+toTime+"','yyyy/mm/dd hh24:mi:ss') and time>to_date('"+fromTime+"','yyyy/mm/dd hh24:mi:ss') " ;
String driver="oracle.jdbc.driver.OracleDriver";
if (url ==null) throw new IllegalArgumentException("No database specified");
conn=DriverManager.getConnection(url,"web","web");
stmt=conn.createStatement();
rs = stmt.executeQuery(query1);
}catch(Exception e){
e.printStackTrace();
}
return rs;
}
public static class Test{
public static void main(String[] args){
Connection conn=null;
Statement stmt = null;
ResultSet rs = null;
// ResultSet rs1 = null;
int result=0;
try{
String stationFlag="stationid";
String stationType="705";
String dataName="交流电频率";
String fromTime="20040914010000";
String toTime="20041020010000";
int pageFlag=1;
String stationId=null;
String stationName=null;
String deviceName=null;
String tableName="tb_user";
String userName="lpz1";
String passWd="12345";
String driver="oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@192.168.0.240:1521:bakkgl";
String query = "select * from tb_device";
if (url ==null) throw new IllegalArgumentException("No database specified");
if (driver != null) {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
System.out.println("Cannot found class : " + driver);
e.printStackTrace();
}
}
Query a=new Query();
rs=a.Querynum(stationFlag,stationType,dataName,fromTime,toTime,pageFlag,stationId,stationName,deviceName);
while (rs.next ()) {
System.out.println (rs.getString (1) + " " +rs.getString (2));
}
}
catch (Exception e){
System.err.println(e);
if (e instanceof SQLException)
System.err.println("SQL State:"+((SQLException)e).getSQLState());
}
finally{
try{
conn.close();
rs.close();
stmt.close();
}
catch (Exception e){
}
}
}
}
} 就是这样了,怎末我在类Test调用类Query的方法Querynum返回值是空的,不应该呀,我在方法Querynum里面打印rs这个值都是没问题的,这是咋回事?
public ResultSet Querynum(String stationFlag,String stationType,String dataName,String fromTime,String toTime,int pageFlag,String stationId,String stationName,String deviceName){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
ResultSet rs2 = null;
int pageSize=20;
int result = 0 ;
int pageNum=0 ;
String query ="";
String query1="";
String query2="";
try {
String url = "jdbc:oracle:thin:@192.168.0.240:1521:bakkgl";
query1 = "select stringvalue,time from tb_data_history where id=(select p.id from tb_param p where p.stationid='"+stationType+"' and p.dataname='"+dataName+"') and time<to_date('"+toTime+"','yyyy/mm/dd hh24:mi:ss') and time>to_date('"+fromTime+"','yyyy/mm/dd hh24:mi:ss') " ;
query2 = "select s.stationid,s.stationname,d.devicename from tb_station s,tb_device d where s.stationid='"+stationType+"' and d.stationid='"+stationType+"' and d.deviceid=(select a.deviceid from tb_data a where a.id=(select p.id from tb_param p where p.stationid='"+stationType+"' and p.dataname='"+dataName+"'))";
String driver="oracle.jdbc.driver.OracleDriver";
if (url ==null) throw new IllegalArgumentException("No database specified");
conn=DriverManager.getConnection(url,"web","web");
stmt=conn.createStatement();
rs = stmt.executeQuery(query1);
rs2 = stmt.executeQuery(query2);
try{
if(rs2.next()){
stationId=rs2.getString (1);
stationName=rs2.getString (2);
deviceName=rs2.getString (3);
}
}catch(Exception e){
e.printStackTrace();
}
}catch(Exception e){
e.printStackTrace();
}
return rs;
}
我改为:
public ResultSet Querynum(String stationFlag,String stationType,String dataName,String fromTime,String toTime,int pageFlag,String stationId,String stationName,String deviceName){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
ResultSet rs2 = null;
int pageSize=20;
int result = 0 ;
int pageNum=0 ;
String query ="";
String query1="";
String query2="";
try {
String url = "jdbc:oracle:thin:@192.168.0.240:1521:bakkgl";
query1 = "select stringvalue,time from tb_data_history where id=(select p.id from tb_param p where p.stationid='"+stationType+"' and p.dataname='"+dataName+"') and time<to_date('"+toTime+"','yyyy/mm/dd hh24:mi:ss') and time>to_date('"+fromTime+"','yyyy/mm/dd hh24:mi:ss') " ;
query2 = "select s.stationid,s.stationname,d.devicename from tb_station s,tb_device d where s.stationid='"+stationType+"' and d.stationid='"+stationType+"' and d.deviceid=(select a.deviceid from tb_data a where a.id=(select p.id from tb_param p where p.stationid='"+stationType+"' and p.dataname='"+dataName+"'))";
String driver="oracle.jdbc.driver.OracleDriver";
if (url ==null) throw new IllegalArgumentException("No database specified");
conn=DriverManager.getConnection(url,"web","web");
stmt=conn.createStatement();
rs = stmt.executeQuery(query1);
/**rs2 = stmt.executeQuery(query2);
try{
if(rs2.next()){
stationId=rs2.getString (1);
stationName=rs2.getString (2);
deviceName=rs2.getString (3);
}
}catch(Exception e){
e.printStackTrace();
}*/
}catch(Exception e){
e.printStackTrace();
}
return rs;
}
这样就可以返回rs了,为啥呢,一个链接不能进行两次查询吗?
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
int pageSize=20;
int result = 0 ;
int pageNum=0 ;
String query ="";
try {
String url = "jdbc:oracle:thin:@192.168.0.240:1521:bakkgl";
query = "select s.stationid,s.stationname,d.devicename from tb_station s,tb_device d where s.stationid='"+stationType+"' and d.stationid='"+stationType+"' and d.deviceid=(select a.deviceid from tb_data a where a.id=(select p.id from tb_param p where p.stationid='"+stationType+"' and p.dataname='"+dataName+"'))";
if (url ==null) throw new IllegalArgumentException("No database specified");
System.out.print(query + "\n");
conn=DriverManager.getConnection(url,"web","web");
stmt=conn.createStatement();
rs = stmt.executeQuery(query);
if(rs.next()){
System.out.println (rs.getString (1) + " " +rs.getString (2)+" "+rs.getString (3));
stationId=rs.getString (1);
stationName=rs.getString (2);
deviceName=rs.getString (3);
}
System.out.println(stationId);
System.out.println(stationName);
System.out.println(deviceName);
}catch(Exception e){
e.printStackTrace();
}finally {
try{
rs.close();
stmt.close();
conn.close();
}
catch (SQLException e){ }
}
}
我把这个方法在main里面运行,目的就是给stationId, stationName, deviceName付值,结果还是stationId, stationName, deviceNamenull还是为null呀,在方法里面这三个值都已经付值成功了,
用main调用怎末就不行了???/
rs = stmt.executeQuery(query1);
rs2 = stmt.executeQuery(query2);
if(rs2.next()){ stationId=rs2.getString (1);
stationName=rs2.getString (2);
deviceName=rs2.getString (3);
}
这样就不行,我把rs2屏蔽了,重新用一个方法实现,rs就可以返回了,如下:
rs = stmt.executeQuery(query1);
/**rs2 = stmt.executeQuery(query2);
if(rs2.next()){ stationId=rs2.getString (1);
stationName=rs2.getString (2);
deviceName=rs2.getString (3);
}*/
这是为啥,我现在没搞明白????2. 我先想通过执行一个方法,返回三个值,方法如下:
public void QueryName(String stationFlag,String stationType,String dataName,int pageFlag,String stationId,String stationName,String deviceName){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
int pageSize=20;
int result = 0 ;
int pageNum=0 ;
String query ="";
try {
String url = "jdbc:oracle:thin:@192.168.0.240:1521:bakkgl";
query = "select s.stationid,s.stationname,d.devicename from tb_station s,tb_device d where s.stationid='"+stationType+"' and d.stationid='"+stationType+"' and d.deviceid=(select a.deviceid from tb_data a where a.id=(select p.id from tb_param p where p.stationid='"+stationType+"' and p.dataname='"+dataName+"'))";
if (url ==null) throw new IllegalArgumentException("No database specified");
System.out.print(query + "\n");
conn=DriverManager.getConnection(url,"web","web");
stmt=conn.createStatement();
rs = stmt.executeQuery(query);
if(rs.next()){
System.out.println (rs.getString (1) + " " +rs.getString (2)+" "+rs.getString (3));
stationId=rs.getString (1);
stationName=rs.getString (2);
deviceName=rs.getString (3);
}
System.out.println(stationId);
System.out.println(stationName);
System.out.println(deviceName);
}catch(Exception e){
e.printStackTrace();
}finally {
try{
rs.close();
stmt.close();
conn.close();
}
catch (SQLException e){ }
}
}
我把这个方法在main里面运行,目的就是给stationId, stationName, deviceName付值,结果是stationId, stationName, deviceNamenull还是为null呀,在方法里面打印这三个值都已经付值成功了,用main调用怎末就不行了???难道java里面必须用return <返回值>的形式吗???