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

📄 qobjectdb.java

📁 云网论坛CWBBS 源码,内容丰富,学习,参考,教学的好资料,具体见内说明,
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        boolean re = false;
        re = jt.executeUpdate(table.getQuerySave(), params) == 1;
        // 刷新缓存
        refreshSave(primaryKey);

        return re;
    }

    public boolean save() throws ResKeyException {
        return save(new JdbcTemplate(new Connection(table.getConnName())));
    }

    public synchronized boolean save(ParamChecker paramChecker) throws ResKeyException,
            ErrMsgException {
        String[] fieldsForSave = getFieldsFromQuerySave();
        if (fieldsForSave == null)
            throw new IllegalArgumentException("fieldsForSave is null.");
        int len = fieldsForSave.length;
        ResultRecord resultRecord = getResultRecord();
        for (int i = 0; i < len; i++) {
            resultRecord.set(fieldsForSave[i],
                             paramChecker.getValue(fieldsForSave[i]));
        }
        return save();
    }

    /**
     * 根据resultRecord及primaryKey自动更新
     * @param jt JdbcTemplate
     * @return boolean
     */
    public boolean save(JdbcTemplate jt) throws ResKeyException {
        String[] fieldsForSave = getFieldsFromQuerySave();
        if (fieldsForSave == null)
            return false;
        int len = fieldsForSave.length;
        Object[] paramsPk = primaryKey.toObjectArray();
        // System.out.println(getClass() + " save " +  primaryKey);

        Object[] params = new Object[fieldsForSave.length + paramsPk.length];
        for (int i = 0; i < len; i++) {
            params[i] = resultRecord.get(fieldsForSave[i]);
        }
        len = params.length;
        int k = 0;
        for (int i = fieldsForSave.length; i < len; i++) {
            params[i] = paramsPk[k];
            k++;
        }
        boolean re = false;
        try {
            re = save(jt, params);
        } catch (SQLException e) {
            LogUtil.getLog(getClass()).error("save:" + e.getMessage());
            throw new ResKeyException(SkinUtil.ERR_DB);
        }
        return re;
    }

    public String[] getFieldsFromQueryCreate() {
        String queryCreate = table.getQueryCreate();
        int p = queryCreate.indexOf("(");
        int q = queryCreate.indexOf(")");
        if (p == -1)
            return null;
        if (q == -1)
            return null;

        String str = queryCreate.substring(p + 1, q);
        // 替换掉空格
        str = str.replaceAll(" ", "");
        String[] ary = StrUtil.split(str, ",");
        return ary;
    }

    /**
     * 解析querySave,获取其中更新的字段名称及其顺序
     * @return String[]
     */
    public String[] getFieldsFromQuerySave() {
        String querySave = table.getQuerySave();
        int p = querySave.indexOf("set");
        if (p == -1)
            return null;
        p += 4;

        int q = querySave.indexOf("where");

        // update *** set a=?,b=?,... where f=? and g=?"
        //                ^          ^
        //                取得这一段的字符串
        String str = querySave.substring(p, q - 1);
        // 替换掉空格
        str = str.replaceAll(" ", "");
        // 替换掉=?
        str = str.replaceAll("=\\?", "");
        String[] ary = StrUtil.split(str, ",");
        return ary;
    }

    /**
     * 2007.1.7 添加,用于OA中sms_receive_record的处理(改为使用list(JdbcTemplate jt, String sql, Object[] params))
     * @param sql String
     * @param params Object[]
     * @param curPage int
     * @param pageSize int
     * @return ListResult
     * @throws ResKeyException
     */
    public ListResult listResult(String connName, String sql, Object[] params, int curPage,
                                 int pageSize) throws
            ResKeyException {
        int total = 0;
        Vector result = new Vector();

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

        JdbcTemplate jt = new JdbcTemplate(new Connection(connName));
        try {
            // 取得总记录条数
            String countsql = SQLFilter.getCountSql(sql);
            ResultIterator ri = jt.executeQuery(countsql, params);
            if (ri.hasNext()) {
                ResultRecord rr = (ResultRecord) ri.next();
                total = rr.getInt(1);
            }

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

            jt = new JdbcTemplate(new Connection(connName));

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

            ri = jt.executeQuery(sql, params, curPage, pageSize);
            while (ri.hasNext()) {
                ResultRecord rr = (ResultRecord) ri.next();
                if (primaryKey.getType() == PrimaryKey.TYPE_INT) {
                    result.addElement(getQObjectDb(new Integer(rr.getInt(1))));
                } else if (primaryKey.getType() == PrimaryKey.TYPE_STRING)
                    result.addElement(getQObjectDb(rr.getString(1)));
                else if (primaryKey.getType() == PrimaryKey.TYPE_LONG)
                    result.addElement(getQObjectDb(new Long(rr.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(rr.getInt(ku.getOrders() + 1)));
                        } else if (ku.getType() == primaryKey.TYPE_LONG) {
                            ku.setValue(new Long(rr.getLong(ku.getOrders() + 1)));
                        } else {
                            ku.setValue(rr.getString(ku.getOrders() + 1));
                        }
                    }
                    result.addElement(getQObjectDb(keys));
                }
            }
        } catch (SQLException e) {
            LogUtil.getLog(this.getClass()).error("listResult:" + e.getMessage());
            throw new ResKeyException(SkinUtil.ERR_DB);
        }

        lr.setResult(result);
        lr.setTotal(total);
        return lr;
    }

    public ListResult listResult(String sql, int curPage, int pageSize) throws
            ResKeyException {
        return listResult(new JdbcTemplate(new Connection(table.getConnName())),
                          sql, curPage, pageSize);
    }

    public ListResult listResult(JdbcTemplate jt, String sql, int curPage,
                                 int pageSize) throws
            ResKeyException {
        int total = 0;
        ResultSet rs = null;
        Vector result = new Vector();

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

        Connection conn = jt.getConnection(); // new Connection(Global.defaultDB);
        try {
            // 取得总记录条数
            String countsql = SQLFilter.getCountSql(sql);
            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(sql);
            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(getQObjectDb(new Integer(rs.getInt(1))));
                    } else if (primaryKey.getType() == PrimaryKey.TYPE_STRING)
                        result.addElement(getQObjectDb(rs.getString(1)));
                    else if (primaryKey.getType() == PrimaryKey.TYPE_LONG)
                        result.addElement(getQObjectDb(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(getQObjectDb(keys));
                    }
                } while (rs.next());
            }
        } catch (SQLException e) {
            LogUtil.getLog(this.getClass()).error("listResult:" + e.getMessage());
            throw new ResKeyException(SkinUtil.ERR_DB);
        } 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;
    }

    public Vector list() {
        return list(new JdbcTemplate(new Connection(table.getConnName())),
                    table.getQueryList());
    }

    public Vector list(String sql) {
        return list(new JdbcTemplate(new Connection(table.getConnName())), sql);
    }

    /**
     * 全部的记录列表
     * @return Vector
     */
    public Vector list(JdbcTemplate jt, String sql) {
        int total = 0;
        ResultSet rs = null;
        Vector result = new Vector();
        Connection conn = jt.getConnection(); // Connection(Global.defaultDB);
        try {
            // 取得总记录条数
            String countsql = SQLFilter.getCountSql(sql);
            rs = conn.executeQuery(countsql);
            if (rs != null && rs.next()) {
                total = rs.getInt(1);
            }
            if (rs != null) {
                rs.close();
                rs = null;
            }

            conn.prepareStatement(sql);
            if (total != 0)
                // sets the limit of the maximum nuber of rows in a ResultSet object
                conn.setMaxRows(total); // 尽量减少内存的使用
            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
                rs.setFetchSize(total); // rs一次从POOL中所获取的记录数
                if (rs.absolute(1) == false) {
                    return result;
                }
                do {
                    if (primaryKey.getType() == PrimaryKey.TYPE_INT)
                        result.addElement(getQObjectDb(new Integer(rs.getInt(1))));
                    else if (primaryKey.getType() == PrimaryKey.TYPE_STRING)
                        result.addElement(getQObjectDb(rs.getString(1)));
                    else if (primaryKey.getType() == PrimaryKey.TYPE_LONG)
                        result.addElement(getQObjectDb(new Long(rs.getLong(1))));
                    else if (primaryKey.getType() == PrimaryKey.TYPE_COMPOUND) {
                        HashMap keys = ((PrimaryKey)primaryKey.clone()).getKeys();

⌨️ 快捷键说明

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