Spring資料庫訪問(HSQL)(三)

2021-10-22 23:35:54 字數 2264 閱讀 3638

之前說的都是插入操作,在我們使用自增主鍵的時候有時我們想立刻獲得資料庫為我們生成的主鍵值,那麼jdbctemplate是支援這個操作的,只是寫起來麻煩一些,可以這麼來做:

jdbctemplate jdbctemplate = new jdbctemplate(datasource);

keyholder keyholder = new generatedkeyholder();

jdbctemplate.update(new preparedstatementcreator()

}, keyholder);

system.out.println("pk: " + keyholder.getkey().intvalue());

不過hsql不支援這種寫法,那麼只能用原始的方法了。呼叫它特有的獲取最後主鍵值的函式來查詢了:

jdbctemplate jdbctemplate = new jdbctemplate(datasource);

string sql = "insert into vehicle(plate,chassis,color,wheel,seat) values(?,?,?,?,?)";

jdbctemplate.update(sql, vehicle.getplate(), vehicle.getchassis(),

vehicle.getcolor(), vehicle.getwheel(), vehicle.getseat());

int id = jdbctemplate.queryforint("call identity()");

system.out.println("pk: " + id);

這樣就會獲取到生成主鍵的值。插入操作的最後一部分是批量插入,批量插入屬於和資料庫互動比較密集的操作,容易出現效能問題,而jdbc模板為我們提供了簡便的方法來執行批量操作,我們來看:

public void insertbatch(final listvehicles) 

public int getbatchsize()

});}

測試時,也很簡單:

到此,jdbc模板的更新操作就介紹完了,以插入操作為例來說明,逐步深入,使用jdbc模板的各種實現方式,其中以可變引數形式傳遞引數最為簡單。下面來看看資料查詢,這是概念比較多的一塊兒。先從通用的方法來開始看:

public vehicle findbyid(int id) , new rowcallbackhandler() 

});return vehicle;

}

那麼在呼叫時,就可以使用jdbctemplate的queryforobject方法了。比如:

到此都是單行資料的查詢,都是很簡單的操作,下面我們來看使用jdbc模板查詢多行資料的方法。首先在dao中新增乙個findall方法,並實現該方法,如下:

public listfindall() 

return vehicles;

}

啟動hsql伺服器,就可以直接在主函式中執行該方法,就能得到所有的查詢結果了。

使用jdbc模板來查詢多條記錄也是這麼簡單,下面來看看如何使用jdbc模板來查詢單個值,這也很簡單,因為jdbc模板為我們提供了大量簡化的api。比如我們只獲取車輛的底盤號資訊,要計算系統內車輛的數量,那麼我們需要再為dao定義兩個方法:string getchassis(int id)和int countvehicle(),寫出這兩個方法的具體實現:

public string getchassis(int id) , string.class);

return color;

}public int countvehicle()

queryforobject()方法有很多過載的方法,這裡我們使用的是傳遞sql語句,引數和返回值的型別,這樣jdbc模板處理後的結果就是string型別的了,我們就可以直接獲取到值了,這種查詢方式適用於單值查詢的情形,使用非常簡單。對於集合函式,jdbc模板更加簡化,為我們提供了queryforint()方法和queryforlong()方法,那麼我們直接使用該方法就可以獲取到集合函式計算的結果了,當然,如果可以確定返回值的型別為int和long時,也可直接使用它們,而對於其它資料型別則需要使用queryforobject()方法了。

測試方法也很簡單:

得到如下執行結果:

[img]

訪問資料庫 訪問資料庫

程式執行的時候,資料都是在記憶體中的。當程式終止的時候,通常都需要將資料儲存到磁碟上,無論是儲存到本地磁碟,還是通過網路儲存到伺服器上,最終都會將資料寫入磁碟檔案。而如何定義資料的儲存格式就是乙個大問題。如果我們自己來定義儲存格式,比如儲存乙個班級所有學生的成績單 名字成績 michael99 bo...

訪問資料庫 資料庫並行訪問

作者姓名 neo chen 陳景峰 暱稱 netkiller 呼號 bg7nyt 手機 86 13113668890 多維度架構 知乎 www.zhihu.com 這裡主要講述有關開發中遇到的資料庫並行問題 防止並行顯示背景 我們有乙個order訂單表,工作流如下 建立訂單 訂單分配 訂單審核 批准...

資料庫訪問

1.sqlcommand 建立sqlconnection的例項 using sqlconnection conn new sqlconnection connectionstring 建立sqlcommand的例項 string sql sql語句 sqlcommand cmd new sqlcom...