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);
}
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;
}
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;
}
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();
}
}
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;
}
Aggregations