日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stmt在java中的应用_JDBC技术基础总结转载,非原创

發布時間:2024/10/8 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stmt在java中的应用_JDBC技术基础总结转载,非原创 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JDBC的全稱是Java DataBase

Connectivity,即Java數據庫連接。它是一套行業標準的API,可以在Java應用程序中與關系型數據庫建立連接,并執行相關操作,例如Oracle,DB2等主流數據庫產品。

控制臺,圖形界面客戶端與數據庫交互的途徑是執行SQL語句,Java程序也不例外。Java中訪問數據庫主要使用JDBC。JDBC是Java規定的訪問數據庫的標準API,目前主流的數據庫都支持JDBC。本章使用的開發工具是MyEclipse5.5。

5.1.1

JDBC的概念

JDBC(Java數據基礎連接,Java

Database

Connectivity)是標準的Java訪問數據庫的API。JDBC定義了數據庫的連接,SQL語句的執行以及查詢結果集的遍歷等。JDBC把這些操作定義為接口,位于包java.sql下面。如java.sql.Connection,java.sql.Statement,java.sql.ResultSet等。各個數據庫提供商在自己的JDBC驅動中實現了這些接口。

使用JDBC,可以針對不同的數據庫產品使用同一套程序,而不需要編寫不同的程序。JDBC的基本功能如下所示。

?

連接數據庫

?

向數據庫執行查詢數據動作

?

向數據庫執行更新數據動作

?

向數據庫執行插入數據動作

?

向數據庫執行刪除數據動作

?

執行存儲過程

JDBC支持數據庫訪問的兩層和三層模型。兩層模型是Java應用程序或Applet直接與數據庫進行交互操作的模型。它需要JDBC驅動將SQL語句發送到數據庫,然后將執行結果再返回給客戶端應用程序。三層模型是在應用與數據庫之間,有一個中間應用服務器。這個應用服務器是將程序解耦合,使得邏輯與數據分離。其具體過程,是使用JDBC驅動把命令發送給中間應用服務器,在此服務器中執行一定的邏輯操作,再將這些命令發送給數據庫。數據庫接收命令后,執行相關操作,將產生的結果返回給中間服務器,再通過中間服務器將數據發回給應用。

5.1.2

JDBC和數據庫數據類型的轉化

JDBC是使用Java技術來訪問數據庫數據的,數據庫數據類型和Java的數據類型不同。所以使用JDBC技術時,需要Java與數據庫的數據類型轉化。Java與數據庫的數據類型轉化映射如表5.1所示。

表5.1

數據庫數據類型和Java數據類型對照

SQL數據類型類型

Java數據類型

5.2

JDBC API

JDBC

API由兩個部分組成,一個是核心的API,其類包路徑為java.sql,這是J2SE的一部分。它具有可滾動的結果集,批量更新的實現類;二是擴展的API,其類包路徑為javax.sql,這是J2EE的一部分。它具有訪問JNDI資源,分布式事務等實現類。常用的標準類如下所示。

?

java.sql.DriverManager:完成驅動程序的裝載和建立新的數據庫連接。

?

java.sql.Connection:表示對某一指定數據庫的連接。

?

java.sql.Statement:管理在一指定數據庫連接上的SQL語句的執行。

?

java.sql.ResultSet:一個SQL語句的執行結果。

?

java.sql.Statement:接口,用作執行一條靜態的SQL語句并接收產生的結果。

?

java.sql.PreparedStatement:繼承了Statement接口,用于對預編譯的SQL語句的執行。

?

java.sql.CallableStatement:繼承了Statement接口,用于對一個數據庫存儲過程的執行。

?

java.sql.SQLException:處理數據庫訪問時的出錯信息。

?

java.sql.SQLWarning:處理數據庫訪問時的警告信息。

?

java.sql.Statement:用作執行一條靜態的SQL語句并接收產生的結果。

?

java.sql.Time:用于表示時、分、秒。

?

java.sql.Timestamp:擴展標準java.util.date類,用于表示SQL的時間戳,增加了一個以納秒為單位的時間域。

?

java.sql.Types:定義區分SQL類型的常量。

?

java.sql.DatabaseMetaData:定義了JDBC元數據接口。

5.2.1

連接對象Connection

通過Connection連接對象可以獲取Statement語句對象,或者PreparedStatement語句對象。通過語句對象就可以對數據庫進行查詢和更新操作。查詢是讀取數據動作,更新是包括增加、刪除、修改數據的操作。Connection的類路徑為java.sql.Connection。

Connection常用的方法有以下幾種:

?

close():完成關閉連接。

? commit()

:完成提交。

? rollback()

:完成回滾。

?

createStatement():該方法返回Statement對象。

? prepareStatement(String

sql):參數sql是執行 SQL的語句 ,該方法返回PrepareStatement對象。

? setAutoCommit(Boolean

autoCommit):參數autoCommit表示是否自動提交,該方法用于設置自動提交。

5.2.2

Statement對象

執行操作數據庫的過程是,通過Connection連接對象獲取Statement對象,再通過Statement對象執行相關讀取或更新操作。Statement對象有兩種具體實現,他們分別為PreparedStatement和CallableStatement。PreparedStatement主要是用來預編譯SQL語句,這個對象主要是為了提高程序效率;CallableStatement繼承了PreparedStatement接口,用于存儲過程。

Statement對象是通過Connection對象的createStatement()方法來創建的。對于不是頻繁查詢記錄的應用而言,使用Statement對象是一個合適的做法,因為它不必像PreparedStatement對象一樣,需要預編譯。Statement對象的創建過程如下所示:

String URL =

"jdbc:mysql://localhost:3306/bank?username=root&password=root"

Connection

conn=DriverManager.getConnection(URL);

Statement st = conn.

createStatement();

有了Statement對象,就可以對數據庫進行查詢和更新操作。Statement的類路徑為java.sql.Statement。它的常用方法如下:

?

close():完成關閉Statement。

? executeQuery(String

sql):參數sql表示查詢SQL語句,該方法返回ResultSet對象。

? executeUpdate(String

sql):參數sq表示操作SQL語句,該方法返回更新的行數。

? execute(String

sql):參數sql表示操作SQL語句,該方法返回一個boolean值,表明是否返回了ResultSet對象。

? getResultSet()

:該方法ResultSet對象。

通常使用Statement的三個基本方法來執行SQL命令。下面分別介紹這三個方法。

1.

executeQuery()方法

主要是用來執行查詢命令,返回一個ResultSet對象,代碼如下所示:

String sql = “select *

from user”;

ResultSet rs = statement.

executeQuery(sql);

這個示例代碼是查詢user表的所有數據。

2.executeUpdate()方法

主要是用來執行增加,刪除及修改記錄操作,返回一個int整型值,此整型值是被更新的行數,代碼如下所示:

String sql = “insert into

user(name,age,sex) values(‘Jack,25,’男)”;

int num = statement.

executeUpdate (sql);

這個示例代碼是向user表中插入一行記錄。

3.execute()方法

主要是用來執行一般的SQL命令,包括增刪改查以及數據定義,返回一個布爾值,它顯示了是否返回一個查詢結果集ResultSet對象,查詢user表的所有數據代碼如下所示:

String sql = “select *

from user”;

boolean value =

statement. execute(sql);

5.2.3

PreparedStatement對象

除了普通的Statement之外,還有一種語句在實際應用中經常用到。這就是預編譯的PreparedStatement。PreparedStatement繼承了Statement接口,所謂預編譯,就是在創建語句對象時,將SQL執行語句一起進行編譯,然后寫入緩存,只保留參數動態輸入。這樣在執行相同的數據庫操作時,例如查詢某條記錄的信息,不必總是對查詢SQL命令進行編譯,而只是修改相應的參數,例如根據某個標識查詢記錄,就能獲得查詢結果,達到了提高效率的目的。

PreparedStatement對象是通過Connection對象的prepareStatement

()方法來創建的。prepareStatement()方法有一個參數,這個參數需要輸入所要執行的SQL語句。該SQL語句可以保留一個或多個參數作為動態輸入,如果需要有參數動態輸入,則此SQL語句的參數位置需要用“?”代替。然后需要根據參數的序號位置,分別調用不同類型的set方法將參數值動態輸入,示例代碼如下所示:

String URL =

"jdbc:mysql://localhost:3306/bank?username=root&password=root"

Connection conn

=DriverManager.getConnection(URL);

String sql = “select *

from user where id = ?”;

PreparedStatement pstmt =

conn. prepareStatement (sql);

pstmt.setString(1,”x001”);

ResultSet rs = pst.

executeQuery();

這個示例代碼主要是實現根據用戶標識從user表中查詢相關記錄數據。示例中,首先通過connection對象創建一個PreparedStatement對象,初始化時將用戶標識id作為動態輸入參數,之后使用setString方法輸入參數。如果需要查詢不同的用戶,則只要修改用戶標識id,而不需要重新編譯一個SQL命令,代碼如下所示:

String sql = “select *

from user where id = ?”;

PreparedStatement pstmt =

connection. prepareStatement (sql);

pstmt.setString(1,”x007”);

因為用戶標識id是字符串類型,所以在設置輸入參數時需要選擇setString方法,同理針對不同的參數類型,例如int類型用setInt方法。setString方法的第一個參數代表的是參數的序號位置,當有多個參數時,通過序號位置分別將參數嵌入其中,第二個參數是具體的參數值,當多個參數情況時,代碼如下所示:

String URL =

"jdbc:mysql://localhost:3306/bank?username=root&password=root"

Connection

conn=DriverManager.getConnection(URL);

String sql = “select *

from user where name = ? and age < ? and sex =

?”;

PreparedStatement pstmt =

connection. prepareStatement (sql);

pstmt.setString(1,”Jack”);//設置第一個參數

pstmt.setInt(2,”20”);//設置第二個參數

pstmt.setString(3,”男”);//設置第三個參數

ResultSet rs = pstmt.

executeQuery();//獲得結果集

PreparedStatement的常用方法如下:

?

close():該方法完成關閉Statement。

?

executeQuery():該方法輸出ResultSet對象。

?

executeUpdate():該方法輸出數據更新的行數。

? execute()

:該方法輸出boolean值,表明是否返回了ResultSet對象。

? setBoolean(int

paramIndex, boolean

x):參數paramIndex表示所傳遞的參數序號,參數x表示傳遞的是布爾類型參數值。

? setByte(int paramIndex,

byte

x):參數paramIndex表示所傳遞的參數序號,參數x表示該方法傳遞的是一個字節型參數值。

? setShort(int

paramIndex, short

x):參數paramIndex表示所傳遞的參數序號,參數x表示該方法傳遞的是一個短整型參數值。

? setInt(int paramIndex,

int x)

:參數paramIndex表示所傳遞的參數序號,參數x表示該方法傳遞的是一個整型參數值。

? setLong(int paramIndex,

long x)

:參數paramIndex表示所傳遞的參數序號,參數x表示該方法傳遞的是一個長整型參數值。

? setFloat(int

paramIndex, float x)

:參數paramIndex表示所傳遞的參數序號,參數x表示該方法傳遞的是一個浮點型參數值。

? setDouble(int

paramIndex, double x)

:參數paramIndex表示所傳遞的參數序號,參數x表示該方法傳遞的是一個雙精度型參數值。

? setBytes(int

paramIndex, byte[] x)

:參數paramIndex表示所傳遞的參數序號,參數x表示該方法傳遞的是一個字節數字參數值。

? setDate(int paramIndex,

java.sql.Date x)

:參數paramIndex表示所傳遞的參數序號,參數x表示該方法傳遞的是一個日期類型參數值。

? setTime(int paramIndex,

java.sql.Time x)

:參數paramIndex表示所傳遞的參數序號,參數x表示該方法傳遞的是一個時間參數值。

? setObject(int

paramIndex, Object x)

:參數paramIndex表示所傳遞的參數序號,參數x表示該方法傳遞的參數值是一個對象。

5.2.4

結果集ResultSet

java.sql.ResultSet接口封裝了這個結果集對象。其中的每條記錄結果代表了一個數據庫行。通常可以通過一個Statement對象,或PreparedStatement對象及一些其他子接口對象的executeQuery()方法,獲得結果集對象。通過Statement對象的execute()方法,執行一個SQL查詢命令,也可以獲得一個結果集對象,但不是直接獲取。它首先通過execute()方法返回的布爾值,判斷是否返回一個結果集對象,然后通過getResultSet()方法獲取一個ResultSet對象。在有些場合,需要同時返回多個結果集對象,這是就需要通過Statement對象的getMoreResults()方法來實現對結果集集合的遍歷。

在JDBC1.0中,結果集只能單向的滾動,即調用ResultSet的next()方法,使游標向后一行記錄滾動。所謂滾動,指的是游標在記錄行中的定位。在JDBC2.0中,擴展了上述滾動功能。使得滾動方式更加的靈活和可操控,例如JDBC2.0增加了前滾,即游標向當前記錄的前一行滾動,及向某一指定的記錄行跳轉等。

JDBC2.0中,設置結果集的滾動模式是在Connection對象中創建Statement對象(或PreparedStatement對象)時完成的。默認狀態下,滾動模式就是傳統的單向向后的滾動。如果以這種模式,生成結果集后,實現前滾或指向特定行等新增的滾動時,將會拋出異常。

設置滾動模式的方法如下所示。

public Statement

createStatement(int resultSetType, int resultSetConcurrency) throws

SQLException

該方法創建一個Statement對象,同時設置返回結果集的模式。

或者獲取PreparedStatement語句對象,語法格式如下所示。

public PreparedStatement

prepareStatement(String sql, int resultSetType, int

resultSetConcurrency)

throws

SQLException

該方法創建一個PreparedStatement對象,同時設置返回結果集的模式。

5.3

JDBC操作數據庫

數據庫程序常被稱為CURD程序,因為它包括數據的創建Create、更新Update、讀取查詢Read、刪除Delete等邏輯操作,取首字母縮寫便是CURD。CURD概括了數據庫的程序結構,程序無論大小,歸根結底都是這四種操作。這一節中將介紹利用JDBC技術實現對數據庫表的CURD操作。從建表開始,到表對應的實體類,然后是添加、查詢、修改和刪除

5.3.1

實現JDBC連接MySQL數據庫

在執行操作數據庫程序前,首先需要通過JDBC驅動建立與數據庫的連接。連接數據源有兩種方式,一是通過DriveManager類,一是通過DataSource接口及JNDI資源來獲取連接。本章主要介紹通過DriveManager類來連接數據庫。

DriveManager的類路徑為java.sql.DriverManager。它主要是完成驅動程序的裝載和建立新的數據庫連接。java.sql.DriverManager的常用方法如下:

? getConnection (String

URL):參數URL表示數據庫連接地址,該方法輸出Connection對象。

? getConnection(String

URL,String username, String

password):參數URL表示數據庫連接地址,參數username表示登錄數據庫用戶名,參數password表示登錄數據庫用戶口令。該方法輸出Connection對象。

建立數據庫連接,首先要加載數據庫驅動。針對不同的數據庫產品,有不同的數據庫驅動。要加載驅動,首先要獲取類包。本章的數據庫采用的是MySQL數據庫。需要的驅動包為mysql-connector-java-3.1.12-bin.jar,數據庫驅動類路徑為“com.mysql.jdbc.Driver”。

加載過程是使用Class.forName()方法將驅動加載到運行環境之中。加載的時候,驅動會自動向DriverManager完成注冊。加載驅動的代碼如下所示:

String driverName =

"com.mysql.jdbc.Driver"

try{

Class.forName(driverName);

}catch(Exception

e){

e.printStackTrace();

}

接著需要定義URL,即統一資源定位符

(Uniform Resource Locator),這個URL是指向數據源的。JDBC

URL的語法格式如下所示:

jdbc://

這一行代碼中,jdbc為指定協議。為數據庫連接機制的驅動。為數據庫地址。

以MySQL數據庫為例,數據庫連接地址URL代碼如下所示:

String URL =

"jdbc:mysql://localhost:3306/bank?username=root&password=root"

這個URL顯示連接數據庫地址為“localhost:3306”,數據庫名為“bank”,連接數據庫用戶為“root”及密碼為“root”。

有了驅動和連接地址后,需要使用DriveManager來獲取連接。代碼如下所示:

Connection

connection=DriverManager.getConnection(URL);

也可以使用另一種方法,代碼如下所示:

String URL =

"jdbc:mysql://localhost:3306/test ";

String username =

"root";

String password =

"root";

Connection

connection=DriverManager.getConnection(URL,username,password);

綜合上面的內容,可以得到獲取一個數據庫連接的大致過程。連接數據庫需要數據庫驅動和數據庫連接地址,以及數據庫的用戶名和密碼。

現在來編寫一個數據庫連接的類。在MyEclipse中新建一個Web工程,選擇JavaEE5.0規范,工程名為jdbc。把JDBC驅動mysql-connector-java-5.0.5-bin.jar拷貝到WebRoot/WEB-INF/lib目錄下。在該工程的src目錄下新建一個包,包名為con.cn.jdbc。在包中新建一個Java類,類名為JDBC_Connection,在類中編寫如下代碼(這里省略了import內容,源代碼見光盤第5章\5-3):

package

com.cn.jdbc;

public class

JDBC_Connection {

static String drivername

="com.mysql.jdbc.Driver";

static String

url="jdbc:mysql://localhost:3306/bank";

static String

username="root";

static String

password="root";

static{

try {

Class.forName(drivername);//創建驅動

System.out.println("創建驅動成功!");

} catch

(ClassNotFoundException e) {

e.printStackTrace();

}

}

public static Connection

getConnection(){

Connection conn =

null;

try {

conn = (Connection)

DriverManager.getConnection(url, username,

password);

System.out.println("連接數據庫成功!");

} catch (SQLException e)

{

// TODO Auto-generated

catch block

e.printStackTrace();

}

return

conn;

}

public static void

main(String[] args) {

JDBC_Connection.getConnection();

}

}

在MyEclipse中運行該類,在控制臺中打印如下信息:

創建驅動成功!

連接數據庫成功!

這說明數據庫連接已經成功了。

在連接數據庫的類中,一般還要寫一個關閉連接的方法,每一次操作完成以后都要關閉連接。如果詩句訪問量很大的話,不關閉連接會影響數據庫的效率和性能,關閉連接方法的寫法如下:

public static void

free(ResultSet rs,Connection conn ,Statement

stmt){

try {

if(rs

!=null)

rs.close();//關閉結果集

} catch (SQLException e)

{

System.out.println("關閉ResultSet失敗!");

e.printStackTrace();

}finally

{

try {

if(conn !=

null)

conn.close();//關閉連接

} catch (SQLException e)

{

System.out.println("關閉Connection失敗!");

e.printStackTrace();

}finally{

try {

if(stmt !=

null)

stmt.close();//關閉Statement對象

} catch (SQLException e)

{

System.out.println("關閉Statement失敗!");

e.printStackTrace();

}

}

}

}

5.3.2

使用JDBC往數據庫表插入數據

Java程序也可以執行INSERT語句往數據庫插入數據,方法仍然是使用Statement對象,也可以是PreparedStatement對象,執行INSERT語句是要使用executeUpdate(String

sql)方法。executeUpdate()方法用以執行INSERT,UPDATE,DELETE等等,返回數據庫中影響的行數,返回int類型。

在往數據庫表格中插入數據時,首先數據庫中要存在表,還需要用到數據庫表對應的實體類。在MySQL中創建一張表,SQL語句如下(源代碼見光盤第5章\5-3)::

CREATE TABLE users

(

id

int(11) NOT NULL,

name

varchar(20) DEFAULT NULL,

age

int(11) DEFAULT NULL,

tel

varchar(20) DEFAULT NULL,

address varchar(50) DEFAULT NULL,

PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT

CHARSET=gb2312;

每一張表格要對應一個實體類,實體類中的屬性對應著表格的字段名,同時,數據類型轉化要正確。表格對應的實體類代碼如下(源代碼見光盤第5章\5-3)::

package

com.cn.jdbc;

public class UserVo

{

private int

id;

private String

name;

private int

age;

private String

tel;

private String

address;

public String

getAddress() {

return

address;

}

public void

setAddress(String address) {

this.address =

address;

}

public int getAge()

{

return

age;

}

public void setAge(int

age) {

this.age =

age;

}

public int getId()

{

return

id;

}

public void setId(int id)

{

this.id =

id;

}

public String getName()

{

return

name;

}

public void

setName(String name) {

this.name =

name;

}

public String getTel()

{

return

tel;

}

public void setTel(String

tel) {

this.tel =

tel;

}

}

把使用JDBC技術把數據插入到表格中,首先需要連接數據庫,然后執行插入的SQL語句,往數據庫表中插入數據的代碼如下(這里省略了import內容,源代碼見光盤第5章\5-3):

package

com.cn.jdbc;

public class AddUser

{

public void add(UserVo

userVo){

Connection conn =

null;

PreparedStatement pstm =

null;

ResultSet rs =

null;

try {

//調用JDBC_Connection類的getConnection方法連接數據庫

conn =

JDBC_Connection.getConnection();

//添加數據的sql語句

String sql = "insert into

users(id,name,age,tel,address)

values(?,?,?,?,?)";

pstm =

conn.prepareStatement(sql);

pstm.setInt(1,

userVo.getId());//把添加的id值存入pstm對象中,int類型的值用setInt()方法

//把添加的name值存入pstm對象中String類型的值用setString方法

pstm.setString(2,userVo.getName());

pstm.setInt(3,userVo.getAge());//把添加的age值存入pstm對象中

pstm.setString(4,

userVo.getTel());//把添加的tel值存入pstm對象中

pstm.setString(5,

userVo.getAddress());//把添加的address值存入pstm對象中

pstm.executeUpdate();//提交pstm對象

System.out.println("添加成功!添加的內容如下:");

System.out.println("id:"+userVo.getId()+"\t

name:"+userVo.getName()

+"\t

age:"+userVo.getAge()+"\t tel:"+userVo.getTel()+

"\t

address:"+userVo.getAddress());

} catch (Exception e)

{

e.printStackTrace();

} finally

{

JDBC_Connection.free(rs,

conn, pstm);

}

}

public static void

main(String[] args) {

AddUser addUser = new

AddUser();

UserVo userVo = new

UserVo();

int id

=207;

String

name="趙六";

int age=22

;

String

tel="324242";

String address =

"北京海淀區";

//下面是設置要添加的變量值,放入UserVo對象中

userVo.setId(id);

userVo.setName(name);

userVo.setAge(age);

userVo.setTel(tel);

userVo.setAddress(address);

//調用add()方法,把UserVo對象作為參數傳遞

addUser.add(userVo);

}

}

在MyEclipse中運行上述代碼,控制臺打印的信息如下:

創建驅動成功!

連接數據庫成功!

添加成功!添加的內容如下:

id:207 name:趙六 age:22

tel:324242 address:北京海淀區

5.3.3

使用JDBC查詢數據庫表數據

查詢用到select語句,當使用JDBC技術查詢表中的全部內容時,需要使用查詢全部的SQL語句,把查詢結果放到List集合中。代碼如下(這里省略了import內容,源代碼見光盤第5章\5-3):

package

com.cn.jdbc;

public class Query

{

public

List

showUser(){

Connection conn =

null;

Statement stmt =

null;

ResultSet rs =

null;

List

list = new

ArrayList();//聲明一個List集合,用于存放查詢出的數據

try {

conn =

JDBC_Connection.getConnection();//連接數據庫

stmt =

conn.createStatement();//建立Statement對象

rs =

stmt.executeQuery("select * from users");

while(rs.next()){//結果集存在,則進行循環遍歷

UserVo userVo = new

UserVo();

userVo.setId(rs.getInt("id"));

userVo.setName(rs.getString("name"));

userVo.setAge(rs.getInt("age"));

userVo.setTel(rs.getString("tel"));

userVo.setAddress(rs.getString("address"));

list.add(userVo);//把每次獲得的對象數據放入list集合中

}

} catch (SQLException e)

{

// TODO Auto-generated

catch block

e.printStackTrace();

}finally{

JDBC_Connection.free(rs,

conn, stmt);//關閉連接

}

return

list;

}

public static void

main(String[] args) {

Query query = new

Query();

List

list=query.showUser();//調用查詢方法

//如果list集合不為空,則循環遍歷打印出所有的信息

if(list!=null){

System.out.print("id

");

System.out.print("name

");

System.out.print("age

");

System.out.print("tel

");

System.out.print("address

");

System.out.println();

for (int i = 0; i

< list.size(); i++) {

System.out.print(list.get(i).getId()+"\t");

System.out.print(list.get(i).getName()+"\t");

System.out.print(list.get(i).getAge()+"\t");

System.out.print(list.get(i).getTel()+"\t\t");

System.out.print(list.get(i).getAddress()+"\t");

System.out.println();

}

}

}

}

上述代碼中,調用JDBC_Connection的getConnection()方法來連接數據庫,然后執行查詢全部的SQL語句,在MyEclipse中運行上述代碼,在控制臺中打印出如下信息:

創建驅動成功!

連接數據庫成功!

id ?name ?age ?tel

address

2 ?戰三

22

456124456 中國

4 ?李四

22

456124456 中國北京

107 ?Jack ?19

123-465465 銀河系

207 ?趙六

22 ?324242 北京海淀區

234 ?為其

23

235346 誰都

867 ?兒童

4 ?45655 ?地方

2345

阿凡達 ?21 ?2342 ?阿達的

3454 ?趙六 ?22 ?256465 阿薩德

5.3.4

使用JDBC查詢指定條件的數據

在實際開發中,有時候會需要根據指定條件來查詢出相關數據,根據指定條件來查詢數據,使用select語句中的條件查詢,需要用到where子語句。下面的代碼是根據id查詢的例子(這里省略了import內容,源代碼見光盤第5章\5-3)。

package

com.cn.jdbc;

public class QueryById

{

public UserVo

queryUserById(int id) {

UserVo userVo =

null;

Connection conn =

null;

PreparedStatement pstmt =

null;

ResultSet rs =

null;

try {

conn =

JDBC_Connection.getConnection();

pstmt =

conn.prepareStatement("select * from users where id =

?");

pstmt.setInt(1,

id);//設置條件id

rs

=pstmt.executeQuery();

while(rs.next()){//結果集存在,則遍歷結果,放入UserVo對象中

userVo = new

UserVo();

userVo.setId(rs.getInt("id"));

userVo.setName(rs.getString("name"));

userVo.setAge(rs.getInt("age"));

userVo.setTel(rs.getString("tel"));

userVo.setAddress(rs.getString("address"));

}

} catch (SQLException e)

{

// TODO Auto-generated

catch block

e.printStackTrace();

}finally{

JDBC_Connection.free(rs,

conn, pstmt);//關閉連接

}

return

userVo;

}

public static void

main(String[] args) {

QueryById byId = new

QueryById();

int id

=207;

UserVo

vo=byId.queryUserById(id);

if(vo!=null){

System.out.print("id\t

");

System.out.print("name\t

");

System.out.print("age\t");

System.out.print("tel\t");

System.out.print("

address");

System.out.println();

System.out.print(vo.getId()+"\t");

System.out.print(vo.getName()+"\t");

System.out.print(vo.getAge()+"\t");

System.out.print(vo.getTel()+"\t");

System.out.print(vo.getAddress()+"\t");

System.out.println();

}else{

System.out.println("id為"+id+"的用戶不存在!");

}

}

}

上述代碼中,調用JDBC_Connection的getConnection()方法來連接數據庫,傳遞一個id值為207的參數給條件查詢的SQL語句。在MyEclipse中運行上述代碼,在控制臺中打印效果如下:

創建驅動成功!

連接數據庫成功!

id name age tel

address

207 趙六 22 324242 北京海淀區

5.3.5

使用JDBC刪除表數據

刪除數據使用Statement的executeUpdate(String

sql)方法執行DELETE語句。與INSERT不同的是,DELETE必須使用WHERE條件指定刪除哪一行數據,否則將刪除所有數據。對于有主鍵的表來說,可以使用主鍵來標識哪一行數據,因為主鍵值是唯一的,不可重復的。根據id刪除的方法如下(這里省略了import內容,源代碼見光盤第5章\5-3):

package

com.cn.jdbc;

public class DeleteUser

{

public void

deleteUser(int id) {

Connection conn =

null;

PreparedStatement pstmt =

null;

try {

conn

=JDBC_Connection.getConnection();

String sql = "delete from

users where id =?";

pstmt =

conn.prepareStatement(sql);

pstmt.setInt(1,

id);//給sql語句里的id賦值

pstmt.executeUpdate();

System.out.println("刪除成功!刪除了id值為"+id+"的數據");

} catch (SQLException e)

{

// TODO Auto-generated

catch block

e.printStackTrace();

}finally{

JDBC_Connection.free(null,

conn, pstmt);//關閉連接

}

}

public static void

main(String[] args) {

DeleteUser deleteUser =

new DeleteUser();

int id =

1;

UserVo userVo = new

UserVo();

QueryById queryById = new

QueryById();

userVo =

queryById.queryUserById(id);//調用根據id查詢的方法查詢出id=2的數據

if (userVo != null)

{//如果查詢出的數據不為空,則執行刪除方法

deleteUser.deleteUser(id);

}else

{

System.out.println("刪除失敗!原因:id為"+id+"的數據不存在!");//數據為空則打印刪除失敗信息

}

}

總結

以上是生活随笔為你收集整理的stmt在java中的应用_JDBC技术基础总结转载,非原创的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。