⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 objectdb.java

📁 云网论坛CWBBS 源码,内容丰富,学习,参考,教学的好资料,具体见内说明,
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                                ku.setValue(rs.getString(ku.getOrders() + 1));
                            }
                        }
                        result.addElement(getObjectDb(keys));
                    }
                } while(rs.next());
            }
        } catch (SQLException e) {
            logger.error("list: " + e.getMessage());
        } finally {
            if (rs!=null) {
                try { rs.close(); } catch (Exception e) {}
                rs = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
        return result;
    }

    public Vector list(int start, int end) {
        return list(QUERY_LIST, start, end);
    }

    /**
     * 类似于Hiebernate中的list,从缓存中取出对象,但又有所区别,因为总记录条数也是取自缓存
     * 取得的记录在ResultSet中的索引为 start+1 ~ end+1,总共为end-start+1条
     * @param sql String
     * @param start int 从0开始算起
     * @param end int 当能够取满end-start+1条数据时,list的最后一条记录在ResultSet中的索引为end+1
     * @return Vector
     */
    public Vector list(String sql, int start, int end) {
        int total = 0;
        ResultSet rs = null;
        Vector result = new Vector();
        Connection conn = new Connection(connname);
        try {
            // 取得总记录条数
            total = getObjectCount(sql);
            conn.prepareStatement(sql);
            if (total != 0)
                // sets the limit of the maximum number of rows in a ResultSet object
                conn.setMaxRows(end + 1); // 尽量减少内存的使用
            rs = conn.executePreQuery();
            if (rs == null) {
                return result;
            } else {
                // defines the number of rows that will be read from the database when the ResultSet needs more rows
                int count = end - start + 1;
                rs.setFetchSize(count); // rs一次从POOL中所获取的记录数
                if (rs.absolute(start + 1) == false) {
                    return result;
                }

                int k = 0;
                do {
                    if (primaryKey.getType()==PrimaryKey.TYPE_INT)
                        result.addElement(getObjectDb(new Integer(rs.getInt(1))));
                    else if (primaryKey.getType()==PrimaryKey.TYPE_STRING)
                        result.addElement(getObjectDb(rs.getString(1)));
                    else if (primaryKey.getType()==PrimaryKey.TYPE_LONG)
                        result.addElement(getObjectDb(new Long(rs.getLong(1))));
                    else if (primaryKey.getType() == PrimaryKey.TYPE_COMPOUND) {
                        HashMap keys = ((PrimaryKey)primaryKey.clone()).getKeys();
                        Iterator ir = keys.keySet().iterator();
                        while (ir.hasNext()) {
                            String keyName = (String) ir.next();
                            KeyUnit ku = (KeyUnit) keys.get(keyName);
                            if (ku.getType() == primaryKey.TYPE_INT) {
                                ku.setValue(new Integer(rs.getInt(ku.getOrders() + 1)));
                            } else if (ku.getType() == primaryKey.TYPE_LONG ) {
                                ku.setValue(new Long(rs.getLong(ku.getOrders() + 1)));
                            } else {
                                ku.setValue(rs.getString(ku.getOrders() + 1));
                            }
                        }
                        result.addElement(getObjectDb(keys));
                    }
                    k++;
                    //if (k>=count)
                    //    break;
                } while(rs.next());
            }
        } catch (SQLException e) {
            logger.error("list: " + e.getMessage());
        } finally {
            if (rs!=null) {
                try { rs.close(); } catch (Exception e) {}
                rs = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
        return result;
    }

    public void setBlockSize(int blockSize) {
        this.blockSize = blockSize;
    }

    public String getTableName() {
        return tableName;
    }

    public ListResult listResult(String listsql, int curPage, int pageSize) throws
            ErrMsgException {
        int total = 0;
        ResultSet rs = null;
        Vector result = new Vector();

        ListResult lr = new ListResult();
        lr.setTotal(total);
        lr.setResult(result);

        Connection conn = new Connection(connname);
        try {
            // 取得总记录条数
            String countsql = SQLFilter.getCountSql(listsql);
            rs = conn.executeQuery(countsql);
            if (rs != null && rs.next()) {
                total = rs.getInt(1);
            }
            if (rs != null) {
                rs.close();
                rs = null;
            }

            // 防止受到攻击时,curPage被置为很大,或者很小
            int totalpages = (int) Math.ceil((double) total / pageSize);
            if (curPage > totalpages)
                curPage = totalpages;
            if (curPage <= 0)
                curPage = 1;

            if (total != 0)
                conn.setMaxRows(curPage * pageSize); // 尽量减少内存的使用

            rs = conn.executeQuery(listsql);
            if (rs == null) {
                return lr;
            } else {
                rs.setFetchSize(pageSize);
                int absoluteLocation = pageSize * (curPage - 1) + 1;
                if (rs.absolute(absoluteLocation) == false) {
                    return lr;
                }
                do {
                    if (primaryKey.getType()==PrimaryKey.TYPE_INT) {
                        result.addElement(getObjectDb(new Integer(rs.getInt(1))));
                    }
                    else if (primaryKey.getType()==PrimaryKey.TYPE_STRING)
                        result.addElement(getObjectDb(rs.getString(1)));
                    else if (primaryKey.getType()==PrimaryKey.TYPE_LONG)
                        result.addElement(getObjectDb(new Long(rs.getLong(1))));
                    else if (primaryKey.getType() == PrimaryKey.TYPE_COMPOUND) {
                        HashMap keys = ((PrimaryKey)primaryKey.clone()).getKeys();
                        Iterator ir = keys.keySet().iterator();
                        while (ir.hasNext()) {
                            String keyName = (String) ir.next();
                            KeyUnit ku = (KeyUnit) keys.get(keyName);
                            if (ku.getType() == primaryKey.TYPE_INT) {
                                ku.setValue(new Integer(rs.getInt(ku.getOrders() + 1)));
                            } else if (ku.getType() == primaryKey.TYPE_LONG) {
                                ku.setValue(new Long(rs.getLong(ku.getOrders() + 1)));
                            } else {
                                ku.setValue(rs.getString(ku.getOrders() + 1));
                            }
                        }
                        result.addElement(getObjectDb(keys));
                    }
                } while (rs.next());
            }
        } catch (SQLException e) {
            logger.error("listResult:" + e.getMessage());
            throw new ErrMsgException("数据库出错!");
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (Exception e) {}
                rs = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }

        lr.setResult(result);
        lr.setTotal(total);
        return lr;
    }
    private int blockSize = 100;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -