国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - JDBC簡介_動力節點Java學院整理

JDBC簡介_動力節點Java學院整理

2020-12-04 09:11wuyue Java教程

什么是JDBC?這篇文章就為大家詳細介紹了Java語言中用來規范客戶端程序如何來訪問數據庫的應用程序接口,具有一定的參考價值,感興趣的小伙伴們可以參考一下

前言:什么是jdbc

維基百科的簡介:

  java 數據庫連接,(java database connectivity,簡稱jdbc)是java語言中用來規范客戶端程序如何來訪問數據庫的應用程序接口,提供了諸如查詢和更新數據庫中數據的方法。jdbc也是sun microsystems的商標。它jdbc是面向關系型數據庫的。

  簡單地說,就是用于執行sql語句的一類java api,通過jdbc使得我們可以直接使用java編程來對關系數據庫進行操作。通過封裝,可以使開發人員使用純java api完成sql的執行。 

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

下圖是我接下來用于演示的數據庫的表。

JDBC簡介_動力節點Java學院整理

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

  使用jdbc需要在工程中導入對應的jar包。在eclipse下的導入方法:
  在工程的圖標上右擊,選擇”properties”,在”java bulid path”中選擇”add external jars…”,選擇下載并解壓后獲得的jar包。

JDBC簡介_動力節點Java學院整理        

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

 
?
1
 
2
import com.mysql.jdbc.connection;
import com.mysql.jdbc.preparedstatement;

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

 
?
1
 
2
3
import java.sql.drivermanager;
import java.sql.resultset;
import java.sql.sqlexception;

三、jdbc基本操作

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

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

  下面的所有方法和數據成員都在public class jdbcoperation內部。

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

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

 

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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)連接的獲取

在操作前必須先獲取與數據庫的連接。

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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,加載對應驅動
  conn = (connection) drivermanager.getconnection(url, username, password);
 } catch (classnotfoundexception e) {
  e.printstacktrace();
 } catch (sqlexception e) {
  e.printstacktrace();
 }
 return conn;
}

(3)insert

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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為例。

 

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;
}

四、測試

在測試前,需要在系統中打開對應數據庫的服務。mysql在windows下的啟動命令為net start mysql

測試代碼

 
?
1
 
2
3
4
5
6
7
8
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   
============================

五、代碼分析

在上述對數據庫進行增刪改查的過程中,可以發現其共性部分,即通用的流程:

  (1)創建connection對象、sql查詢命令字符串;
  (2)對connection對象傳入sql查詢命令,獲得preparedstatement對象;
  (3)對preparedstatement對象執行executeupdate()或executequrey()獲得結果;
  (4)先后關閉preparedstatement對象和connection對象。

可見,使用jdbc時,最常打交道的是connection、preparedstatement這兩個類,以及select中的resultset類。查閱java api手冊可以了解其具體的意義和方法。

wrapper

java.sql 

接口 connection
所有超級接口:
wrapper

public interface connectionextends wrapper

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

preparedstatemnt

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

statement, wrapper

所有已知子接口:

callablestatement

public interface preparedstatementextends statement
表示預編譯的 sql 語句的對象。
sql 語句被預編譯并存儲在 preparedstatement 對象中。然后可以使用此對象多次高效地執行該語句。 

常用方法

boolean  execute()
          在此 preparedstatement 對象中執行 sql 語句,該語句可以是任何種類的 sql 語句。
 resultset  executequery()
          在此 preparedstatement 對象中執行 sql 查詢,并返回該查詢生成的 resultset 對象。
 int  executeupdate()
          在此 preparedstatement 對象中執行 sql 語句,該語句必須是一個 sql 數據操作語言(data manipulation language,dml)語句,比如 insert、update 或 delete 語句;或者是無返回內容的 sql 語句,比如 ddl 語句。

resultset

java.sql 
接口 resultset
所有超級接口:
wrapper
所有已知子接口:
cachedrowset, filteredrowset, jdbcrowset, joinrowset, rowset, syncresolver, webrowset

public interface resultsetextends wrapper

表示數據庫結果集的數據表,通常通過執行查詢數據庫的語句生成。  

六、思考問題

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久影院免费观看 | 搞黄网站 | 午夜视频网站 | 日韩欧美一二三 | 色噜噜狠狠狠综合曰曰曰 | 国产精品免费视频观看 | 久久中文字幕视频 | 久久久久久久久久久久久久免费看 | 久久中文字幕一区二区三区 | 久久久精品国产亚洲 | 中文字幕av一区二区三区 | 欧美成视频 | 免费观看爱爱视频 | 一区二区高清 | 午夜视频在线观看网站 | the蜜臀av入口 | 亚洲欧美成人综合 | 日穴视频在线观看 | 91精品在线看 | 国产一区二区三区在线观看免费 | 性色国产| 免费看a | 91av国产精品 | 精品一区二区三区免费毛片 | 美女视频一区 | av网址aaa| 久久精品国产99国产精品 | 欧美一区二区三区在线观看视频 | 国产精品亚洲成在人线 | 日韩在线中文字幕 | 亚洲精品无 | 福利视频在线 | 成人在线一区二区 | 日韩精品在线视频 | 转生成为史莱姆这档事第四季在线观看 | 天堂av一区 | 爱操在线 | 一本色道精品久久一区二区三区 | 国产精品国产三级国产aⅴ中文 | 亚洲国产精品一区二区久久 | 91精品国产综合久久久久久丝袜 |