我尽量剪了一下,如下:
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这个值都是没问题的,这是咋回事?

解决方案 »

  1.   

    现在可以返回值了,本来我的代码如下:
    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了,为啥呢,一个链接不能进行两次查询吗?
      

  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调用怎末就不行了???/
      

  3.   

    你想一次查询返回多个查询结果不一定要返回ResultSet呀,可以返回容器呀,比如Vector,ArrayList,Iterator然后在接受方在进行处理
      

  4.   

    1. 我现在ResultSet返回空值的问题已经解决了,就是我在方法里面这样:
    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  <返回值>的形式吗???