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!!!