最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JDBC簡介_動力節(jié)點Java學院整理

 更新時間:2017年07月20日 10:41:56   作者:wuyue  
什么是JDBC?這篇文章就為大家詳細介紹了Java語言中用來規(guī)范客戶端程序如何來訪問數(shù)據(jù)庫的應用程序接口,具有一定的參考價值,感興趣的小伙伴們可以參考一下

前言:什么是JDBC

維基百科的簡介:

  Java 數(shù)據(jù)庫連接,(Java Database Connectivity,簡稱JDBC)是Java語言中用來規(guī)范客戶端程序如何來訪問數(shù)據(jù)庫的應用程序接口,提供了諸如查詢和更新數(shù)據(jù)庫中數(shù)據(jù)的方法。JDBC也是Sun Microsystems的商標。它JDBC是面向關系型數(shù)據(jù)庫的。

  簡單地說,就是用于執(zhí)行SQL語句的一類Java API,通過JDBC使得我們可以直接使用Java編程來對關系數(shù)據(jù)庫進行操作。通過封裝,可以使開發(fā)人員使用純Java API完成SQL的執(zhí)行。 

一、準備工作(一):MySQL安裝配置和基礎學習

下圖是我接下來用于演示的數(shù)據(jù)庫的表。

二、準備工作(二):下載數(shù)據(jù)庫對應的jar包并導入

  使用JDBC需要在工程中導入對應的jar包。在Eclipse下的導入方法:
  在工程的圖標上右擊,選擇”Properties”,在”Java Bulid Path”中選擇”Add External JARs…”,選擇下載并解壓后獲得的jar包。

        

如果對MySQL進行操作,這時下面的import就不會報錯了:

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

除此以外,還需要JDBC的包,直接import即可。

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

三、JDBC基本操作

  為了簡單起見,與數(shù)據(jù)庫相關的操作、命令、參數(shù)都被硬編碼了。有興趣的讀者可以對這些進行探索,降低數(shù)據(jù)與操作的耦合性。

  先看具體代碼并實踐,本文第五部分對用到的API稍作了研究。

  下面的所有方法和數(shù)據(jù)成員都在public class JDBCOperation內(nèi)部。

(1)定義記錄的類(可選)

這樣做主要是為了便于操作和接口定義,是非必須的。

static class Student {
  private String Id;
  private String Name;
  private String Sex;
  private String Age;

  Student(String Name, String Sex, String Age) {
   this.Id = null; //default
   this.Name = Name;
   this.Sex = Sex;
   this.Age = Age;
  }

  public String getId() {
   return Id;
  }

  public void setId(String Id) {
   this.Id = Id;
  }

  public String getName() {
   return Name;
  }

  public void setName(String Name) {
   this.Name = Name;
  }

  public String getSex() {
   return Sex;
  }

  public void setSex(String Sex) {
   this.Sex = Sex;
  }

  public String getAge() {
   return Age;
  }

  public void setage(String Age) {
   this.Age = Age;
  }
}

(2)連接的獲取

在操作前必須先獲取與數(shù)據(jù)庫的連接。

private static Connection getConn() {
 String driver = "com.mysql.jdbc.Driver";
 String url = "jdbc:mysql://localhost:3306/samp_db";
 String username = "root";
 String password = "";
 Connection conn = null;
 try {
  Class.forName(driver); //classLoader,加載對應驅(qū)動
  conn = (Connection) DriverManager.getConnection(url, username, password);
 } catch (ClassNotFoundException e) {
  e.printStackTrace();
 } catch (SQLException e) {
  e.printStackTrace();
 }
 return conn;
}

(3)insert

private static int insert(Student student) {
 Connection conn = getConn();
 int i = 0;
 String sql = "insert into students (Name,Sex,Age) values(?,?,?)";
 PreparedStatement pstmt;
 try {
  pstmt = (PreparedStatement) conn.prepareStatement(sql);
  pstmt.setString(1, student.getName());
  pstmt.setString(2, student.getSex());
  pstmt.setString(3, student.getAge());
  i = pstmt.executeUpdate();
  pstmt.close();
  conn.close();
 } catch (SQLException e) {
  e.printStackTrace();
 }
 return i;
}

(4)update

private static int update(Student student) {
 Connection conn = getConn();
 int i = 0;
 String sql = "update students set Age='" + student.getAge() + "' where Name='" + student.getName() + "'";
 PreparedStatement pstmt;
 try {
  pstmt = (PreparedStatement) conn.prepareStatement(sql);
  i = pstmt.executeUpdate();
  System.out.println("resutl: " + i);
  pstmt.close();
  conn.close();
 } catch (SQLException e) {
  e.printStackTrace();
 }
 return i;
}

(5)select

以select * from XXX為例。

private static Integer getAll() {
 Connection conn = getConn();
 String sql = "select * from students";
 PreparedStatement pstmt;
 try {
  pstmt = (PreparedStatement)conn.prepareStatement(sql);
  ResultSet rs = pstmt.executeQuery();
  int col = rs.getMetaData().getColumnCount();
  System.out.println("============================");
  while (rs.next()) {
   for (int i = 1; i <= col; i++) {
    System.out.print(rs.getString(i) + "\t");
    if ((i == 2) && (rs.getString(i).length() < 8)) {
     System.out.print("\t");
    }
    }
   System.out.println("");
  }
   System.out.println("============================");
 } catch (SQLException e) {
  e.printStackTrace();
 }
 return null;
}

 (6)delete

private static int delete(String name) {
 Connection conn = getConn();
 int i = 0;
 String sql = "delete from students where Name='" + name + "'";
 PreparedStatement pstmt;
 try {
  pstmt = (PreparedStatement) conn.prepareStatement(sql);
  i = pstmt.executeUpdate();
  System.out.println("resutl: " + i);
  pstmt.close();
  conn.close();
 } catch (SQLException e) {
  e.printStackTrace();
 }
 return i;
}

四、測試

在測試前,需要在系統(tǒng)中打開對應數(shù)據(jù)庫的服務。MySQL在Windows下的啟動命令為net start mysql

測試代碼

public static void main(String args[]) {
 JDBCOperation.getAll();
 JDBCOperation.insert(new Student("Achilles", "Male", "14"));
 JDBCOperation.getAll();
 JDBCOperation.update(new Student("Bean", "", "7"));
 JDBCOperation.delete("Achilles");
 JDBCOperation.getAll();
}

Eclipse中的輸出

============================
1    Ender        male    8   
2    Bean        male    6   
3    Petra        fema    9   
4    Peter        male    9   
5    _Graff        male    40   
6    GOD        fema    255   
============================
============================
1    Ender        male    8   
2    Bean        male    6   
3    Petra        fema    9   
4    Peter        male    9   
5    _Graff        male    40   
6    GOD        fema    255   
7    Achilles    Male    14   
============================
resutl: 1
resutl: 1
============================
1    Ender        male    8   
2    Bean        male    7   
3    Petra        fema    9   
4    Peter        male    9   
5    _Graff        male    40   
6    GOD        fema    255   
============================

五、代碼分析

在上述對數(shù)據(jù)庫進行增刪改查的過程中,可以發(fā)現(xiàn)其共性部分,即通用的流程:

  (1)創(chuàng)建Connection對象、SQL查詢命令字符串;
  (2)對Connection對象傳入SQL查詢命令,獲得PreparedStatement對象;
  (3)對PreparedStatement對象執(zhí)行executeUpdate()或executeQurey()獲得結(jié)果;
  (4)先后關閉PreparedStatement對象和Connection對象。

可見,使用JDBC時,最常打交道的是Connection、PreparedStatement這兩個類,以及select中的ResultSet類。查閱Java API手冊可以了解其具體的意義和方法。

Wrapper

java.sql 

接口 Connection
所有超級接口:
Wrapper

public interface Connectionextends Wrapper 

與特定數(shù)據(jù)庫的連接(會話)。在連接上下文中執(zhí)行 SQL 語句并返回結(jié)果。
Connection 對象的數(shù)據(jù)庫能夠提供描述其表、所支持的 SQL 語法、存儲過程、此連接功能等等的信息。此信息是使用 getMetaData 方法獲得的。

PreparedStatemnt

java.sql 
接口 PreparedStatement
所有超級接口:

Statement, Wrapper

所有已知子接口:

CallableStatement

public interface PreparedStatementextends Statement
表示預編譯的 SQL 語句的對象。
SQL 語句被預編譯并存儲在 PreparedStatement 對象中。然后可以使用此對象多次高效地執(zhí)行該語句。 

常用方法

boolean  execute()
          在此 PreparedStatement 對象中執(zhí)行 SQL 語句,該語句可以是任何種類的 SQL 語句。
 ResultSet  executeQuery()
          在此 PreparedStatement 對象中執(zhí)行 SQL 查詢,并返回該查詢生成的 ResultSet 對象。
 int  executeUpdate()
          在此 PreparedStatement 對象中執(zhí)行 SQL 語句,該語句必須是一個 SQL 數(shù)據(jù)操作語言(Data Manipulation Language,DML)語句,比如 INSERT、UPDATE 或 DELETE 語句;或者是無返回內(nèi)容的 SQL 語句,比如 DDL 語句。

ResultSet

java.sql 
接口 ResultSet
所有超級接口:
Wrapper
所有已知子接口:
CachedRowSet, FilteredRowSet, JdbcRowSet, JoinRowSet, RowSet, SyncResolver, WebRowSet

public interface ResultSetextends Wrapper

表示數(shù)據(jù)庫結(jié)果集的數(shù)據(jù)表,通常通過執(zhí)行查詢數(shù)據(jù)庫的語句生成?! ?br />

六、思考問題

每次SQL操作都需要建立和關閉連接,這勢必會消耗大量的資源開銷,如何避免?
分析:可以采用連接池,對連接進行統(tǒng)一維護,不必每次都建立和關閉。事實上這是很多對JDBC進行封裝的工具所采用的。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java8 Instant 時間戳實例講解

    Java8 Instant 時間戳實例講解

    Instant類是Java8 中補充的一個 時間戳類,nstant 可以使用靜態(tài)方法 now()或者of()方法來創(chuàng)建一個實例對象,本文通過實例代碼講解Java8 Instant 時間戳,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • Mybatis常用分頁插件實現(xiàn)快速分頁處理技巧

    Mybatis常用分頁插件實現(xiàn)快速分頁處理技巧

    這篇文章主要介紹了Mybatis常用分頁插件實現(xiàn)快速分頁處理的方法。非常不錯具有參考借鑒價值,感興趣的朋友一起看看
    2016-10-10
  • IDEA2023 配置使用Docker的詳細教程

    IDEA2023 配置使用Docker的詳細教程

    這篇文章主要介紹了IDEA2023 配置使用Docker的詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • MyBatis sql中test如何判斷Boolean

    MyBatis sql中test如何判斷Boolean

    這篇文章主要介紹了MyBatis sql中test如何判斷Boolean,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • JAVA數(shù)據(jù)結(jié)構之漢諾塔代碼實例

    JAVA數(shù)據(jù)結(jié)構之漢諾塔代碼實例

    這篇文章主要介紹了JAVA數(shù)據(jù)結(jié)構之漢諾塔,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • 詳解Java中類與對象的關系

    詳解Java中類與對象的關系

    這篇文章主要介紹了詳解Java中類與對象的關系,類的關鍵字是class,在Java編程里,類的作用相當于機械師手中的構造圖,如果沒有構造圖,就無法打造武器,同樣如果沒有類,就無法實例化,需要的朋友可以參考下
    2023-05-05
  • 兩種java文件上傳實例講解

    兩種java文件上傳實例講解

    這篇文章主要為大家詳細介紹了兩種java文件上傳實例,一種是附件上傳,另一種是上傳簡歷功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • SpringBoot之導入靜態(tài)資源詳解

    SpringBoot之導入靜態(tài)資源詳解

    今天帶大家學習SpringBoot導入靜態(tài)資源的過程,文中介紹的非常詳細,對正在學習java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • java @Value(

    java @Value(

    這篇文章主要介紹了java @Value("${}")獲取不到配置文件中值的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Mybatis逆工程的使用

    Mybatis逆工程的使用

    最近在學Mybatis,類似Hibernate,Mybatis也有逆工程可以直接生成代碼(mapping,xml,pojo),方便快速開發(fā)。這篇文章給大家介紹Mybatis逆工程的使用相關知識,感興趣的朋友一起看下吧
    2016-06-06

最新評論

清远市| 休宁县| 巫溪县| 新平| 建平县| 新蔡县| 布尔津县| 铜鼓县| 皮山县| 宁远县| 会宁县| 东阳市| 芜湖县| 福安市| 江西省| 上饶县| 丰镇市| 车致| 湄潭县| 自贡市| 威远县| 南澳县| 张北县| 疏勒县| 九寨沟县| 永福县| 红河县| 明光市| 遵化市| 鹤壁市| 社旗县| 密云县| 河源市| 遵义县| 达拉特旗| 惠安县| 三原县| 普陀区| 湟源县| 清远市| 哈巴河县|