JDBC操做步驟及數據庫鏈接操做

1、JDBC操做步驟java

1.加載數據庫驅動程序:各個數據庫都會提供JDBC的驅動程序開發包,直接把JDBC操做所須要的開發包(通常爲*.jar或*.zip)直接配置到classpath路徑便可。mysql

2.鏈接數據庫:根據各個數據庫的不一樣鏈接的地址也不一樣,此鏈接地址將由數據庫廠商提供,通常在使用JDBC鏈接數據庫的時候都要求用戶輸入數據庫鏈接的用戶名和密碼,用戶在取得鏈接以後才能夠對數據庫進行查詢或更新的操做。android

3.使用語句進行數據庫操做:數據庫操做分爲更新和查詢兩種操做,除了可使用標準的SQL語句以外,對於各個數據庫也可使用其本身提供的各類命令。sql

4.關閉數據庫鏈接:數據庫操做完畢以後須要關閉鏈接以釋放資源。數據庫

 

2、配置數據庫的驅動程序app

1.下載驅動:http://www.mysql.com/downloads/connector/j/性能

2.配置環境變量:在classpath中添加驅動路徑(例如個人路徑是D:\mysql-connector-java-5.1.21-bin.jar;);this

 

3、加載驅動url

 

[java] view plain copyspa

  1. public class connector {  
  2.     public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";   //定義MySQL數據庫驅動程序  
  3.     public static void main(String[] args) {  
  4.         try {  
  5.             Class.forName(DBDRIVER); //加載驅動程序  
  6.         } catch (ClassNotFoundException e) {  
  7.             e.printStackTrace();  
  8.         }  
  9.     }  
  10. }  


4、鏈接及關閉數據庫

 

1.使用DriverManager類進行鏈接操做,DriverManager類的經常使用方法:

       (1)經過鏈接地址鏈接數據庫

                public static Connection getConnection(String url) throws SQLException

       (2)經過鏈接地址鏈接數據庫同時輸入用戶名和密碼

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

2.DriverManager說明:

(1)在DriverManager中,提供的主要操做是獲得一個數據庫的鏈接,getConnection()方法就是取得鏈接對象,此方法返回的類型是Connection對象,無論使用那種方式鏈接,都必須提供一個數據庫的鏈接地址,若是在鏈接數據庫的時候須要用戶名和密碼,則還須要將用戶名和密碼設置上。MySQL數據庫的鏈接地址格式以下:jdbc:mysql://IP地址:端口號/數據庫名稱

(2)數據庫鏈接地址的形式由三部分組成:

       a.jdbc協議:JDBC URL中的協議老是jdbc;

       b.子協議:驅動程序名和數據庫鏈接機制(這種機制可由一個或多個驅動程序支持)的名稱,例如:mysql;

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

3.Connection

經過DriverManager取得Connection對象以後,實際上就表示數據庫鏈接上了,鏈接上數據庫以後就能夠進行數據庫的更新及查詢操做,可是操做的最後數據庫的鏈接必須關閉。

鏈接數據庫代碼以下:

 

[java] view plain copy

  1. import java.sql.Connection;  
  2. import java.sql.DriverManager;  
  3. import java.sql.SQLException;  
  4.   
  5. public class ConnectionDemo{  
  6.     //定義MySQL驅動程序  
  7.     public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";  
  8.     //定義MySQL數據庫的鏈接地址  
  9.     public static final String DBURL = "jdbc:mysql://localhost:3306/xiaowei";  
  10.     //MySQL數據庫的鏈接用戶名  
  11.     public static final String DBUSER = "root";  
  12.     //MySQL數據庫的鏈接密碼  
  13.     public static final String DBPASS = "android";  
  14.     public static void main(String[] args){  
  15.         //數據庫鏈接  
  16.         Connection con = null;  
  17.         try{  
  18.             //加載驅動  
  19.             Class.forName(DBDRIVER);  
  20.         }catch(ClassNotFoundException e){  
  21.             e.printStackTrace();  
  22.         }  
  23.         try{  
  24.             con = DriverManager.getConnection(DBURL, DBUSER, DBPASS);  
  25.         }catch(SQLException e){  
  26.             e.printStackTrace();  
  27.         }  
  28.         System.out.println(con);  
  29.         try{  
  30.             //數據庫關閉  
  31.             con.close();  
  32.         }catch(SQLException e){  
  33.             e.printStackTrace();  
  34.         }  
  35.     }  
  36. }  


5、數據庫操做

 

1.Statement接口

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

 

No.

方法

類型

描述

1

Int executeUpdate(String sql)throws SQLException

普通

執行數據庫更新的SQL語句,例如:INSERT、UPDATE、DELETE等語句,返回更新的記錄數

2

ResultSet executeQuery(String sql)throws SQLException

普通

執行數據庫查詢操做,返回一個結果集對象

3

void addBatch(String sql)throws SQLException

普通

增長一個待執行的SQL語句

4

int[] executeBatch()throws SQLException

普通

批量執行SQL語句

5

void close()throws SQLException

普通

關閉Statement操做

6

Boolean execute(String sql)throws SQLException

普通

執行SQL語句

2.ResultSet接口

 

使用SQL中的SELECT語句能夠將數據庫的所有結果查詢出來,在JDBC的操做中數據庫的全部查詢記錄將使用ResultSet進行接收,並使用ResultSet顯示內容。

3.PreparedStatement接口

PreparedStatement接口是Statement的子接口,屬於預處理操做,與直接使用Statement不一樣的是,PreparedStatement在操做時,是先在數據表之中準備好一條SQL語句,可是此SQL語句的具體內容暫時不設置,而是以後再進行設置,以插入數據爲例,使用PreparedStatement插入數據時,數據表中的指針首先指向最後一條數據以後,可是裏面的內容是不知道的,而是等待用戶分別設置的。

注意:設置日期格式的問題,在PreparedStatement中定義了setData(),此方法能夠設置日期內容,可是此方法使用時,後面的Data類型變量是java.sql.Data,而不是java.util.Data,因此若是要想將一個java.util.Data類型的內容變爲java.sql.Date類型的內容應該使用以下的語句形式:

 

[java] view plain copy

  1.               String birthday = "2007-08-27"        //生日  
  2. java.util.Date temp = null;         //聲明一個Date對象  
  3. //經過SimpleDataFormat類將一個字符串變爲java.util.Date類型  
  4. temp = new SimpleDataFormat("yyyy-MM-dd").parse(birthday);  
  5. //經過java.util.Data取出具體的日期數,並將其變爲java.sql.Data類型  
  6. java.sql.Data bir = new java.sql.Data(temp.getTime());  


 

 

代碼以下:

DBHelper.java

 

[java] view plain copy

  1. import java.sql.Connection;  
  2. import java.sql.DriverManager;  
  3. import java.sql.PreparedStatement;  
  4. import java.sql.ResultSet;  
  5. import java.sql.SQLException;  
  6. import java.util.ArrayList;  
  7. import java.util.List;  
  8.   
  9.   
  10. public class DBHelper {  
  11.     public static final String DBDRIVER = "com.mysql.jdbc.Driver";  
  12.     public static final String DBURL = "jdbc:mysql://localhost:3306/test";  
  13.     public static final String DBUSER = "root";  
  14.     public static final String DBPASS = "1111";  
  15.       
  16.     public static Connection getConnection(){  
  17.         Connection conn = null;  
  18.         try {  
  19.             Class.forName(DBDRIVER);  
  20.             conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);  
  21.         } catch (Exception e) {  
  22.             e.printStackTrace();  
  23.         }  
  24.         return conn;  
  25.     }   
  26.       
  27.     public static void save(){  
  28.         Connection con = getConnection();  
  29.         String sql = "insert into Info values(?, ?, ?)";  
  30.         PreparedStatement psmt = null;  
  31.         try {  
  32.             psmt = con.prepareStatement(sql);  
  33.             psmt.setString(1, "123");  
  34.             psmt.setString(2, "12");  
  35.             psmt.setInt(3, 3);  
  36.             int count = psmt.executeUpdate();  
  37.         } catch (Exception e) {  
  38.             e.printStackTrace();  
  39.         }finally{  
  40.             if(psmt != null){  
  41.                 try {  
  42.                     psmt.close();  
  43.                 } catch (SQLException e) {  
  44.                     e.printStackTrace();  
  45.                 }  
  46.             }  
  47.             if(con != null){  
  48.                 try {  
  49.                     con.close();  
  50.                 } catch (SQLException e) {  
  51.                     e.printStackTrace();  
  52.                 }  
  53.             }  
  54.         }  
  55.     }  
  56.       
  57.     public static void delete(){  
  58.         Connection con = getConnection();  
  59.         String sql = "delete from Info where id=?";  
  60.         PreparedStatement psmt = null;  
  61.         try {  
  62.             psmt = con.prepareStatement(sql);  
  63.             psmt.setString(1, "10330070");  
  64.             int count = psmt.executeUpdate();  
  65.         } catch (Exception e) {  
  66.             e.printStackTrace();  
  67.         }finally{  
  68.             if(psmt != null){  
  69.                 try {  
  70.                     psmt.close();  
  71.                 } catch (SQLException e) {  
  72.                     // TODO Auto-generated catch block  
  73.                     e.printStackTrace();  
  74.                 }  
  75.             }  
  76.             if(con != null){  
  77.                 try {  
  78.                     con.close();  
  79.                 } catch (SQLException e) {  
  80.                     // TODO Auto-generated catch block  
  81.                     e.printStackTrace();  
  82.                 }  
  83.             }  
  84.         }  
  85.     }  
  86.       
  87.     public static void update(){  
  88.         Connection con = getConnection();  
  89.         String sql = "update Info set age = ? where id = ?";  
  90.         PreparedStatement psmt = null;  
  91.         try {  
  92.             psmt = con.prepareStatement(sql);  
  93.             psmt.setInt(1, 22);  
  94.             psmt.setString(2, "111313");  
  95.             int count = psmt.executeUpdate();  
  96.         } catch (Exception e) {  
  97.             e.printStackTrace();  
  98.         }finally{  
  99.             if(psmt != null){  
  100.                 try {  
  101.                     psmt.close();  
  102.                 } catch (SQLException e) {  
  103.                     e.printStackTrace();  
  104.                 }  
  105.             }  
  106.             if(con != null){  
  107.                 try {  
  108.                     con.close();  
  109.                 } catch (SQLException e) {  
  110.                     e.printStackTrace();  
  111.                 }  
  112.             }  
  113.         }  
  114.     }  
  115.       
  116.     public static List<Info> query(){  
  117.         List<Info> list = new ArrayList<Info>();  
  118.         Connection con = getConnection();  
  119.         String sql = "select * from Info";  
  120.         PreparedStatement psmt = null;  
  121.         ResultSet rs = null;  
  122.           
  123.         try {  
  124.             psmt = con.prepareStatement(sql);  
  125.             rs = psmt.executeQuery();  
  126.               
  127.             while(rs.next()){    //依次取出數據  
  128.                 Info info = new Info();  
  129.                 info.setId(rs.getString("id"));  
  130.                 info.setPass(rs.getString("pass"));  
  131.                 info.setAge(rs.getInt("age"));  
  132.                 System.out.println(info.getId() +"\t" + info.getPass() + "\t" + info.getAge());  
  133.                 list.add(info);  
  134.             }  
  135.         } catch (Exception e) {  
  136.             e.printStackTrace();  
  137.         }finally{  
  138.             if(rs != null){  
  139.                 try {  
  140.                     rs.close();  
  141.                 } catch (SQLException e) {  
  142.                     e.printStackTrace();  
  143.                 }  
  144.             }  
  145.             if(psmt != null){  
  146.                 try {  
  147.                     psmt.close();  
  148.                 } catch (SQLException e) {  
  149.                     e.printStackTrace();  
  150.                 }  
  151.             }  
  152.             if(con != null){  
  153.                 try {  
  154.                     con.close();  
  155.                 } catch (SQLException e) {  
  156.                     e.printStackTrace();  
  157.                 }  
  158.             }  
  159.         }  
  160.         return list;  
  161.     }  
  162.       
  163.     public static void main(String[] args){  
  164.         System.out.println(query().get(0).getAge());  
  165.           
  166.     }  
  167. }  


Info.java

 

 

[java] view plain copy

  1. public class Info {  
  2.     private String id;  
  3.     private String pass;  
  4.     private int age;  
  5.     public String getId() {  
  6.         return id;  
  7.     }  
  8.     public void setId(String id) {  
  9.         this.id = id;  
  10.     }  
  11.     public String getPass() {  
  12.         return pass;  
  13.     }  
  14.     public void setPass(String pass) {  
  15.         this.pass = pass;  
  16.     }  
  17.     public int getAge() {  
  18.         return age;  
  19.     }  
  20.     public void setAge(int age) {  
  21.         this.age = age;  
  22.     }  
  23. }  

注:

 

(1)通常來講,我會習慣使用PreparedStatement對數據庫進行操做。PreparedStatement是預編譯方式的,在執行SQL語句的時候效率就要高一些,還有就是PreparedStatement能夠更好地避免SQL注入問題;在拼接sql語句時,採用PreparedStatement能夠有效地減小出錯的概率;PreparedStatement是Statement的一個子類,理所固然地PreparedStatement對Statement有必定的擴展,在性能方面有必定的提升。

(2)在開發中是不能直接使用"SELECT * FROM user",由於這樣在查詢的時候並不能明確的表示要取的內容是什麼,因此開發中查詢時確定要明確地寫出須要查找的列。

相關文章
相關標籤/搜索