Search in sources :

Example 6 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class ExtDaoInvocationHandler method queryList.

/**
     * 根据sql查询特定的记录,并转化为指定的类对象
     *
     * @param dao
     *            Dao实例
     * @param klass
     *            Pojo类
     * @param sql_str
     *            sql语句
     * @return 查询结果
     */
public static <T> List<T> queryList(Dao dao, Class<T> klass, String sql_str) {
    Sql sql = Sqls.create(sql_str).setCallback(Sqls.callback.entities()).setEntity(dao.getEntity(klass));
    dao.execute(sql);
    return sql.getList(klass);
}
Also used : Sql(org.nutz.dao.sql.Sql)

Example 7 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class ExtDaoInvocationHandler method createIndexs.

private static UpdateIndexSql createIndexs(Dao dao, Entity<?> en, Set<String> indexsHis, Object t) {
    UpdateIndexSql uis = new UpdateIndexSql();
    List<Sql> sqls = new ArrayList<Sql>();
    List<String> delIndexs = new ArrayList<String>();
    List<EntityIndex> indexs = en.getIndexes();
    for (EntityIndex index : indexs) {
        sqls.add(dao.getJdbcExpert().createIndexSql(en, index));
    }
    if (!Lang.isEmpty(sqls)) {
        uis.setSqlsAdd(sqls.toArray(new Sql[0]));
    }
    Iterator<String> iterator = indexsHis.iterator();
    List<Sql> delSqls = new ArrayList<Sql>();
    while (iterator.hasNext()) {
        String index = iterator.next();
        if (delIndexs.contains(index) || Lang.equals("PRIMARY", index)) {
            continue;
        }
        MappingField mf = en.getColumn(index);
        if (mf != null) {
            if (mf.isName())
                continue;
        }
        delSqls.add(Sqls.createf("ALTER TABLE %s DROP INDEX %s", getTableName(dao, en, t), index));
    }
    if (!Lang.isEmpty(delSqls)) {
        uis.setSqlsDel(Lang.collection2array(delSqls));
    }
    return uis;
}
Also used : ArrayList(java.util.ArrayList) EntityIndex(org.nutz.dao.entity.EntityIndex) MappingField(org.nutz.dao.entity.MappingField) Sql(org.nutz.dao.sql.Sql)

Example 8 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class AbstractSqlManager method createCombo.

public List<Sql> createCombo(String... keys) {
    if (null == keys || keys.length == 0)
        keys = this.keys();
    List<Sql> list = new ArrayList<Sql>(keys.length);
    for (String key : keys) {
        Sql sql = create(key);
        list.add(sql);
    }
    return list;
}
Also used : ArrayList(java.util.ArrayList) Sql(org.nutz.dao.sql.Sql)

Example 9 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class NutDaoExecutor method _runExec.

// 执行存储过程,简单实现
protected void _runExec(Connection conn, DaoStatement st) throws SQLException {
    if (st.getContext().getPager() != null) {
        throw Lang.makeThrow(DaoException.class, "NOT Pageable : " + st);
    }
    // 打印调试信息
    String sql = st.toPreparedStatement();
    if (log.isDebugEnabled())
        log.debug(sql);
    Object[][] paramMatrix = st.getParamMatrix();
    CallableStatement stmt = null;
    ResultSet rs = null;
    try {
        stmt = conn.prepareCall(sql);
        ValueAdaptor[] adaptors = st.getAdaptors();
        HashMap<Integer, OutParam> outParams = new HashMap<Integer, OutParam>();
        if (st instanceof Sql) {
            VarIndex varIndex = ((Sql) st).paramIndex();
            VarSet varSet = ((Sql) st).params();
            for (int i = 0; i < varIndex.size(); i++) {
                String name = varIndex.getOrderName(i);
                if (name.startsWith("OUT") && varSet.get(name).getClass() == Integer.class) {
                    Integer t = (Integer) varSet.get(name);
                    outParams.put(i, new OutParam(name, t));
                }
            }
        }
        // 创建语句并设置参数
        if (paramMatrix != null && paramMatrix.length > 0) {
            PreparedStatement pst = (PreparedStatement) stmt;
            Object[] pm = paramMatrix[0];
            for (int i = 0; i < pm.length; i++) {
                OutParam outParam = outParams.get(i);
                if (outParam == null)
                    adaptors[i].set(pst, pm[i], i + 1);
                else
                    stmt.registerOutParameter(i + 1, outParam.jdbcType);
            }
        }
        stmt.execute();
        if (outParams.size() > 0) {
            Record r = Record.create();
            for (Entry<Integer, OutParam> en : outParams.entrySet()) {
                OutParam outParam = en.getValue();
                int jdbcIndex = en.getKey() + 1;
                Object value;
                switch(outParam.jdbcType) {
                    case Types.INTEGER:
                        value = stmt.getInt(jdbcIndex);
                        break;
                    case Types.TIMESTAMP:
                        value = stmt.getTimestamp(jdbcIndex);
                        break;
                    case Types.CLOB:
                        value = stmt.getString(jdbcIndex);
                        break;
                    case Types.DATE:
                        value = stmt.getDate(jdbcIndex);
                        break;
                    default:
                        value = stmt.getObject(jdbcIndex);
                        break;
                }
                r.set(outParam.name.substring(3), value);
            }
            st.getContext().attr("OUT", r);
        }
        //先尝试读取第一个,并调用一次回调
        rs = stmt.getResultSet();
        try {
            st.onAfter(conn, rs, null);
        } finally {
            if (rs != null)
                rs.close();
        }
        while (true) {
            if (stmt.getMoreResults()) {
                rs = stmt.getResultSet();
                try {
                    if (rs != null)
                        st.onAfter(conn, rs, null);
                } finally {
                    if (rs != null)
                        rs.close();
                }
            }
            break;
        }
    } finally {
        if (stmt != null)
            stmt.close();
    }
}
Also used : HashMap(java.util.HashMap) ValueAdaptor(org.nutz.dao.jdbc.ValueAdaptor) VarIndex(org.nutz.dao.sql.VarIndex) PreparedStatement(java.sql.PreparedStatement) Sql(org.nutz.dao.sql.Sql) CallableStatement(java.sql.CallableStatement) VarSet(org.nutz.dao.sql.VarSet) ResultSet(java.sql.ResultSet) Record(org.nutz.dao.entity.Record)

Example 10 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class OracleJdbcExpert method createEntity.

public boolean createEntity(Dao dao, Entity<?> en) {
    StringBuilder sb = new StringBuilder("CREATE TABLE " + en.getTableName() + "(");
    // 创建字段
    for (MappingField mf : en.getMappingFields()) {
        if (mf.isReadonly())
            continue;
        sb.append('\n').append(mf.getColumnNameInSql());
        sb.append(' ').append(evalFieldType(mf));
        // 非主键的 @Name,应该加入唯一性约束
        if (mf.isName() && en.getPkType() != PkType.NAME) {
            sb.append(" NOT NULL UNIQUE");
        } else // 普通字段
        {
            if (mf.isPk() && en.getPks().size() == 1)
                sb.append(" primary key ");
            if (mf.isNotNull())
                sb.append(" NOT NULL");
            if (mf.hasDefaultValue() && mf.getColumnType() != ColType.BOOLEAN)
                addDefaultValue(sb, mf);
            if (// 有点暴力
            mf.isUnsigned() && mf.getColumnType() != ColType.BOOLEAN)
                sb.append(" Check ( ").append(mf.getColumnNameInSql()).append(" >= 0)");
        }
        sb.append(',');
    }
    // 结束表字段设置
    sb.setCharAt(sb.length() - 1, ')');
    List<Sql> sqls = new ArrayList<Sql>();
    sqls.add(Sqls.create(sb.toString()));
    // 创建复合主键
    List<MappingField> pks = en.getPks();
    if (pks.size() > 1) {
        StringBuilder pkNames = new StringBuilder();
        for (MappingField pk : pks) {
            pkNames.append(pk.getColumnName()).append(',');
        }
        pkNames.setLength(pkNames.length() - 1);
        String pkNames2 = makePksName(en);
        String sql = String.format("alter table %s add constraint primary_key_%s primary key (%s)", en.getTableName(), pkNames2, pkNames);
        sqls.add(Sqls.create(sql));
    }
    // 处理AutoIncreasement
    for (MappingField mf : en.getMappingFields()) {
        if (!mf.isAutoIncreasement())
            continue;
        // 序列
        sqls.add(Sqls.create(gSQL(CSEQ, en.getTableName(), mf.getColumnName())));
        // 触发器
        sqls.add(Sqls.create(gSQL(CTRI, en.getTableName(), mf.getColumnName())));
    }
    // 创建索引
    sqls.addAll(createIndexs(en));
    // TODO 详细处理Clob
    // TODO 详细处理Blob
    // 执行创建语句
    dao.execute(sqls.toArray(new Sql[sqls.size()]));
    // 创建关联表
    createRelation(dao, en);
    // 添加注释(表注释与字段注释)
    addComment(dao, en);
    return true;
}
Also used : ArrayList(java.util.ArrayList) MappingField(org.nutz.dao.entity.MappingField) Sql(org.nutz.dao.sql.Sql)

Aggregations

Sql (org.nutz.dao.sql.Sql)69 Test (org.junit.Test)33 MappingField (org.nutz.dao.entity.MappingField)14 ArrayList (java.util.ArrayList)12 NutSql (org.nutz.dao.impl.sql.NutSql)9 Pet (org.nutz.dao.test.meta.Pet)9 ResultSet (java.sql.ResultSet)8 SQLException (java.sql.SQLException)8 FileSqlManager (org.nutz.dao.impl.FileSqlManager)8 Connection (java.sql.Connection)7 SqlManager (org.nutz.dao.SqlManager)7 SqlCallback (org.nutz.dao.sql.SqlCallback)5 Record (org.nutz.dao.entity.Record)4 PojoSql (org.nutz.dao.test.meta.issue1074.PojoSql)4 Dao (org.nutz.dao.Dao)3 DaoException (org.nutz.dao.DaoException)3 PreparedStatement (java.sql.PreparedStatement)2 HashMap (java.util.HashMap)2 List (java.util.List)2 LinkField (org.nutz.dao.entity.LinkField)2