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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

JDBC操作步骤及数据库连接操作

發(fā)布時間:2025/3/19 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDBC操作步骤及数据库连接操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標準>>>

一、JDBC操作步驟

1.加載數(shù)據(jù)庫驅(qū)動程序:各個數(shù)據(jù)庫都會提供JDBC的驅(qū)動程序開發(fā)包,直接把JDBC操作所需要的開發(fā)包(一般為*.jar或*.zip)直接配置到classpath路徑即可。

2.連接數(shù)據(jù)庫:根據(jù)各個數(shù)據(jù)庫的不同連接的地址也不同,此連接地址將由數(shù)據(jù)庫廠商提供,一般在使用JDBC連接數(shù)據(jù)庫的時候都要求用戶輸入數(shù)據(jù)庫連接的用戶名和密碼,用戶在取得連接之后才可以對數(shù)據(jù)庫進行查詢或更新的操作。

3.使用語句進行數(shù)據(jù)庫操作:數(shù)據(jù)庫操作分為更新和查詢兩種操作,除了可以使用標準的SQL語句之外,對于各個數(shù)據(jù)庫也可以使用其自己提供的各種命令。

4.關閉數(shù)據(jù)庫連接:數(shù)據(jù)庫操作完畢之后需要關閉連接以釋放資源。

?

二、配置數(shù)據(jù)庫的驅(qū)動程序

1.下載驅(qū)動:http://www.mysql.com/downloads/connector/j/

2.配置環(huán)境變量:在classpath中添加驅(qū)動路徑(例如我的路徑是D:\mysql-connector-java-5.1.21-bin.jar;);

?

三、加載驅(qū)動

?

[java]?view plain?copy

  • public?class?connector?{??
  • ????public?static?final?String?DBDRIVER?=?"org.gjt.mm.mysql.Driver";???//定義MySQL數(shù)據(jù)庫驅(qū)動程序??
  • ????public?static?void?main(String[]?args)?{??
  • ????????try?{??
  • ????????????Class.forName(DBDRIVER);?//加載驅(qū)動程序??
  • ????????}?catch?(ClassNotFoundException?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????}??
  • }??

  • 四、連接及關閉數(shù)據(jù)庫

    ?

    1.使用DriverManager類進行連接操作,DriverManager類的常用方法:

    ? ? ? ?(1)通過連接地址連接數(shù)據(jù)庫

    ? ? ? ? ? ? ? ? public static Connection getConnection(String url) throws SQLException

    ? ? ? ?(2)通過連接地址連接數(shù)據(jù)庫同時輸入用戶名和密碼

    ? ? ? ? ? ? ? ? public static Connection getConnection(String url, String user, String password) throws SQLException

    2.DriverManager說明:

    (1)在DriverManager中,提供的主要操作是得到一個數(shù)據(jù)庫的連接,getConnection()方法就是取得連接對象,此方法返回的類型是Connection對象,不管使用那種方式連接,都必須提供一個數(shù)據(jù)庫的連接地址,如果在連接數(shù)據(jù)庫的時候需要用戶名和密碼,則還需要將用戶名和密碼設置上。MySQL數(shù)據(jù)庫的連接地址格式如下:jdbc:mysql://IP地址:端口號/數(shù)據(jù)庫名稱

    (2)數(shù)據(jù)庫連接地址的形式由三部分組成:

    ? ? ? ?a.jdbc協(xié)議:JDBC URL中的協(xié)議總是jdbc;

    ? ? ? ?b.子協(xié)議:驅(qū)動程序名和數(shù)據(jù)庫連接機制(這種機制可由一個或多個驅(qū)動程序支持)的名稱,例如:mysql;

    ? ? ? ?c.子名稱:一種標識數(shù)據(jù)庫的方法。必須遵循"/主機名:端口/子協(xié)議"的標準URL命名約定,例如://localhost:3306/Joywy.

    3.Connection

    通過DriverManager取得Connection對象之后,實際上就表示數(shù)據(jù)庫連接上了,連接上數(shù)據(jù)庫之后就可以進行數(shù)據(jù)庫的更新及查詢操作,但是操作的最后數(shù)據(jù)庫的連接必須關閉。

    連接數(shù)據(jù)庫代碼如下:

    ?

    [java]?view plain?copy

  • import?java.sql.Connection;??
  • import?java.sql.DriverManager;??
  • import?java.sql.SQLException;??
  • ??
  • public?class?ConnectionDemo{??
  • ????//定義MySQL驅(qū)動程序??
  • ????public?static?final?String?DBDRIVER?=?"org.gjt.mm.mysql.Driver";??
  • ????//定義MySQL數(shù)據(jù)庫的連接地址??
  • ????public?static?final?String?DBURL?=?"jdbc:mysql://localhost:3306/xiaowei";??
  • ????//MySQL數(shù)據(jù)庫的連接用戶名??
  • ????public?static?final?String?DBUSER?=?"root";??
  • ????//MySQL數(shù)據(jù)庫的連接密碼??
  • ????public?static?final?String?DBPASS?=?"android";??
  • ????public?static?void?main(String[]?args){??
  • ????????//數(shù)據(jù)庫連接??
  • ????????Connection?con?=?null;??
  • ????????try{??
  • ????????????//加載驅(qū)動??
  • ????????????Class.forName(DBDRIVER);??
  • ????????}catch(ClassNotFoundException?e){??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????try{??
  • ????????????con?=?DriverManager.getConnection(DBURL,?DBUSER,?DBPASS);??
  • ????????}catch(SQLException?e){??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????System.out.println(con);??
  • ????????try{??
  • ????????????//數(shù)據(jù)庫關閉??
  • ????????????con.close();??
  • ????????}catch(SQLException?e){??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????}??
  • }??

  • 五、數(shù)據(jù)庫操作

    ?

    1.Statement接口

    此接口通過使用Connection接口中的createStatement()方法實例化,此接口定義了一下方法:

    ?

    No.

    方法

    類型

    描述

    1

    Int?executeUpdate(String?sql)throws?SQLException

    普通

    執(zhí)行數(shù)據(jù)庫更新的SQL語句,例如:INSERT、UPDATE、DELETE等語句,返回更新的記錄數(shù)

    2

    ResultSet?executeQuery(String?sql)throws?SQLException

    普通

    執(zhí)行數(shù)據(jù)庫查詢操作,返回一個結(jié)果集對象

    3

    void?addBatch(String?sql)throws?SQLException

    普通

    增加一個待執(zhí)行的SQL語句

    4

    int[]?executeBatch()throws?SQLException

    普通

    批量執(zhí)行SQL語句

    5

    void?close()throws?SQLException

    普通

    關閉Statement操作

    6

    Boolean?execute(String?sql)throws?SQLException

    普通

    執(zhí)行SQL語句

    2.ResultSet接口

    ?

    使用SQL中的SELECT語句可以將數(shù)據(jù)庫的全部結(jié)果查詢出來,在JDBC的操作中數(shù)據(jù)庫的所有查詢記錄將使用ResultSet進行接收,并使用ResultSet顯示內(nèi)容。

    3.PreparedStatement接口

    PreparedStatement接口是Statement的子接口,屬于預處理操作,與直接使用Statement不同的是,PreparedStatement在操作時,是先在數(shù)據(jù)表之中準備好一條SQL語句,但是此SQL語句的具體內(nèi)容暫時不設置,而是之后再進行設置,以插入數(shù)據(jù)為例,使用PreparedStatement插入數(shù)據(jù)時,數(shù)據(jù)表中的指針首先指向最后一條數(shù)據(jù)之后,但是里面的內(nèi)容是不知道的,而是等待用戶分別設置的。

    注意:設置日期格式的問題,在PreparedStatement中定義了setData(),此方法可以設置日期內(nèi)容,但是此方法使用時,后面的Data類型變量是java.sql.Data,而不是java.util.Data,所以如果要想將一個java.util.Data類型的內(nèi)容變?yōu)閖ava.sql.Date類型的內(nèi)容應該使用如下的語句形式:

    ?

    [java]?view plain?copy

  • ??????????????String?birthday?=?"2007-08-27"????????//生日??
  • java.util.Date?temp?=?null;?????????//聲明一個Date對象??
  • //通過SimpleDataFormat類將一個字符串變?yōu)閖ava.util.Date類型??
  • temp?=?new?SimpleDataFormat("yyyy-MM-dd").parse(birthday);??
  • //通過java.util.Data取出具體的日期數(shù),并將其變?yōu)閖ava.sql.Data類型??
  • java.sql.Data?bir?=?new?java.sql.Data(temp.getTime());??

  • ?

    ?

    代碼如下:

    DBHelper.java

    ?

    [java]?view plain?copy

  • import?java.sql.Connection;??
  • import?java.sql.DriverManager;??
  • import?java.sql.PreparedStatement;??
  • import?java.sql.ResultSet;??
  • import?java.sql.SQLException;??
  • import?java.util.ArrayList;??
  • import?java.util.List;??
  • ??
  • ??
  • public?class?DBHelper?{??
  • ????public?static?final?String?DBDRIVER?=?"com.mysql.jdbc.Driver";??
  • ????public?static?final?String?DBURL?=?"jdbc:mysql://localhost:3306/test";??
  • ????public?static?final?String?DBUSER?=?"root";??
  • ????public?static?final?String?DBPASS?=?"1111";??
  • ??????
  • ????public?static?Connection?getConnection(){??
  • ????????Connection?conn?=?null;??
  • ????????try?{??
  • ????????????Class.forName(DBDRIVER);??
  • ????????????conn?=?DriverManager.getConnection(DBURL,?DBUSER,?DBPASS);??
  • ????????}?catch?(Exception?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????return?conn;??
  • ????}???
  • ??????
  • ????public?static?void?save(){??
  • ????????Connection?con?=?getConnection();??
  • ????????String?sql?=?"insert?into?Info?values(?,??,??)";??
  • ????????PreparedStatement?psmt?=?null;??
  • ????????try?{??
  • ????????????psmt?=?con.prepareStatement(sql);??
  • ????????????psmt.setString(1,?"123");??
  • ????????????psmt.setString(2,?"12");??
  • ????????????psmt.setInt(3,?3);??
  • ????????????int?count?=?psmt.executeUpdate();??
  • ????????}?catch?(Exception?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}finally{??
  • ????????????if(psmt?!=?null){??
  • ????????????????try?{??
  • ????????????????????psmt.close();??
  • ????????????????}?catch?(SQLException?e)?{??
  • ????????????????????e.printStackTrace();??
  • ????????????????}??
  • ????????????}??
  • ????????????if(con?!=?null){??
  • ????????????????try?{??
  • ????????????????????con.close();??
  • ????????????????}?catch?(SQLException?e)?{??
  • ????????????????????e.printStackTrace();??
  • ????????????????}??
  • ????????????}??
  • ????????}??
  • ????}??
  • ??????
  • ????public?static?void?delete(){??
  • ????????Connection?con?=?getConnection();??
  • ????????String?sql?=?"delete?from?Info?where?id=?";??
  • ????????PreparedStatement?psmt?=?null;??
  • ????????try?{??
  • ????????????psmt?=?con.prepareStatement(sql);??
  • ????????????psmt.setString(1,?"10330070");??
  • ????????????int?count?=?psmt.executeUpdate();??
  • ????????}?catch?(Exception?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}finally{??
  • ????????????if(psmt?!=?null){??
  • ????????????????try?{??
  • ????????????????????psmt.close();??
  • ????????????????}?catch?(SQLException?e)?{??
  • ????????????????????//?TODO?Auto-generated?catch?block??
  • ????????????????????e.printStackTrace();??
  • ????????????????}??
  • ????????????}??
  • ????????????if(con?!=?null){??
  • ????????????????try?{??
  • ????????????????????con.close();??
  • ????????????????}?catch?(SQLException?e)?{??
  • ????????????????????//?TODO?Auto-generated?catch?block??
  • ????????????????????e.printStackTrace();??
  • ????????????????}??
  • ????????????}??
  • ????????}??
  • ????}??
  • ??????
  • ????public?static?void?update(){??
  • ????????Connection?con?=?getConnection();??
  • ????????String?sql?=?"update?Info?set?age?=???where?id?=??";??
  • ????????PreparedStatement?psmt?=?null;??
  • ????????try?{??
  • ????????????psmt?=?con.prepareStatement(sql);??
  • ????????????psmt.setInt(1,?22);??
  • ????????????psmt.setString(2,?"111313");??
  • ????????????int?count?=?psmt.executeUpdate();??
  • ????????}?catch?(Exception?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}finally{??
  • ????????????if(psmt?!=?null){??
  • ????????????????try?{??
  • ????????????????????psmt.close();??
  • ????????????????}?catch?(SQLException?e)?{??
  • ????????????????????e.printStackTrace();??
  • ????????????????}??
  • ????????????}??
  • ????????????if(con?!=?null){??
  • ????????????????try?{??
  • ????????????????????con.close();??
  • ????????????????}?catch?(SQLException?e)?{??
  • ????????????????????e.printStackTrace();??
  • ????????????????}??
  • ????????????}??
  • ????????}??
  • ????}??
  • ??????
  • ????public?static?List<Info>?query(){??
  • ????????List<Info>?list?=?new?ArrayList<Info>();??
  • ????????Connection?con?=?getConnection();??
  • ????????String?sql?=?"select?*?from?Info";??
  • ????????PreparedStatement?psmt?=?null;??
  • ????????ResultSet?rs?=?null;??
  • ??????????
  • ????????try?{??
  • ????????????psmt?=?con.prepareStatement(sql);??
  • ????????????rs?=?psmt.executeQuery();??
  • ??????????????
  • ????????????while(rs.next()){????//依次取出數(shù)據(jù)??
  • ????????????????Info?info?=?new?Info();??
  • ????????????????info.setId(rs.getString("id"));??
  • ????????????????info.setPass(rs.getString("pass"));??
  • ????????????????info.setAge(rs.getInt("age"));??
  • ????????????????System.out.println(info.getId()?+"\t"?+?info.getPass()?+?"\t"?+?info.getAge());??
  • ????????????????list.add(info);??
  • ????????????}??
  • ????????}?catch?(Exception?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}finally{??
  • ????????????if(rs?!=?null){??
  • ????????????????try?{??
  • ????????????????????rs.close();??
  • ????????????????}?catch?(SQLException?e)?{??
  • ????????????????????e.printStackTrace();??
  • ????????????????}??
  • ????????????}??
  • ????????????if(psmt?!=?null){??
  • ????????????????try?{??
  • ????????????????????psmt.close();??
  • ????????????????}?catch?(SQLException?e)?{??
  • ????????????????????e.printStackTrace();??
  • ????????????????}??
  • ????????????}??
  • ????????????if(con?!=?null){??
  • ????????????????try?{??
  • ????????????????????con.close();??
  • ????????????????}?catch?(SQLException?e)?{??
  • ????????????????????e.printStackTrace();??
  • ????????????????}??
  • ????????????}??
  • ????????}??
  • ????????return?list;??
  • ????}??
  • ??????
  • ????public?static?void?main(String[]?args){??
  • ????????System.out.println(query().get(0).getAge());??
  • ??????????
  • ????}??
  • }??

  • Info.java

    ?

    ?

    [java]?view plain?copy

  • public?class?Info?{??
  • ????private?String?id;??
  • ????private?String?pass;??
  • ????private?int?age;??
  • ????public?String?getId()?{??
  • ????????return?id;??
  • ????}??
  • ????public?void?setId(String?id)?{??
  • ????????this.id?=?id;??
  • ????}??
  • ????public?String?getPass()?{??
  • ????????return?pass;??
  • ????}??
  • ????public?void?setPass(String?pass)?{??
  • ????????this.pass?=?pass;??
  • ????}??
  • ????public?int?getAge()?{??
  • ????????return?age;??
  • ????}??
  • ????public?void?setAge(int?age)?{??
  • ????????this.age?=?age;??
  • ????}??
  • }??
  • 注:

    ?

    (1)一般來說,我會習慣使用PreparedStatement對數(shù)據(jù)庫進行操作。PreparedStatement是預編譯方式的,在執(zhí)行SQL語句的時候效率就要高一些,還有就是PreparedStatement可以更好地避免SQL注入問題;在拼接sql語句時,采用PreparedStatement可以有效地減少出錯的幾率;PreparedStatement是Statement的一個子類,理所當然地PreparedStatement對Statement有一定的擴展,在性能方面有一定的提高。

    (2)在開發(fā)中是不能直接使用"SELECT * FROM user",因為這樣在查詢的時候并不能明確的表示要取的內(nèi)容是什么,所以開發(fā)中查詢時肯定要明確地寫出需要查找的列。

    轉(zhuǎn)載于:https://my.oschina.net/u/3787897/blog/1628403

    總結(jié)

    以上是生活随笔為你收集整理的JDBC操作步骤及数据库连接操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。