欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java如何創(chuàng)建一個(gè)jdbc程序詳解

 更新時(shí)間:2017年11月04日 17:15:57   作者:YJLAugus  
使用Java程序來操作數(shù)據(jù)庫,后者更加直接的話就是使用Java程序來發(fā)送SQL語句的技術(shù)稱之為:JDBC。下面這篇文章主要給大家介紹了關(guān)于利用java如何創(chuàng)建一個(gè)jdbc程序的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。

JDBC簡介

  • Java數(shù)據(jù)庫連接(Java Database Connectivity,JDBC),是一種用于執(zhí)行SQL語句的Java API,它由一組用Java編程語言編寫的類和接口組成。
  • JDBC為數(shù)據(jù)庫開發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的API,使他們能夠用純Java API來編寫數(shù)據(jù)庫應(yīng)用程序。
  • 使用JDBC編寫的程序能夠自動(dòng)地將SQL語句傳送給相應(yīng)的數(shù)據(jù)庫管理系統(tǒng)。
  • JDBC擴(kuò)展了Java的功能,由于Java語言本身的特點(diǎn),使得JDBC具有簡單、健壯、安全、可移植、獲取方便等優(yōu)勢。

我們在沒有JDBC之前,使用驅(qū)動(dòng)程序在Java程序與MySQL、Oracle、SQLServer等數(shù)據(jù)庫之間建立連接,驅(qū)動(dòng)程序就是在該課程中將要學(xué)到的內(nèi)容。那么就存在一個(gè)問題:在同一個(gè)Java程序與數(shù)據(jù)庫之間建立連接時(shí),驅(qū)動(dòng)程序是否是共用的呢?如果一樣,很顯然就能節(jié)省代碼量,但是實(shí)際上是不一樣的。一定要注意是不一樣的。那么就存在一個(gè)問題:當(dāng)?shù)讓訑?shù)據(jù)庫發(fā)生改變之后,數(shù)據(jù)庫的驅(qū)動(dòng)程序也會(huì)隨之發(fā)生變化,那么該怎么解決該問題呢?于是JDBC出現(xiàn)了,目的是為了減輕開發(fā)人員的工作量,以提高代碼的復(fù)用。

JDBC API

接口/類 功能說明
DriverManager 數(shù)據(jù)庫驅(qū)動(dòng)管理類,用于加載和卸載各種驅(qū)動(dòng)程序,并建立于數(shù)據(jù)庫的連接
Connection 此接口用于連接數(shù)據(jù)庫
Statement 此接口用于執(zhí)行SQL語句并將數(shù)據(jù)檢索到ResultSet中
ResultSet 結(jié)果集接口,提供檢索SQL語句返回?cái)?shù)據(jù)的各種方法
PreparedStatement 此接口用于執(zhí)行預(yù)編譯的SQL語句
CallableStatement 此接口用于執(zhí)行SQL存儲(chǔ)過程的語句

JDBC結(jié)構(gòu)

1.JDBC API是Java開發(fā)工具包(JDK)的組成部份:

  • JDBC驅(qū)動(dòng)程序管理器
  • JDBC驅(qū)動(dòng)程序測試工具包
  • JDBC-ODBC橋

2.JDBC驅(qū)動(dòng)程序管理器是JDBC體系結(jié)構(gòu)的支柱,其主要作用是把Java應(yīng)用程序連接到正確的JDBC驅(qū)動(dòng)程序上。

3.JDBC驅(qū)動(dòng)程序測試工具包為JDBC驅(qū)動(dòng)程序的運(yùn)行提供一定的可信度,只有通過JDBC驅(qū)動(dòng)程序測試包的驅(qū)動(dòng)程序才被認(rèn)為是符合JDBC標(biāo)準(zhǔn)的。

4.JDBC-ODBC橋使ODBC驅(qū)動(dòng)程序可被用作JDBC驅(qū)動(dòng)程序。其目標(biāo)是為方便實(shí)現(xiàn)訪問某些不常見的DBMS,它的實(shí)現(xiàn)為JDBC的快速發(fā)展提供了一條途徑。

在開始之前,我們先來實(shí)現(xiàn)一個(gè)簡單的JDBC程序

步驟

     1,注冊驅(qū)動(dòng);(只需要注冊一次)

     2,建立連接;

     3,創(chuàng)建執(zhí)行的sql語句;

     4,執(zhí)行語句;

     5,處理執(zhí)行結(jié)果;

     6,釋放資源;

示例

package cn.ccnu; 
 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
 
import com.mysql.jdbc.Statement; 
 
public class Demo1 { 
 
  public static void main(String[] args) throws Exception { 
    test(); 
  } 
 
  public static void test() throws Exception { 
    //1,注冊驅(qū)動(dòng) 
//   DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 
//   System.getProperty("jdbc.driver", "con.mysql.jdbc.Driver"); 
    Class.forName("com.mysql.jdbc.Driver");//這三種注冊方式,推薦使用這種 
 
    //2,建立連接 
    //url格式 
    //JDBC:子協(xié)議:子名稱//主機(jī)名:端口/數(shù)據(jù)庫名稱 
    String url = "jdbc:mysql://localhost:3306/test";//如果是本機(jī),也可以將localhost:3306省掉 
    String user = "root"; 
    String password = "123456"; 
    Connection conn = (Connection)DriverManager.getConnection(url, user, password); 
 
    //3,創(chuàng)建slq執(zhí)行語句 
    Statement st = (Statement) conn.createStatement(); 
 
    //4,執(zhí)行語句 
    ResultSet rs = st.executeQuery("select * from a"); 
     
    //5,處理執(zhí)行結(jié)果 
    while (rs.next()) { 
      System.out.println(rs.getObject(1)); 
    } 
 
    //6,關(guān)閉連接,釋放資源 
    rs.close(); 
    st.close(); 
    conn.close(); 
  } 
 
} 

分析JDBC開發(fā)步驟

使用JDBC訪問數(shù)據(jù)庫的基本步驟一般如下:

  • 加載JDBC驅(qū)動(dòng)程序
  • 創(chuàng)建數(shù)據(jù)庫連接
  • 創(chuàng)建Statement對象
  • 執(zhí)行SQL語句
  • 處理返回結(jié)果
  • 關(guān)閉創(chuàng)建的對象

開發(fā)第一個(gè)JDBC程序

package com.wfu.ch09;

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

public class Test1 {
 public static void main(String[] args) {
 try {
  Class.forName("com.mysql.jdbc.Driver");//里面的名字一定不要寫錯(cuò),這個(gè)也是導(dǎo)入的
  //forName(String className) 返回與帶有給定字符串名的類或接口相關(guān)聯(lián)的 Class 對象。
  Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/k-user","root","123456");//試圖建立到給定數(shù)據(jù)庫 URL 的連接。
  Statement stmt=conn.createStatement(); //創(chuàng)建一個(gè) Statement 對象來將 SQL 語句發(fā)送到數(shù)據(jù)庫。

//  String insertsql="insert into k_user(userno,username,pwd) values('1002','張三','123')";
//  int x=stmt.executeUpdate(insertsql); //executeUpdate 返回一個(gè)int 型的數(shù)據(jù) 括號(hào)里面是一個(gè)字符串?dāng)?shù)據(jù)類型,詳細(xì)內(nèi)容看文檔

  //(1) 對于 SQL 數(shù)據(jù)操作語言 (DML) 語句,返回行計(jì)數(shù)
  //(2) 對于不返回任何內(nèi)容的 SQL 語句,返回 0

//  if(x>0){
//  System.out.println("插入成功!");
//  }
//  String updateSql="update k_user set pwd='123456' where userno='1002'";
//  int x=stmt.executeUpdate(updateSql);
//  if(x>0){
//  System.out.println("更新成功!");
//  }
  String deleteSql="delete from k_user where userno='1002'";
  int x=stmt.executeUpdate(deleteSql);
  if(x>0){
  System.out.println("刪除成功!");
  }
  String sql="select * from k_user";
  ResultSet rs=stmt.executeQuery(sql);
  while(rs.next()){
  for(int i=1;i<=13;i++){
   System.out.print(rs.getString(i)+" ");
  }
  System.out.println();
  }
  rs.close();
  stmt.close();
  conn.close();
 } catch (ClassNotFoundException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (SQLException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }  
 }
}
package com.wfu.ch09;

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

public class Test2 {
 public static void main(String[] args) {
 try {
  // step1:加載JDBC驅(qū)動(dòng)程序
  Class.forName("com.mysql.jdbc.Driver");
  // step2:建立數(shù)據(jù)庫的連接
  Connection conn = DriverManager.getConnection(
   "jdbc:mysql://localhost:3306/stock11", "root", "123");
//  // step3:創(chuàng)建Statement對象
  Statement st = conn.createStatement();
  //step4:執(zhí)行SQL語句
  String selectSql="select * from k_user";
  //step5:處理結(jié)果集
  ResultSet rs=st.executeQuery(selectSql);
  while(rs.next()){
  for(int i=1;i<=13;i++){
   System.out.print(rs.getString(i)+" ");
  }
  System.out.println();
//  String x=rs.getString("hometown");
//  System.out.println(x);
  }
  //step6:關(guān)閉創(chuàng)建的對象
  //關(guān)閉結(jié)果集
  rs.close();
  //關(guān)閉statement對象
  st.close();
  //關(guān)閉連接
  conn.close();


  // step4: 執(zhí)行SQL語句
////  String insertSql = "insert into k_user(userno,username,pwd) values('1001','tom','123')";
//  int x = st.executeUpdate(insertSql);
//  if(x>0){
//  System.out.println("插入成功!");
//  }
//  String updateSql="update k_user set pwd='123456' where userno='1001'";
//  int x=st.executeUpdate(updateSql);
//  if(x>0){
//  System.out.println("更新成功!");
//  }
//  String deleteSql="delete from k_user where userno='1001'";
//  int x=st.executeUpdate(deleteSql);
//  if(x>0){
//  System.out.println("刪除成功!");
//  }
  //

 } catch (ClassNotFoundException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (SQLException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 }

}

各個(gè)語句說明

加載JDBC驅(qū)動(dòng)程序

加載驅(qū)動(dòng)程序的方法:

Class.forName("DriverName")

其中DriverName是要加載的JDBC驅(qū)動(dòng)程序名稱。驅(qū)動(dòng)程序名稱根據(jù)數(shù)據(jù)庫廠商提供的JDBC驅(qū)動(dòng)程序的種類來確定。

加載MySQL數(shù)據(jù)庫驅(qū)動(dòng)程序的方法為:

Class.forName("com.mysql.jdbc.Driver");

加載Oracle數(shù)據(jù)庫驅(qū)動(dòng)程序的方法為:

創(chuàng)建數(shù)據(jù)庫連接-1

DriverManager類是JDBC的管理層,作用于用戶和驅(qū)動(dòng)程序之間,跟蹤可用的驅(qū)動(dòng)程序,并在數(shù)據(jù)庫和相應(yīng)驅(qū)動(dòng)程序之間建立連接。該類負(fù)責(zé)加載、注冊JDBC驅(qū)動(dòng)程序,管理應(yīng)用程序和已注冊的驅(qū)動(dòng)程序的連接。

DriverManager的常用方法:

方法名 功能說明
Static connection getConnection(String url, String user, String password) 用于建立到指定數(shù)據(jù)庫 URL 的連接。其中url為 提供了一種標(biāo)識(shí)數(shù)據(jù)庫位置的方法,user為用戶名,password為密碼
static Driver getDriver(String url) 用于返回能夠打開url所指定的數(shù)據(jù)庫的驅(qū)動(dòng)程序

使用DriverManager類的getConnection()創(chuàng)建一個(gè)數(shù)據(jù)庫連接:

Connection conn = DriverManager.getConnection(String url,String user,String password);

創(chuàng)建數(shù)據(jù)庫連接-2

URL提供了一種標(biāo)識(shí)數(shù)據(jù)庫位置的方法,可以使相應(yīng)的驅(qū)動(dòng)程序能夠識(shí)別該數(shù)據(jù)庫并與它建立連接。

JDBC URL由三個(gè)部分組成:

jdbc : < subprotocol> : < subname>

可以根據(jù)子協(xié)議的改變而變化。

是子協(xié)議,指數(shù)據(jù)庫連接的方式。

創(chuàng)建數(shù)據(jù)庫連接-3

對于MySQL驅(qū)動(dòng)的連結(jié)的URL是:

jdbc:mysql://serverName:port/instance
  • mysql為子協(xié)議名稱
  • serverName為MySQL數(shù)據(jù)庫服務(wù)器名稱,可以是一個(gè)域名,也可以是IP地址
  • port為MySQL數(shù)據(jù)庫的端口號(hào),默認(rèn)為3306
  • instance是數(shù)據(jù)庫的實(shí)例名

示例:

Connection conn = DriverManager.getConnection(
  "jdbc:mysql://localhost:3306/haier", "root", "123");

創(chuàng)建SQL 語句

創(chuàng)建完連接之后,可以通過此連接向目標(biāo)數(shù)據(jù)庫發(fā)送SQL語句。在發(fā)送SQL語句之前,須創(chuàng)建一個(gè)Statement類的對象,該對象負(fù)責(zé)將SQL語句發(fā)送給數(shù)據(jù)庫。如果SQL語句運(yùn)行后產(chǎn)生結(jié)果集,Statement對象會(huì)將結(jié)果集封裝成ResultSet對象并返回。

通過調(diào)用Connection接口的createStatement方法來創(chuàng)建Statement對象,如:

Statement smt = conn.createStatement();

執(zhí)行SQL語句

在Statement接口中有兩個(gè)非常重要的方法,分別是executeUpdate方法和executeQuery方法。使用executeUpdate方法可以執(zhí)行插入、修改和刪除等操作的SQL語句, executeUpdate方法的返回值是一個(gè)int類型數(shù)值,表示更新數(shù)據(jù)表的行數(shù)。使用 executeQuery方法可以執(zhí)行數(shù)據(jù)庫查詢操作的SQL語句,他的返回值是實(shí)現(xiàn)ResultSet接口的對象,在其中保存從數(shù)據(jù)庫中查詢出來的數(shù)據(jù)。

例如:

int row=stmt.executeUpdate(sql);

寫到這,對于sql命令的展開沒有進(jìn)行詳細(xì)的說明,在上面的例子中的代碼中有很多注釋,都有了詳細(xì)的說明,對于如何寫一個(gè)jdbc 程序也有了步驟說明,而且都是一個(gè)接著一個(gè)的,包括聲明的對象類型,還有一個(gè)注意的地方就是在最后關(guān)閉程序的時(shí)候,也是有順序的,對于有依賴關(guān)系的語句都是依次關(guān)閉的,在程序的代碼中也是有說明的。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • java 取模與取余的區(qū)別說明

    java 取模與取余的區(qū)別說明

    這篇文章主要介紹了java 取模與取余的區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • java IO流之轉(zhuǎn)換流的具體使用

    java IO流之轉(zhuǎn)換流的具體使用

    轉(zhuǎn)換流可以將一個(gè)字節(jié)流包裝成字符流,或者將一個(gè)字符流包裝成字節(jié)流,本文主要介紹了java IO流之轉(zhuǎn)換流的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Java中l(wèi)ock和tryLock及l(fā)ockInterruptibly的區(qū)別

    Java中l(wèi)ock和tryLock及l(fā)ockInterruptibly的區(qū)別

    這篇文章主要介紹了Java中l(wèi)ock和tryLock及l(fā)ockInterruptibly的區(qū)別,文章介紹詳細(xì),具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • java多線程實(shí)現(xiàn)取款小程序

    java多線程實(shí)現(xiàn)取款小程序

    這篇文章主要為大家詳細(xì)介紹了java多線程實(shí)現(xiàn)取款小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java 深入探究講解抽象工廠模式

    Java 深入探究講解抽象工廠模式

    當(dāng)系統(tǒng)所提供的工廠所需生產(chǎn)的具體產(chǎn)品并不是一個(gè)簡單的對象,而是多個(gè)位于不同產(chǎn)品等級結(jié)構(gòu)中屬于不同類型的具體產(chǎn)品時(shí)需要使用抽象工廠模式,抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態(tài)
    2022-04-04
  • mybatis的foreach標(biāo)簽語法報(bào)錯(cuò)的解決

    mybatis的foreach標(biāo)簽語法報(bào)錯(cuò)的解決

    這篇文章主要介紹了mybatis的foreach標(biāo)簽語法報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • @Autowired 自動(dòng)注入接口失敗的原因及解決

    @Autowired 自動(dòng)注入接口失敗的原因及解決

    這篇文章主要介紹了@Autowired 自動(dòng)注入接口失敗的原因及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java分布式基于RestTemplate的使用方法

    java分布式基于RestTemplate的使用方法

    這篇文章主要為大家介紹了java分布式基于RestTemplate的使用方法說明,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-02-02
  • SSH框架網(wǎng)上商城項(xiàng)目第4戰(zhàn)之EasyUI菜單的實(shí)現(xiàn)

    SSH框架網(wǎng)上商城項(xiàng)目第4戰(zhàn)之EasyUI菜單的實(shí)現(xiàn)

    SSH框架網(wǎng)上商城項(xiàng)目第4戰(zhàn)之EasyUI菜單的實(shí)現(xiàn),本文主要使用EasyUI技術(shù)簡單實(shí)現(xiàn)后臺(tái)菜單,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Java中JUC包(java.util.concurrent)下的常用子類

    Java中JUC包(java.util.concurrent)下的常用子類

    相信大家已經(jīng)對并發(fā)機(jī)制中出現(xiàn)的很多的常見知識(shí)點(diǎn)進(jìn)行了總結(jié),下面這篇文章主要給大家介紹了關(guān)于Java中JUC包(java.util.concurrent)下的常用子類的相關(guān)資料,文中通過圖文以及示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12

最新評論