jdbc操作數(shù)據(jù)庫(kù)的基本流程詳解
更新時(shí)間:2013年06月14日 09:49:31 作者:
本篇文章是對(duì)jdbc操作數(shù)據(jù)庫(kù)的基本流程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
所有的JDBC應(yīng)用程序都具有下面的基本流程:
1、加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)并建立到數(shù)據(jù)庫(kù)的連接。
2、執(zhí)行SQL語(yǔ)句。
3、處理結(jié)果。
4、從數(shù)據(jù)庫(kù)斷開連接釋放資源。
下面我們就來仔細(xì)看一看每一個(gè)步驟:
其實(shí)按照上面所說每個(gè)階段都可得單獨(dú)拿出來寫成一個(gè)獨(dú)立的類方法文件。共別的應(yīng)用來調(diào)用。
1、加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)并建立到數(shù)據(jù)庫(kù)的連接:
String driverName="com.mysql.jdbc.Driver";
String connectiionString="jdbc:mysql://10.5.110.239:3306/test?"+"user=root&password=chen&characterEncoding=utf-8";
Connection connection=null;
try {
Class.forName(driverName);//這里是所謂的數(shù)據(jù)庫(kù)驅(qū)動(dòng)的加載
connection=(Connection) DriverManager.getConnection(connectiionString);//這里就是建立數(shù)據(jù)庫(kù)連接
System.out.println("數(shù)據(jù)庫(kù)連接成功");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return connection;
2、執(zhí)行SQL語(yǔ)句:
在執(zhí)行sql語(yǔ)句的時(shí)候,這里常見的有兩種類型的語(yǔ)句對(duì)象:
Statement:它提供了直接在數(shù)據(jù)庫(kù)中執(zhí)行SQL語(yǔ)句的方法。對(duì)于那些只執(zhí)行一次的查詢、刪除或者一種固定的sql語(yǔ)句來說已經(jīng)足夠了。
Statement statement=(Statement) dUtil.getConnection().createStatement();
String sql="delete from diary where title="+"'"+title+"'";
int count=statement.executeUpdate(sql);
System.out.println("刪除成功");
Preparedstatement:這種語(yǔ)句對(duì)象用于那些需要執(zhí)行多次,每次僅僅是數(shù)據(jù)取值不同的SQL語(yǔ)句,它還提供了一些方法,以便指出語(yǔ)句所使用的輸入?yún)?shù)。
String sql="insert into diary(title,content,authorname,time) values(?,?,?,now())";
try {
PreparedStatement preparedStatement=(PreparedStatement) dUtil.getConnection().prepareStatement(sql);
String title=diary.getTitle();
String content=diary.getContent();
String authorname=diary.getAuthorName();
preparedStatement.setString(1, title);
preparedStatement.setString(2, content);
preparedStatement.setString(3, authorname);
3、處理結(jié)果:
ResultSet resultSet=statement.executeQuery(sql);
while (resultSet.next()) {
Diary diary=new Diary();
diary.setAuthorName(resultSet.getString("authorname"));
diary.setContent(resultSet.getString("content"));
diary.setTitle(resultSet.getString("title"));
diary.setId(resultSet.getInt("id"));
Date time=resultSet.getDate("time");
此處,應(yīng)該知道的是:Statement執(zhí)行sql語(yǔ)句的方法:insert、Update、delete語(yǔ)句是使用了Statement的executeUpdate方法執(zhí)行的,返回結(jié)果是插入、更新、刪除的個(gè)數(shù)。而select語(yǔ)句執(zhí)行較為特別是使用了Statement的executeQuery方法執(zhí)行的。返回的結(jié)果存放在resultset結(jié)果集中,我們可以調(diào)用next()方法來移到結(jié)果集中的下一條記錄。結(jié)果集由行和列組成,各列數(shù)據(jù)可以通過相應(yīng)數(shù)據(jù)庫(kù)類型的一系列g(shù)et方法(如getString,getInt,getDate等等)來取得。
4、從數(shù)據(jù)庫(kù)斷開連接釋放資源:
在結(jié)果集、語(yǔ)句和連接對(duì)象用完以后,我們必須正確地關(guān)閉它們。連接對(duì)象、結(jié)果集對(duì)象以及所有的語(yǔ)句對(duì)象都有close()方法,通過調(diào)用這個(gè)方法,我們可以確保正確釋放與特定數(shù)據(jù)庫(kù)系統(tǒng)相關(guān)的所有資源。
public static void closeConnection(ResultSet resultSet,PreparedStatement preparedStatement, Connection connection) throws SQLException {
if (resultSet!=null) resultSet.close();
if (preparedStatement!=null) preparedStatement.close();
if(connection!=null&&connection.isClosed()==false) connection.close();
System.out.println("數(shù)據(jù)庫(kù)關(guān)閉");
}
1、加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)并建立到數(shù)據(jù)庫(kù)的連接。
2、執(zhí)行SQL語(yǔ)句。
3、處理結(jié)果。
4、從數(shù)據(jù)庫(kù)斷開連接釋放資源。
下面我們就來仔細(xì)看一看每一個(gè)步驟:
其實(shí)按照上面所說每個(gè)階段都可得單獨(dú)拿出來寫成一個(gè)獨(dú)立的類方法文件。共別的應(yīng)用來調(diào)用。
1、加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)并建立到數(shù)據(jù)庫(kù)的連接:
復(fù)制代碼 代碼如下:
String driverName="com.mysql.jdbc.Driver";
String connectiionString="jdbc:mysql://10.5.110.239:3306/test?"+"user=root&password=chen&characterEncoding=utf-8";
Connection connection=null;
try {
Class.forName(driverName);//這里是所謂的數(shù)據(jù)庫(kù)驅(qū)動(dòng)的加載
connection=(Connection) DriverManager.getConnection(connectiionString);//這里就是建立數(shù)據(jù)庫(kù)連接
System.out.println("數(shù)據(jù)庫(kù)連接成功");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return connection;
2、執(zhí)行SQL語(yǔ)句:
在執(zhí)行sql語(yǔ)句的時(shí)候,這里常見的有兩種類型的語(yǔ)句對(duì)象:
Statement:它提供了直接在數(shù)據(jù)庫(kù)中執(zhí)行SQL語(yǔ)句的方法。對(duì)于那些只執(zhí)行一次的查詢、刪除或者一種固定的sql語(yǔ)句來說已經(jīng)足夠了。
復(fù)制代碼 代碼如下:
Statement statement=(Statement) dUtil.getConnection().createStatement();
String sql="delete from diary where title="+"'"+title+"'";
int count=statement.executeUpdate(sql);
System.out.println("刪除成功");
Preparedstatement:這種語(yǔ)句對(duì)象用于那些需要執(zhí)行多次,每次僅僅是數(shù)據(jù)取值不同的SQL語(yǔ)句,它還提供了一些方法,以便指出語(yǔ)句所使用的輸入?yún)?shù)。
復(fù)制代碼 代碼如下:
String sql="insert into diary(title,content,authorname,time) values(?,?,?,now())";
try {
PreparedStatement preparedStatement=(PreparedStatement) dUtil.getConnection().prepareStatement(sql);
String title=diary.getTitle();
String content=diary.getContent();
String authorname=diary.getAuthorName();
preparedStatement.setString(1, title);
preparedStatement.setString(2, content);
preparedStatement.setString(3, authorname);
3、處理結(jié)果:
復(fù)制代碼 代碼如下:
ResultSet resultSet=statement.executeQuery(sql);
while (resultSet.next()) {
Diary diary=new Diary();
diary.setAuthorName(resultSet.getString("authorname"));
diary.setContent(resultSet.getString("content"));
diary.setTitle(resultSet.getString("title"));
diary.setId(resultSet.getInt("id"));
Date time=resultSet.getDate("time");
此處,應(yīng)該知道的是:Statement執(zhí)行sql語(yǔ)句的方法:insert、Update、delete語(yǔ)句是使用了Statement的executeUpdate方法執(zhí)行的,返回結(jié)果是插入、更新、刪除的個(gè)數(shù)。而select語(yǔ)句執(zhí)行較為特別是使用了Statement的executeQuery方法執(zhí)行的。返回的結(jié)果存放在resultset結(jié)果集中,我們可以調(diào)用next()方法來移到結(jié)果集中的下一條記錄。結(jié)果集由行和列組成,各列數(shù)據(jù)可以通過相應(yīng)數(shù)據(jù)庫(kù)類型的一系列g(shù)et方法(如getString,getInt,getDate等等)來取得。
4、從數(shù)據(jù)庫(kù)斷開連接釋放資源:
在結(jié)果集、語(yǔ)句和連接對(duì)象用完以后,我們必須正確地關(guān)閉它們。連接對(duì)象、結(jié)果集對(duì)象以及所有的語(yǔ)句對(duì)象都有close()方法,通過調(diào)用這個(gè)方法,我們可以確保正確釋放與特定數(shù)據(jù)庫(kù)系統(tǒng)相關(guān)的所有資源。
復(fù)制代碼 代碼如下:
public static void closeConnection(ResultSet resultSet,PreparedStatement preparedStatement, Connection connection) throws SQLException {
if (resultSet!=null) resultSet.close();
if (preparedStatement!=null) preparedStatement.close();
if(connection!=null&&connection.isClosed()==false) connection.close();
System.out.println("數(shù)據(jù)庫(kù)關(guān)閉");
}
相關(guān)文章
MySQL用戶權(quán)限設(shè)置保護(hù)數(shù)據(jù)庫(kù)安全
MySQL用戶權(quán)限設(shè)置是保護(hù)數(shù)據(jù)庫(kù)安全的重要措施之一。通過為用戶設(shè)置不同的權(quán)限,可以控制用戶對(duì)數(shù)據(jù)庫(kù)的訪問能力,包括讀取、修改、刪除、創(chuàng)建等操作。合理設(shè)置用戶權(quán)限可以避免誤操作、非法訪問等安全問題2023-05-05Linux下安裝mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz
這篇文章主要介紹了Linux下安裝mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09mysql二進(jìn)制日志文件恢復(fù)數(shù)據(jù)庫(kù)
喜歡的在服務(wù)器或者數(shù)據(jù)庫(kù)上直接操作的兄弟們你值得收藏下!不然你就悲劇了。-----(當(dāng)然我也是在網(wǎng)上搜索的資料!不過自己測(cè)試通過了的!)2014-08-08mysql中的四大運(yùn)算符種類實(shí)例匯總(20多項(xiàng))?
這篇文章主要介紹了mysql中的四大運(yùn)算符種類匯總,運(yùn)算符連接表達(dá)式中的各個(gè)操作數(shù),他的作用是用來指明對(duì)數(shù)據(jù)表中的操作數(shù)所進(jìn)行的運(yùn)算2022-07-07mysql臨時(shí)表(temporary?table)使用方法詳解
MySQL臨時(shí)表在很多場(chǎng)景中都會(huì)用到,MySQL內(nèi)部在執(zhí)行復(fù)雜SQL時(shí),需要借助臨時(shí)表進(jìn)行分組、排序、去重等操作,下面這篇文章主要給大家介紹了關(guān)于mysql臨時(shí)表(temporary?table)使用方法的相關(guān)資料,需要的朋友可以參考下2024-01-01MySQL中的引號(hào)和反引號(hào)的區(qū)別與用法詳解
這個(gè)問題是我在學(xué)習(xí)數(shù)據(jù)庫(kù)的時(shí)候遇到的一個(gè)問題,我當(dāng)時(shí)并不能理解下圖中的一些情況,后來我也請(qǐng)教了一位大佬給我解答,最后在大佬和度娘的幫助下我大概理解了這個(gè)反引號(hào)的東西2021-10-10