一些实用的SQL的写法可以减少自己的程序繁琐程度,有些事情的确可以通过sql让所需要的数据在rs里面就能获取:
1. 将数据库中的几个字段合为一个字段输出:
-- 主要使用convert将其它非varchar类型的转为统一类型再进行加的操作
select column1+‘,‘+convert(varchar(1),column2) as column from mytable
2. 按表中某个字段分类,并将每一类的数据记录数输出
-- 按type分类,将每一类type(1,2,3)的记录数作为count_num输出,并且对 column1进行去重,比如记录中column1的值为"test"的有两条,但只作为一条统计
select count(distinct column1) as count_num from mytable where type in(1,2,3) group by type order by type asc
3. 多个字段同时计算sum并输出,按一定的时间条件
-- 分别计算clm1,,,的sum
select sum(clm1) as out1, sum(clm2) as out2, sum(clm3) as out3 from mytable where convert(varchar,sdate ,112)=‘2015-01-21 12:11:10"
4. sybase的后台分页与oracle不同:
a. Sybase分两步:
(1) 将表复制一份,并在复制表里面增加自增的identity类型的字段(类似oracle表里面自有的rownum字段);
select *,ids=identity(9) into mytemptable from mydataTable
(2) 使用select top结合identify类型字段将记录查出:
select top 100 from mytemptable where ids > (pageSize * (pageNow - 1)) and ids <= (pageSize * pageNow)
5. Java程序逻辑中如果需要大批量执行sql语句,可以按批次执行,比如每批次300条,但对于insert来说效率还是很低,因为数据库有日志操作
public static int executeBatchSql(List<String> batchsql) {
int count = batchsql.size();
Connection conn = null;
Statement stmt = null;
int[] result = new int[batchsql.size()];
try {
conn = DBConnection.getConnection();
stmt = conn.createStatement();
for (int i = 0; i < count; i++)
{
// 将sql加入批处理池
stmt.addBatch(batchsql.get(i));
if ((i>0 && i % 300 == 0) || i == batchsql.size() - 1){
result = stmt.executeBatch();
}
if (i !=0 && i % 300 == 0) {
// 每批次后重新建立链接
DBConnection.releaseResources();
conn = DBConnection.getConnection();
stmt = conn.createStatement();
}
}
return result.length;
} catch (Exception ex)
{
ex.printStackTrace();
return -1;
} finally {
// 释放数据库资源
DBConnection.releaseResources();
}
}
6. 其它还有,后续再补充编辑该帖;
原文地址:http://blog.csdn.net/liu76xt/article/details/42967883