Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2011-2013, James Zhan 詹波 (jfinal@126.com). Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
 
 
 package com.jfinal.plugin.activerecord.dialect;
 
 
 import java.sql.*;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;

AnsiSqlDialect. Try to use ANSI SQL dialect with ActiveRecordPlugin.

A clever person solves a problem. A wise person avoids it.

 
 public class AnsiSqlDialect extends Dialect {
 
 
 
     public String forTableInfoBuilderDoBuildTableInfo(String tableName) {
         return "SELECT * FROM " + tableName + " WHERE 1 = 2";
     }
 
     public void forModelSave(TableInfo tableInfoMap<StringObjectattrsStringBuilder sqlList<Objectparas) {
         sql.append("INSERT INTO ").append(tableInfo.getTableName()).append(.);
         StringBuilder temp = new StringBuilder(") VALUES(");
         for (Entry<StringObjecte : attrs.entrySet()) {
             String colName = e.getKey();
             if (tableInfo.hasColumnLabel(colName)) {
                 if (paras.size() > ) {
                     sql.append(", ");
                     temp.append(", ");
                 }
                 sql.append(colName);
                 temp.append(.);
                 paras.add(e.getValue());
             }
         }
         sql.append(temp.toString()).append(.);
     }
 
     public String forModelDeleteById(TableInfo tInfo) {
         String pKey = tInfo.getPrimaryKey();
         return "DELETE FROM " + tInfo.getTableName() +  + pKey + ;
     }
 
     public void forModelUpdate(TableInfo tableInfoMap<StringObjectattrsSet<StringmodifyFlagString pKeyObject idStringBuilder sqlList<Objectparas) {
         sql.append().append(tableInfo.getTableName()).append(" SET ");
         for (Entry<StringObjecte : attrs.entrySet()) {
             String colName = e.getKey();
             if (!pKey.equalsIgnoreCase(colName) && modifyFlag.contains(colName) && tableInfo.hasColumnLabel(colName)) {
                 if (paras.size() > )
                     sql.append(", ");
                 sql.append(colName).append(" = ? ");
                 paras.add(e.getValue());
             }
         }
         sql.append().append(pKey).append();
         paras.add(id);
     }
 
     public String forModelFindById(TableInfo tInfoString columns) {
         StringBuilder sql = new StringBuilder("SELECT ");
         if (columns.trim().equals(.)) {
             sql.append(columns);
         } else {
             String[] columnsArray = columns.split(.);
             for (int i = i < columnsArray.lengthi++) {
                 if (i > )
                     sql.append(", ");
                 sql.append(columnsArray[i].trim());
             }
         }
         sql.append();
         sql.append(tInfo.getTableName());
         sql.append().append(tInfo.getPrimaryKey()).append();
         return sql.toString();
     }
 
     public String forDbFindById(String tableNameString primaryKeyString columns) {
        StringBuilder sql = new StringBuilder("SELECT ");
        if (columns.trim().equals(.)) {
            sql.append(columns);
        } else {
            String[] columnsArray = columns.split(.);
            for (int i = i < columnsArray.lengthi++) {
                if (i > )
                    sql.append(", ");
                sql.append(columnsArray[i].trim());
            }
        }
        sql.append();
        sql.append(tableName.trim());
        sql.append().append(primaryKey).append();
        return sql.toString();
    }
    public String forDbDeleteById(String tableNameString primaryKey) {
        return "DELETE FROM " + tableName.trim() +  + primaryKey + ;
    }
    public void forDbSave(StringBuilder sqlList<ObjectparasString tableNameRecord record) {
        sql.append("INSERT INTO ");
        sql.append(tableName.trim()).append(.);
        StringBuilder temp = new StringBuilder();
        temp.append(") VALUES(");
        for (Entry<StringObjecte : record.getColumns().entrySet()) {
            if (paras.size() > ) {
                sql.append(", ");
                temp.append(", ");
            }
            sql.append(e.getKey());
            temp.append(.);
            paras.add(e.getValue());
        }
        sql.append(temp.toString()).append(.);
    }
    public void forDbUpdate(String tableNameString primaryKeyObject idRecord recordStringBuilder sqlList<Objectparas) {
        sql.append().append(tableName.trim()).append(" set ");
        for (Entry<StringObjecte : record.getColumns().entrySet()) {
            String colName = e.getKey();
            if (!primaryKey.equalsIgnoreCase(colName)) {
                if (paras.size() > ) {
                    sql.append(", ");
                }
                sql.append(colName).append(" = ? ");
                paras.add(e.getValue());
            }
        }
        sql.append().append(primaryKey).append();
        paras.add(id);
    }

    
SELECT * FROM subject t1 WHERE (SELECT count(*) FROM subject t2 WHERE t2.id < t1.id AND t2.key = '123') > = 10 AND (SELECT count(*) FROM subject t2 WHERE t2.id < t1.id AND t2.key = '123') < 20 AND t1.key = '123'
    public void forPaginate(StringBuilder sqlint pageNumberint pageSizeString selectString sqlExceptSelect) {
        throw new ActiveRecordException("Your should not invoke this method because takeOverDbPaginate(...) will take over it.");
    }
    public boolean isTakeOverDbPaginate() {
        return true;
    }
    @SuppressWarnings("rawtypes")
    public Page<RecordtakeOverDbPaginate(Connection connint pageNumberint pageSizeString selectString sqlExceptSelectObject... parasthrows SQLException {
        long totalRow;
        int totalPage;
        List result = CPI.query(conn"SELECT count(1) " + DbKit.replaceFormatSqlOrderBy(sqlExceptSelect), paras);
        int size = result.size();
        if (size == 1)
            totalRow = ((Numberresult.get()).longValue();
        else if (size > 1)
            totalRow = result.size();
        else
            return new Page<Record>(new ArrayList<Record>(), pageNumberpageSize);
        totalPage = (int) (totalRow / pageSize);
        if (totalRow % pageSize != ) {
            totalPage++;
        }
        PreparedStatement pst = conn.prepareStatement(select + . + sqlExceptSelect..);
        for (int i = i < paras.lengthi++) {
            pst.setObject(i + 1, paras[i]);
        }
        ResultSet rs = pst.executeQuery();
        // move the cursor to the start
        int offset = pageSize * (pageNumber - 1);
        for (int i = i < offseti++)
            if (!rs.next())
                break;
        List<Recordlist = buildRecord(rspageSize);
        if (rs != nullrs.close();
        if (pst != nullpst.close();
        return new Page<Record>(listpageNumberpageSizetotalPage, (inttotalRow);
    }
    private List<RecordbuildRecord(ResultSet rsint pageSizethrows SQLException {
        List<Recordresult = new ArrayList<Record>();
        ResultSetMetaData rsmd = rs.getMetaData();
        int columnCount = rsmd.getColumnCount();
        String[] labelNames = new String[columnCount + 1];
        int[] types = new int[columnCount + 1];
        buildLabelNamesAndTypes(rsmdlabelNamestypes);
        for (int k = k < pageSize && rs.next(); k++) {
            Record record = new Record();
            Map<StringObjectcolumns = record.getColumns();
            for (int i = 1; i <= columnCounti++) {
                Object value;
                if (types[i] < .)
                    value = rs.getObject(i);
                else if (types[i] == .)
                    value = ModelBuilder.handleClob(rs.getClob(i));
                else if (types[i] == .)
                    value = ModelBuilder.handleClob(rs.getNClob(i));
                else if (types[i] == .)
                    value = ModelBuilder.handleBlob(rs.getBlob(i));
                else
                    value = rs.getObject(i);
                columns.put(labelNames[i], value);
            }
            result.add(record);
        }
        return result;
    }
    private void buildLabelNamesAndTypes(ResultSetMetaData rsmdString[] labelNamesint[] typesthrows SQLException {
        for (int i = 1; i < labelNames.lengthi++) {
            labelNames[i] = rsmd.getColumnLabel(i).toLowerCase();
            types[i] = rsmd.getColumnType(i);
        }
    }
    public boolean isTakeOverModelPaginate() {
        return true;
    }
    @SuppressWarnings({"rawtypes""unchecked"})
    public Page<? extends ModeltakeOverModelPaginate(Class<? extends ModelmodelClassint pageNumberint pageSizeString selectString sqlExceptSelectObject... paras) {
        Connection conn = null;
        try {
            conn = DbKit.getConnection();
            long totalRow;
            int totalPage;
            List result = CPI.query(conn"SELECT count(1) " + DbKit.replaceFormatSqlOrderBy(sqlExceptSelect), paras);
            int size = result.size();
            if (size == 1)
                totalRow = ((Numberresult.get()).longValue();        // totalRow = (Long)result.get(0);
            else if (size > 1)
                totalRow = result.size();
            else
                return new Page(new ArrayList(), pageNumberpageSize);    // totalRow = 0;
            totalPage = (int) (totalRow / pageSize);
            if (totalRow % pageSize != ) {
                totalPage++;
            }
            // --------
            PreparedStatement pst = conn.prepareStatement(select + . + sqlExceptSelect..);
            for (int i = i < paras.lengthi++) {
                pst.setObject(i + 1, paras[i]);
            }
            ResultSet rs = pst.executeQuery();
            // move the cursor to the start
            int offset = pageSize * (pageNumber - 1);
            for (int i = i < offseti++)
                if (!rs.next())
                    break;
            List list = buildModel(rsmodelClasspageSize);
            if (rs != nullrs.close();
            if (pst != nullpst.close();
            return new Page(listpageNumberpageSizetotalPage, (inttotalRow);
        } catch (Exception e) {
            throw new ActiveRecordException(e);
        } finally {
            DbKit.close(conn);
        }
    }
    @SuppressWarnings({"rawtypes""unchecked"})
    public final <T> List<T> buildModel(ResultSet rsClass<? extends ModelmodelClassint pageSizethrows SQLExceptionInstantiationExceptionIllegalAccessException {
        List<T> result = Lists.newArrayList();
        final ResultSetMetaData rsmd = rs.getMetaData();
        int columnCount = rsmd.getColumnCount();
        String[] labelNames = new String[columnCount + 1];
        int[] types = new int[columnCount + 1];
        buildLabelNamesAndTypes(rsmdlabelNamestypes);
        for (int k = k < pageSize && rs.next(); k++) {
            Model<?> ar = modelClass.newInstance();
            Map<StringObjectattrs = CPI.getAttrs(ar);
            for (int i = 1; i <= columnCounti++) {
                Object value;
                if (types[i] < .)
                    value = rs.getObject(i);
                else if (types[i] == .)
                    value = ModelBuilder.handleClob(rs.getClob(i));
                else if (types[i] == .)
                    value = ModelBuilder.handleClob(rs.getNClob(i));
                else if (types[i] == .)
                    value = ModelBuilder.handleBlob(rs.getBlob(i));
                else
                    value = rs.getObject(i);
                attrs.put(labelNames[i], value);
            }
            result.add((T) ar);
        }
        return result;
    }
New to GrepCode? Check out our FAQ X