成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

JDBC連接數據庫的流程

是Sun 公司制定的一個可以用Java 語言連接數據庫的技術。一、JDBC 基礎知識JDBC (Java Data Base Connectivity,java數據庫連接)是一種用于執(zhí)行SQL 語句的

是Sun 公司制定的一個可以用Java 語言連接數據庫的技術。

一、JDBC 基礎知識

JDBC (Java Data Base Connectivity,java數據庫連接)是一種用于執(zhí)行SQL 語句的Java API ,可以為多種關系數據庫提供統(tǒng)一訪問,它由一組用Java 語言編寫的類和接口組成。JDBC 為數據庫開發(fā)人員提供了一個標準的API ,據此可以構建更高級的工具和接口,使數據庫開發(fā)人員能夠用純 Java API 編寫數據庫應用程序,并且可跨平臺運行,并且不受數據庫供應商的限制。

1、跨平臺運行:這是繼承了Java 語言的“一次編譯,到處運行”的特點;

2、不受數據庫供應商的限制:巧妙在于JDBC 設有兩種接口,一個是面向應用程序層,其作用是使得開發(fā)人員通過SQL 調用數據庫和處理結果,而不需要考慮數據庫的提供商;另一個是驅動程序層,處理與具體驅動程序的交互,JDBC 驅動程序可以利用JDBC API 創(chuàng)建Java 程序和數據源之間的橋梁。應用程序只需要編寫一次,便可以移到各種驅動程序上運行。Sun 提供了一個驅動管理器,數據庫供應商——如MySQL 、Oracle ,提供的驅動程序滿足驅動管理器的要求就可以被識別,就可以正常工作。所以JDBC 不受數據庫供應商的限制。

JDBC API可以作為連接Java 應用程序與各種關系數據庫的紐帶,在帶來方便的同時也有負面影響,以下是JDBC 的優(yōu)、缺點。優(yōu)點如下:

操作便捷:JDBC 使得開發(fā)人員不需要再使用復雜的驅動器調用命令和函數;

可移植性強:JDBC 支持不同的關系數據庫,所以可以使同一個應用程序支持多個數據庫的訪問,只要加載相應的驅動程序即可;

通用性好:JDBC-ODBC 橋接驅動器將JDBC 函數換成ODBC ;

面向對象:可以將常用的JDBC 數據庫連接封裝成一個類,在使用的時候直接調用即可。

缺點如下:

訪問數據記錄的速度受到一定程度的影響;

更改數據源困難:JDBC 可支持多種數據庫,各種數據庫之間的操作必有不同,這就給更改數據源帶來了很大的麻煩

二、JDBC 連接數據庫的流程及其原理

1、在開發(fā)環(huán)境中加載指定數據庫的驅動程序。例如,接下來的實驗中,使用的數據庫是Oracle ,所以需要去下載Oracle 支持JDBC 的驅動程序(其實這個地方并不需要去官網上下載jdbc 驅動,本地安裝的Oracle 中就有,是一個ojdbc14.jar 的文件) ;而開發(fā)環(huán)境是MyEclipse ,將下載得到的驅動程序加載進開發(fā)環(huán)境中(具體示例的時候會講解如何加載) 。

2、在Java 程序中加載驅動程序。在Java 程序中,可以通過 “Class.forName(“指定數據庫的驅動程序”) ” 方式來加載添加到開發(fā)環(huán)境中的驅動程序,例如加載Oracle 的數據驅動程序的代碼為: Class.forName(“oracle.jdbc.driver.OracleDriver ”)

1

,

3、創(chuàng)建數據連接對象:通過DriverManager 類創(chuàng)建數據庫連接對象Connection 。DriverManager 類作用于Java 程序和JDBC 驅動程序之間,用于檢查所加載的驅動程序是否可以建立連接,然后通過它的getConnection 方法,根據數據庫的URL 、用戶名和密碼,創(chuàng)建一個JDBC Connection 對象。如:Connection connection = DriverManager.geiConnection(“連接數據庫的URL", "用戶名", "密碼”) 。其中,URL=協(xié)議名 IP地址(域名) 端口 數據庫名稱;用戶名和密碼是指登錄數據庫時所使用的用戶名和密碼, 具體示例創(chuàng)建Oracle 的數據庫連接代碼如下: conn=DriverManager.getConnection(url, user, password);

4、創(chuàng)建Statement 對象:Statement 類的主要是用于執(zhí)行靜態(tài) SQL 語句并返回它所生成結果的對象。通過Connection 對象的 createStatement()方法可以創(chuàng)建一個Statement 對象。例如:Statement statament = connection.createStatement(); 具體示例創(chuàng)建Statement 對象代碼如下:

Statement statamentMySQL =connectMySQL.createStatement();

5、調用Statement 對象的相關方法執(zhí)行相對應的 SQL 語句:通過execuUpdate()方法用來數據的更新,包括插入和刪除等操作,例如向staff 表中插入一條數據的代碼:

statement.excuteUpdate( "INSERT INTO staff(name, age, sex,address, depart, worklen,wage)" " VALUES ('Tom1', 321, 'M', 'china','Personnel','3','3000' ) ") ;

通過調用Statement 對象的executeQuery()方法進行數據的查詢,而查詢結果會得到 ResulSet 對象,ResulSet 表示執(zhí)行查詢數據庫后返回的數據的集合,ResulSet 對象具有可以指向當前數據行的指針。通過該對象的next()方法,使得指針指向下一行,然后將數據以列號或者字段名取出。如果當next()方法返回null ,則表示下一行中沒有數據存在。使用示例代碼如下:

ResultSet resultSel = statement.executeQuery( "select * from staff" );

6、關閉數據庫連接:使用完數據庫或者不需要訪問數據庫時,通過Connection 的close() 方法及時關閉數據連接。

三、JDBC 應用示例實驗

實驗 步驟:

S1、下載ojdbc14.jar 驅動文件,并將該文件放到你的項目中去;

S2、在MyEclipse 中的項目中添加Oracle 驅動程序:在項目名上右鍵-> Build Path ->Add External Archiver 然后選擇你剛才放在項目中的文件, 點確定即可。

S3、打開Oracle 的各項服務,并在Oracle 中建一張表。

S4、編寫MyEclipse 與Oracle 的連接程序:

[cpp] view plaincopyprint?import java.sql.Connection; import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.Statement;

import java.sql.* ;

2

,

public class JDBC_Test {

//orcl為oracle 數據庫中的數據庫名,localhost 表示連接本機的oracle 數據庫 //1521為連接的端口號

private static String url="jdbc:oracle:thin:@localhost:1521:orcl";

//system為登陸oracle 數據庫的用戶名

private static String user="system";

//manager為用戶名system 的密碼

private static String password="manager";

public static Connection conn;

public static PreparedStatement ps;

public static ResultSet rs;

public static Statement st ;

//連接數據庫的方法

public void getConnection(){

try {

//初始化驅動包

Class.forName("oracle.jdbc.driver.OracleDriver");

//根據數據庫連接字符,名稱,密碼給conn 賦值

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

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

//測試能否與oracle 數據庫連接成功

public static void main(String[] args) {

JDBC_Test basedao=new JDBC_Test();

basedao.getConnection();

if(conn==null){

System.out.println("與oracle 數據庫連接失敗!");

}else{

System.out.println("與oracle 數據庫連接成功!");

}

}

}

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.Statement;

import java.sql.* ;

3

,

public class JDBC_Test {

//orcl為oracle 數據庫中的數據庫名,localhost 表示連接本機的oracle 數據庫 //1521為連接的端口號

private static String url="jdbc:oracle:thin:@localhost:1521:orcl";

//system為登陸oracle 數據庫的用戶名 private static String user="system"; //manager為用戶名system 的密碼 private static String password="manager"; public static Connection conn; public static PreparedStatement ps; public static ResultSet rs; public static Statement st ; //連接數據庫的方法 public void getConnection(){ try { //初始化驅動包 Class.forName("oracle.jdbc.driver.OracleDriver"); } //根據數據庫連接字符,名稱,密碼給conn 賦值 conn=DriverManager.getConnection(url, user, password); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } //測試能否與oracle 數據庫連接成功 public static void main(String[] args) { JDBC_Test basedao=new JDBC_Test(); basedao.getConnection(); if(conn==null){ System.out.println("與oracle 數據庫連接失?。?); }else{

System.out.println("與oracle 數據庫連接成功!");

}

}

}

S5、如果上述的連接已經建立,就可以利用JDBC 中的Java API 對數據庫進行操作了,具體的查詢,插入,刪除,更新操作如下:

[cpp] view plaincopyprint?代碼轉載自:http://blog.csdn.net/cxwen78/article/details/6863696

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

4

,

import java.sql.SQLException;

import java.sql.Statement;

public class JDBC_Test {

// 創(chuàng)建靜態(tài)全局變量

static Connection conn;

static Statement st;

public static void main(String[] args) {

insert(); //插入添加記錄

update(); //更新記錄數據

delete(); //刪除記錄

query(); //查詢記錄并顯示

}

/* 插入數據記錄,并輸出插入的數據記錄數*/

public static void insert() {

conn = getConnection(); // 首先要獲取連接,即連接到數據庫

try {

String sql = "INSERT INTO staff(name, age, sex,address, depart, worklen,wage)" " VALUES ('Tom1', 32, 'M', 'china','Personnel','3','3000')"; // 插入數據的sql 語句

st = (Statement) conn.createStatement(); // 創(chuàng)建用于執(zhí)行靜態(tài)sql 語句的Statement 對象

int count = st.executeUpdate(sql); // 執(zhí)行插入操作的sql 語句,并返回插入數據的個數

System.out.println("向staff 表中插入 " count " 條數據"); //輸出插入操作的處理結果

conn.close(); //關閉數據庫連接

} catch (SQLException e) {

System.out.println("插入數據失敗" e.getMessage());

}

}

/* 更新符合要求的記錄,并返回更新的記錄數目*/

public static void update() {

5

,

conn = getConnection(); //同樣先要獲取連接,即連接到數據庫

try {

String sql = "update staff set wage='2200' where name = 'lucy'";// 更新數據的sql 語句

st = (Statement) conn.createStatement(); //創(chuàng)建用于執(zhí)行靜態(tài)sql 語句的Statement 對象,st 屬局部變量

int count = st.executeUpdate(sql);// 執(zhí)行更新操作的sql 語句,返回更新數據的個數

System.out.println("staff表中更新 " count " 條數據"); //輸出更新操作的處理結果

conn.close(); //關閉數據庫連接

} catch (SQLException e) {

System.out.println("更新數據失敗");

}

}

/* 查詢數據庫,輸出符合要求的記錄的情況*/

public static void query() {

conn = getConnection(); //同樣先要獲取連接,即連接到數據庫

try {

String sql = "select * from staff"; // 查詢數據的sql 語句

st = (Statement) conn.createStatement(); //創(chuàng)建用于執(zhí)行靜態(tài)sql 語句的Statement 對象,st 屬局部變量

ResultSet rs = st.executeQuery(sql); //執(zhí)行sql 查詢語句,返回查詢數據的結果集

System.out.println("最后的查詢結果為:");

while (rs.next()) { // 判斷是否還有下一個數據

// 根據字段名獲取相應的值

String name = rs.getString("name");

int age = rs.getInt("age");

String sex = rs.getString("sex");

String address = rs.getString("address");

String depart = rs.getString("depart");

String worklen = rs.getString("worklen");

String wage = rs.getString("wage");

6

,

//輸出查到的記錄的各個字段的值

System.out.println(name " " age " " sex " " address

" " depart " " worklen " " wage);

}

conn.close(); //關閉數據庫連接

} catch (SQLException e) {

System.out.println("查詢數據失敗");

}

}

/* 刪除符合要求的記錄,輸出情況*/

public static void delete() {

conn = getConnection(); //同樣先要獲取連接,即連接到數據庫

try {

String sql = "delete from staff where name = 'lili'";// 刪除數據的sql 語句 st = (Statement) conn.createStatement(); //創(chuàng)建用于執(zhí)行靜態(tài)sql 語句的Statement 對象,st 屬局部變量

int count = st.executeUpdate(sql);// 執(zhí)行sql 刪除語句,返回刪除數據的數量

System.out.println("staff表中刪除 " count " 條數據n"); //輸出刪除操作的處理結果

conn.close(); //關閉數據庫連接

} catch (SQLException e) {

System.out.println("刪除數據失敗");

}

}

/* 獲取數據庫連接的函數*/

public static Connection getConnection() {

Connection con = null; //創(chuàng)建用于連接數據庫的Connection 對象

try {

Class.forName("com.mysql.jdbc.Driver");// 加載Mysql 數據驅動

con = DriverManager.getConnection(

"jdbc:mysql://localhost:3306/myuser", "root", "root");// 創(chuàng)建數據連接

} catch (Exception e) {

System.out.println("數據庫連接失敗" e.getMessage());

}

return con; //返回所建立的數據庫連接

}

}

7

標簽: