一些實用的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. 其它還有,後續再補充編輯該帖;