1. 程式人生 > >Java程式操作資料庫SQLserver詳解

Java程式操作資料庫SQLserver詳解

        資料庫基本操作:增刪改查(CRUD)

crud介紹(增、刪、改、查操作)

     CRUD是指在做計算處理時的增加(Create)、查詢(Retrieve)(重新得到資料)、更新(Update)和刪除(Delete)幾個單記事的首字母簡寫。主要被用在描述軟體系統中資料庫或者持久層的基本操作功能。

 Create new records

 Rctricvc cxisting rccords

 Update existing records

 Delete existing records.

要對資料表進行增、刪、改、查,我們首先要清楚jdbc基本的概念:


    JDBC有兩種,一種原sun公司提供的資料庫連線api但不是直接連線sql server而是先連線ODBC再通過ODBC對sql server進行操作;一種是由微軟提供的JDBC資料庫連線api可直接對sqlserver資料庫進行操作。

    JDBC(Java Data Base Connectivity,java資料庫連線)是一種用於執行SQL語句的Java API,可以為多種關係資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。JDBC提供了一種基準,據此可以構建更高階的工具和介面,使資料庫開發人員能夠編寫資料庫應用程式,同時,JDBC也是個商標名。

    有了JDBC,向各種關係資料傳送SQL語句就是一件很容易的事。換言之,有了JDBC API,就不必為訪問Sybase資料庫專門寫一個程式,為訪問Oracle資料庫又專門寫一個程式,或為訪問Informix資料庫又編寫另一個程式等等,程式設計師只需用JDBC API寫一個程式就夠了,它可向相應資料庫傳送SQL呼叫。同時,將Java語言和JDBC結合起來使程式設計師不必為不同的平臺編寫不同的應用程式,只須寫一遍程式就可以讓它在任何平臺上執行,這也是Java語言“編寫一次,處處執行”的優勢。

注:JDBC訪問不同的資料庫使用的JDBC API都有所不同,雖然統稱為JDBC。如:訪問sql server資料庫的JDBC,是不能訪問oracle資料庫的,同理也是也不訪問mysql、db2、Informix資料庫等。只是訪問方式不同,對資料庫的操作依然是使用sql語句操作

    Java 具有堅固、安全、易於使用、易於理解和可從網路上自動下載等特性,是編寫資料庫應用程式的傑出語言。所需要的只是 Java應用程式與各種不同資料庫之間進行對話的方法。而JDBC 正是作為此種用途的機制。

jdbc的驅動的分類

目前比較常見的JDBC驅動程式可分為以下四個種類

1、jdbc-odbc橋連線

2、本地協議純java

驅動程式

3、網路協議純java驅動程式

4、本地api

jdbc不足

儘管JDBC在JAVA語言層面實現了統一,但不同資料庫仍舊有許多差異。為了更好地實現跨資料庫操作,於是誕生了Hibernate專案,Hibernate是對JDBC的再封裝,實現了對資料庫操作更寬泛的統一和更好的可移植性。

java操作sql server資料庫(表)

1、我們先使用jdbc-odbc橋連的方式來操作sql server資料庫(表)完成對people表的crud操作

原始碼如下:

/**
 * 演示使用jdbc-odbc橋連方式操作sql server資料庫
 * 具體操作jdbc資料庫的people表
 * 1、配置資料來源--windows下在控制面板-->管理工具-->ODBC資料來源-->使用者DSN--新增
 *    sql server
 * 2、在程式中去連線資料來源
 * 3、使用Statement(不安全)連線資料庫
 */
import java.sql.*;
public class Jdbc_test {
	public static void main(String[] args) {
		Connection ct=null;
		Statement sm=null;
		ResultSet rs=null;
		try {
			//1、載入驅動(把需要的驅動程式加入記憶體)
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

                        //2、得到連線(指定連線到哪個資料來源、資料庫的使用者名稱和密碼)
			//如果配置資料來源的時候選擇的是windows NT驗證方式,則不需要資料庫的使用者名稱和密碼
		     ct=DriverManager.getConnection("jdbc:odbc:ywq");
//			ct=DriverManager.getConnection("jdbc:odbc:mytest","sa","sa");

                       //3、建立Statement或者PreparedStatement(區別)
			//Statement用處:主要用於傳送SQL語句到資料庫
			sm=ct.createStatement();

                        //4、執行(CRUD,建立資料庫、備份資料庫、刪除資料庫)
                        //演示1:新增一條資料到dept表中
			//executeUpdate可以執行CUD操作(新增、刪除、修改)
//			int i=sm.executeUpdate("insert into people values(25,'張三','男')");
//			int q=sm.executeUpdate("insert into people values(20,'李四','男')");
//			int z=sm.executeUpdate("insert into people values(30,'小三','女')");
//			if(i==1&&q==1&&z==1){
//				System.out.println("資料新增成功");
//			}else{
//				System.out.println("新增失敗");
//			}
			
			//演示2:從dept表中刪除一條記錄
//			int j=sm.executeUpdate("delete from people where age=25");
//			System.out.println(j);
//			//此處j的值為本次刪除的記錄條數
//			if(j==1){
//				System.out.println("資料刪除成功");
//			}else{
//				System.out.println("刪除失敗");
//			}
			
			//演示3:從people表中修改age=20 name改為李四他爹
//			int k=sm.executeUpdate("update people set name='李四他爹' where age='20'");
//			if(k==1){
//				System.out.println("資料修改成功");
//			}else{
//				System.out.println("修改失敗");
//			}
			
			//演示4:查詢,顯示所有的部門資訊
			//ResultSet結果集,大家可以把ResultSet理解成返回一張錶行的結果集
			rs=sm.executeQuery("select * from people");
			//迴圈取出
			while(rs.next()){
				int a=rs.getInt(1);
				String b=rs.getString(2);
				String c=rs.getString(3);
				System.out.println(a+"\t"+b+"\t"+c);	
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			//關閉資源,關閉順序:先建立後關閉,後建立先關閉
			try {
				//為了程式健壯
				if(rs!=null){
					rs.close();
				}
				if(sm!=null){
					sm.close();
				}
				if(ct!=null){
					ct.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

首先是資料來源的配置,步驟如下圖所示:

其中,名稱為資料來源的名稱,即程式ct=DriverManager.getConnection("jdbc:odbc:ywq");中使用的ywq名稱。

下一步:

有倆種方式,本例使用了Windows驗證方式不需要密碼和使用者名稱。

下一步:

選擇你要使用的資料庫,即你要操作的people表必須在這個資料庫中。

至此完成了資料來源的配置。開始進行正式的Java程式操作sqlserver資料庫

操作資料庫步驟:

1、載入驅動

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

2、得到連線(指定連線到哪個資料來源、資料庫的使用者名稱和密碼)。如果配置資料來源的時候選擇的是windows NT驗證方式,則不需要資料庫的使用者名稱和密碼

    方式1: ct=DriverManager.getConnection("jdbc:odbc:ywq");
     方式2:ct=DriverManager.getConnection("jdbc:odbc:ywq","sa","sa");     後邊為資料庫的使用者名稱和密碼

        sm=ct.createStatement();

4、進行CRUD操作。

     我們使用查詢分析器來建立資料庫jdbc以及people表。

create database jdbc

create table people
(
  age int,
  name nvarchar(50),
  sex  nvarchar(2)  
)

執行後便建立成功。是一個空表。

通過演示1,將幾條資料插入表中

//演示1:新增一條資料到people表,executeUpdate可以執行CUD操作(新增、刪除、修改)

            int i=sm.executeUpdate("insert into people values(25,'張三','男')");
            int q=sm.executeUpdate("insert into people values(20,'李四','男')");
            int z=sm.executeUpdate("insert into people values(30,'小三','女')");
            if(i==1&&q==1&&z==1){
                System.out.println("資料新增成功");
            }else{
                System.out.println("新增失敗");
            }

可看到資料插入成功

演示2:從people表中刪除一條記錄

            int j=sm.executeUpdate("delete from people where age=25");

            System.out.println(j);
            //此處j的值為本次刪除的記錄條數
            if(j==1){
                System.out.println("資料刪除成功");
            }else{
                System.out.println("刪除失敗");
            }

資料刪除成功。

演示3:從people表中修改age=20的資料,將 name改為李四他爹

            int k=sm.executeUpdate("update people set name='李四他爹' where age='20'");

            if(k==1){
                System.out.println("資料修改成功");
            }else{
                System.out.println("修改失敗");
            }

修改成功。


演示4:查詢,顯示所有的部門資訊,ResultSet結果集,大家可以把ResultSet理解成返回一張錶行的結果集

            rs=sm.executeQuery("select * from people");

            //迴圈取出
            while(rs.next()){

                int a=rs.getInt(1);

                String b=rs.getString(2);

                String c=rs.getString(3);

                System.out.println(a+"\t"+b+"\t"+c);    
            }

查詢成功


下邊演示使用更安全更高效的PreparedStatement實現CRUD操作,原始碼如下:

/**
 * PreparedStatement使用CRUD
 * 1、PreparedStatement可以提高執行效率(因為它有預編譯的功能)
 * 2、PreparedStatement可以防止SQL注入,但是要求用?賦值的方式才可以
 */

import java.sql.*;
public class Test_2 {
	public static void main(String[] args) {
		Connection ct=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		try {
			//1、載入驅動(把需要的驅動程式加入記憶體)
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			//2、得到連線(指定連線到哪個資料來源、資料庫的使用者名稱和密碼)
			ct=DriverManager.getConnection("jdbc:odbc:ywq");
			//3、建立PreparedStatement
			//PreparedStatement用處:主要用於傳送SQL語句到資料庫
			ps=ct.prepareStatement("select * from people where age=? and name=?");
			//給?賦值(可防止SQL注入漏洞問題),不要直接使用拼接的方式
			ps.setInt(1, 30);
			ps.setString(2, "小三");
//			//演示1:查詢,顯示所有的部門資訊
			//ResultSet結果集,大家可以把ResultSet理解成返回一張錶行的結果集
			rs=ps.executeQuery();
			//迴圈取出
			while(rs.next()){
				int a=rs.getInt(1);
				String b=rs.getString(2);
				String c=rs.getString(3);
				System.out.println(a+"\t"+b+"\t"+c);	
			}
			
			
			//演示2、使用PreparedStetement新增一條記錄
//			ps=ct.prepareStatement("insert into people values(?,?,?)");
//			ps.setInt(1, 60);
//			ps.setString(2, "小六");
//			ps.setString(3, "男");
//			//執行
//			int i=ps.executeUpdate();
//			if(i==1){
//				System.out.println("新增成功");
//			}else{
//				System.out.println("新增失敗");
//			}
			
			//演示3、使用PreparedStetement修改一條記錄從people表中修改name=小六 name改為小七
//			ps=ct.prepareStatement("update people set age=? where name='小六'");
//			ps.setInt(1, 45);			
//			//執行
//			int i1=ps.executeUpdate();
//			if(i1==1){
//				System.out.println("修改成功");
//			}else{
//				System.out.println("修改失敗");
//			}
			
			//演示4、使用PreparedStetement刪除一條記錄
			ps=ct.prepareStatement("delete from people where age=?");
			ps.setInt(1, 45);
			int i=ps.executeUpdate();
			if(i==1){
				System.out.println("刪除成功");
			}else{
				System.out.println("刪除失敗");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			//關閉資源,關閉順序先建立後關閉,後建立先關閉
			try {
				if(rs!=null){
					rs.close();
				}
				if(ps!=null){
					ps.close();
				}
				if(ct!=null){
					ct.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

這段程式碼應該很好理解,同時這也是我們更常用的寫法,通常我們將使用PreparedStatement而不是Statement。

2、使用jdbc驅動程式直接操作sql server資料庫(表)完成對people表的CRUD操作。


不使用odbc,直接通過jdbc來連線資料庫,倆者只有倆處不相同。

(1)載入驅動                   (2)得到連線時

JDBC-ODBC橋連操作sql server與JDBC驅動直連操作sql server的區別:

1、JDBC-ODBC橋連sql server無需引入外部驅動

2、JDBC直連需要引入微軟提供的JDBC驅動

JDBC方式去操作資料庫

 1、引入sql包

2、sqlserver2000需要引入三個jar包,分別是msbase.jar和mssqlserver.jar和msutil.jar

  3、sqlserver2005/2008/2012版本中可以引入sqljdbc.jar或sqljdbc4.jar兩個微軟提供的JDBC包,官方目前推出2.0/3.0/4.0版本

 *4、使用sqljdbc4.jar後可以不使用載入驅動Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");而直接連線資料庫

  5、使用sqljdbc.jar則需要載入驅動

 *6、特別說明,如果取值是按編號取,則需一一對應;如果按欄位列名取值,則可以靈活取值

           //1、載入驅動

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

//2、得到連線

 ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=ywq;");

if(!ct.isClosed()){

System.out.println("資料庫連線成功");

}else{

System.out.println("資料庫連線失敗");

}

通過此種方式便建立了與資料庫的連線。其它保持不變。

3、java程式中來控制對資料庫(表)的建立、刪除、備份、恢復工作

/**
 * 在java中如何使用ddl語句(credate(建立),drop(刪除),backup(備份),restore(恢復))資料庫
 */

import java.sql.*;
public class Test_3 {
	public static void main(String[] args) {
		//定義需要的物件
		PreparedStatement ps=null;
		Connection ct=null;
		ResultSet rs=null;
		try {
			//1、載入驅動
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			//2、得到連線
			ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=ywq;");
			if(!ct.isClosed()){
				System.out.println("資料庫連線成功");
			}else{
				System.out.println("資料庫連線失敗");
			}
//			//3、建立ps,建立資料庫
//			ps=ct.prepareStatement("create database vvv");
//			//如果執行的是ddl語句
//			if(!ps.execute()){
//				System.out.println("建立資料庫成功");
//			}else{
//				System.out.println("建立資料庫失敗");
//			}
			//4、建立ps,建立表
//			ps=ct.prepareStatement("create table xxx(aa int)");
//			//如果執行的是ddl語句
//			if(!ps.execute()){
//				System.out.println("建立表成功");
//			}else{
//				System.out.println("建立表失敗");
//			}
			//5、備份資料庫
//			ps=ct.prepareStatement("backup database vvv to disk='e:/vvv.bak'");
//			if(!ps.execute()){
//				System.out.println("備份資料庫成功");
//			}else{
//				System.out.println("備份資料庫失敗");
//			}
			//6、恢復資料庫
			ps=ct.prepareStatement("restore database vvv from disk='e:/vvv.bak'");
			if(!ps.execute()){
				System.out.println("恢復資料庫成功");
			}else{
				System.out.println("恢復資料庫失敗");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				if(rs!=null){
					rs.close();
				}
				if(ps!=null){
					ps.close();
				}
				if(ct!=null){
					ct.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

其實,用Java程式來操作SQLserver資料庫和在查詢分析器中對資料庫進行查詢原理一樣。Java中只要掌握了那4個步驟,即:載入驅動,得到連線,建立火箭車,執行CRUD,恢復備份等操作。即可完美操作資料庫。

新技能,get!!!