SELECT * FROM (select t.data_kbn,t.date1,t.text1,t.text5,t.text6,t.setumei,
       RANK() OVER (partition by t.data_kbn, t.key2 ORDER BY t.date1 DESC) T 
  from c_jk_syorijyokyo t where t.data_kbn = 1) TT  where tt.T = 1 这句话如何用java实现如何在eclipse执行程序完毕  在执行过程中打出上面这句sql语句

解决方案 »

  1.   

    数据库是什么?按照oracle为例吧!
    你是说打印执行结果吗?import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException; 
    public class OracleOperating{ 
        private final static String DB_URL = "jdbc:oracle:thin:@你的ID:1521:数据库名称"; 
        private final static String DB_DRIVER = "oracle.jdbc.driver.OracleDriver"; 
        private final static String DB_USERNAME = "你的用户名"; 
        private final static String DB_PASSWORD = "你的密码"; 
        public Connection getConnection(){ 
            Connection conn = null; 
            try{ 
                Class.forName(DB_DRIVER); 
                conn = DriverManager.getConnection(DB_URL,DB_USERNAME,DB_PASSWORD); 
            }catch(Exception ex){ 
                ex.printStackTrace(); 
            } 
            return conn; 
        } 
         
        public void closeConnection(Connection conn){ 
            try{ 
                if(conn!=null){ 
                    if(!conn.isClosed()){ 
                        conn.close(); 
                    } 
                } 
            }catch(Exception ex){ 
                ex.printStackTrace(); 
            } 
        } 
        
        public void select(String param) throws SQLException{
         Connection conn=getConnection();
         String sql="SELECT * FROM (select t.data_kbn,t.date1,t.text1,t.text5,t.text6,t.setumei, " +
         "RANK() OVER (partition by t.data_kbn, t.key2 ORDER BY t.date1 DESC) T " +
         "from c_jk_syorijyokyo t where t.data_kbn = 1) TT  where tt.T = 1;";
         PreparedStatement pstat=conn.prepareStatement(sql);
         ResultSet rs=pstat.executeQuery();
         while(rs.next()){
         System.out.println(rs.getString(1));
         System.out.println(rs.getString(2));
         System.out.println(rs.getString(3));
         .......
         }
         rs.close();
         closeConnection(conn);
        }
         
    }
      

  2.   

    不是这种的……  虽然数据库也是oracle 
    可是框架不一样  
    我需要的是    public Long getCountbySc(Jk062Form jk062Form) {
            return select().where(searchConditon(jk062Form)).getCount();
        }
    这样的  其中searchConditon  为条件  可以写成一个方法进行调用……  主要是rank()over这部分没有找到相对的关键字
      

  3.   

    建议你去看看ORACLER分析函数源代码
      

  4.   


    我理解错误你的意思
    你使用的是JDBC,
    可以直接使用rank()over
    反正他是传到数据库执行的
    与JAVA没关系吧
      

  5.   

    虽然是传到数据库中的  可是 也要有对应的方法进行匹配啊 
    我需要检索的时候执行这句话
    但不能像2楼那样做 框架不支持
    所以一定要用java语言来实现这句话  之后才能用jdbc来实现  
    给你个searchCondition里的例子
     private SimpleWhere searchConditon(Jk062Form jk062Form) {
            return new SimpleWhere().excludesWhitespace()
                    .contains("setumei",jk062Form.setumei)
                    .eq("text1", jk062Form.text1)
                    .eq("date1", jk062Form.date1);
    }
    这样的……
      

  6.   

    跟调用其他sql语句一样
    没啥区别的
      

  7.   


    oracle 里面的 rank 和 over 是分组统计的函数。java 里面是这样实现的,外面一个大循环所有数据。里面一个循环取根据条件进行分区的,外面一个list,里面根据条件分区,会有n个list,保存到 map里面,key就是条件,value就是统计循环的list.
      

  8.   


    你的这个和HIBERNATE的Criteria差不多,
    你如果真要在JAVA里实现这个分析函数,
    你只能去看看人家ORACLE那帮人是怎么写的了不管什么框架,他总能回到最原始的JDBC吧
    在不行
    写存储过程
      

  9.   

    public int deteteEmployeeById(String employeeId) {
    int flag = -1;
    String sql = "delete employeeManager where employee_id=" + employeeId;
    System.out.println(sql); Connection con = DBCon.getConnection(); try {
    Statement stm = con.createStatement();
    flag = stm.executeUpdate(sql);
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } finally {
    DBCon.closeConnection(con);
    }
    return flag;
    }这样?