1. 程式人生 > >JAVA入門到精通-第66講-sql server-JDBC

JAVA入門到精通-第66講-sql server-JDBC

sql server JDBC-ODBC sql server面對各種語言的使用; odbc相當於一個開關介面; 驅動就是一堆函式、方法或者包; JDBC驅動:資料庫直接支援JAVA程式的呼叫; Hibernate:orm技術,物件關係對映; 連線方式不一樣,其他大同小異;   為了安全,SQL server提供了一個介面ODBC; jdbc-odbc對JAVA提供介面; 直接提供jdbc驅動,速度有一定優勢;   -PreparedStatement[火箭車]
com.microsoft.jdbc.sqlserver.SQLServerDriver
      1 1           1
com
.microsoft.jdbc.sqlserver.SQLServerDriver
      rs=ps.executeQuery();   如果是*,需要getString(2)......   JDBC-ODBC橋連,不需要包; 如果是JDBC方式,需要引入三個JAR包;
JDBC驅動包; 單擊專案,右鍵-Properties-Java Build Path-External JARs   如果不按照數字走,也可以按照名稱走:   -多表查詢 多表和單表是一樣的;   -新增,刪除,修改 executeUpdate(); 給?賦值 ps.setInt (1, 100); ps.setString(2, "財務部") ps.setString(3, "大學城")   -java操作sql server資料庫 表並不需要真實的存在; 在java中 如何使用 ddl語句(create , drop, backup ...)   127.0.0.1 要連線的資料庫的IP 1433表示sql  server的預設埠 涉及到網路的東西,都需要埠 (程式與程式之間通過網路連線); SQLserver 2000: 1433 Oracle : 1521 MYSQL:3306 Https: 80 FTP: 21 SSH:22 TOMCAT:8080 ps=ct.prepareStatement("create database vvv"); boolean b=ps.execute(); 返回一個bool值   //關閉資源 ps 、ct    -建立表 create table xxx(aa  int)   -備份資料庫 backup database  bbb  to disk='xxx.bak' 將來可以做一個執行緒定時去備份資料庫     =====================  

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

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

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

 

JDBC直連sqlserver示例[Sql_test3.java]

/**
 * 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、特別說明,如果取值是按編號取,則需一一對應;如果按欄位列名取值,則可以靈活取值
 */
package com.sqlserver;
import java.sql.*;
public class Sql_test3 {
    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=test;user=sa;password=sa;");
            if(!ct.isClosed()){
                System.out.println("資料庫連線成功");
            }else{
                System.out.println("資料庫連線失敗");
            }
            //3、建立PreparedStatement
//          ps=ct.prepareStatement("select * from emp");
            ps=ct.prepareStatement("select ename,sal,deptno from emp");
            //4、執行(查詢就用executeQuery(),增加、刪除、修改就用executeUpdate())
            rs=ps.executeQuery();
            //迴圈取出,僱員的名字、僱員的薪水,部門編號
            while(rs.next()){
//              String ename=rs.getString(2);
//              float sal=rs.getFloat(6);
//              int deptno=rs.getInt(8);
//              String ename=rs.getString(1);//對應的列號可以取出資料
//              float sal=rs.getFloat(2);
//              int deptno=rs.getInt(3);
                String ename=rs.getString("ename");//使用欄位名也可以取出資料
                float sal=rs.getFloat("sal");
                int deptno=rs.getInt("deptno");
                System.out.println(ename+"\t"+sal+"\t"+deptno);
            }
        } 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();
            }
        }
    }
}

 

--------------------------------------------------------------------

多表操作,示例[Sql_test4.java]

 
 1 /**
 2  * JDBC方式去操作資料庫(多表操作)
 3  * 1、引入sql包
 4  * 2、sqlserver2000需要引入三個jar包,分別是msbase.jar和mssqlserver.jar和msutil.jar
 5  * 3、sqlserver2005/2008/2012版本中可以引入sqljdbc.jar或sqljdbc4.jar兩個微軟提供的JDBC包,官方目前推出2.0/3.0/4.0版本
 6  * 4、使用sqljdbc4.jar後可以不使用載入驅動Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");而直接連線資料庫
 7  * 5、使用sqljdbc.jar則需要載入驅動
 8  * 6、特別說明,如果取值是按編號取,則需一一對應;如果按欄位列名取值,則可以靈活取值
 9  */
10 package com.sqlserver;
11 import java.sql.*;
12 public class Sql_test4 {
13     public static void main(String[] args) {
14         //定義需要的物件
15         PreparedStatement ps=null;
16         Connection ct=null;
17         ResultSet rs=null;
18         try {
19             //初始化我們的物件
20             //1、載入驅動
21             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
22             //2、得到連線
23             ct=DriverManager.getConnection
24              ("jdbc:sqlserver://127.0.0.1:1433;databaseName=test;user=sa;password=sa;");
25             if(!ct.isClosed()){
26                 System.out.println("資料庫連線成功");
27             }else{
28                 System.out.println("資料庫連線失敗");
29             }
30 //          //3、建立PreparedStatement
31           ps=ct.prepareStatement("select ename,sal,dname from emp,dept where emp.deptno=dept.deptno");
32          //4、執行(查詢就用executeQuery(),增加、刪除、修改就用executeUpdate())
33           rs=ps.executeQuery();
34           //迴圈取出,僱員的名字、僱員的薪水,部門名稱
35           while(rs.next()){
36               String ename=rs.getString("ename");//使用欄位名也可以取出資料
37               float sal=rs.getFloat("sal");
38               String dname=rs.getString("dname");
39               System.out.println(ename+"\t"+sal+"\t"+dname);
40           }
41           //5、建立PreparedStatement
42          ps=ct.prepareStatement("insert into dept values(?,?,?)");
43           //6、給?賦值
44           ps.setInt(1, 60);
45           ps.setString(2, "Finance");
46           ps.setString(3, "Alaska");
47           //7、執行(查詢就用executeQuery(),增加、刪除、修改就用executeUpdate())
48           int i=ps.executeUpdate();
49           if(i==1){
50               System.out.println("新增資料成功");
51           }else{
52             System.out.println("新增資料失敗");
53           }
54           //8、建立PreparedStatement
55           ps=ct.prepareStatement("delete from dept where deptno=?");
56           //9、給?賦值
57           ps.setInt(1, 50);
58           //10、執行(查詢就用executeQuery(),增加、刪除、修改就用executeUpdate())
59           int i=ps.executeUpdate();
60           if(i==1){
61               System.out.println("刪除資料成功");
62           }else{
63              System.out.println("刪除資料失敗");
64           }
65             //11、建立PreparedStatement
66             ps=ct.prepareStatement("update dept set deptno=? where loc=?");
67             //12、給?賦值
68             ps.setInt(1, 50);
69             ps.setString(2, "Alaska");
70             //13、執行(查詢就用executeQuery(),增加、刪除、修改就用executeUpdate())
71             int i=ps.executeUpdate();
72             if(i==1){
73                 System.out.println("修改資料成功");
74             }else{
75                 System.out.println("修改資料失敗");
76             }
77         } catch (Exception e) {
78             e.printStackTrace();
79         }finally{
80             try {
81                 if(rs!=null){
82                     rs.close();
83                 }
84                 if(ps!=null){
85                     ps.close();
86                 }
87                 if(ct!=null){
88                     ct.close();
89                 }
90             } catch (SQLException e) {
91                 e.printStackTrace();
92             }
93         }
94     }
95 }

 

     

 

 

 

-------------------------------------------------------------------------------

java程式操作sql server

StatementPreparedStatement的區別(2)

看下面兩段程式片斷:

Code Fragment 1:
 String updateString="UPDATE COFFEES SET SALES=75"+"WHERE COF_NAME LIKE 'Colombian'";
 stmt.executeUpdate(updateString);


Code Fragment 2:
 PreparedStatement updateSales=con.prepareStatement("UPDATE COFFEES SET SALES=? WHERE COF_NAME LIKE ?");
 updateSales.setInt(1,75);
 updateSales.setString(2,"Colombian");
 updateSales.executeUpdate();
 
        後者使用了PreparedStatement,而前者是Statement,PreparedStatement不僅包含了SQL語句,而且大多數情況下這個語句已被預編譯過,當其執行時,只需DBMS執行SQL語句,而不必先編譯。當你需要執行Statement物件多次的時候,PreparedStatement物件將會降低執行時間,加快了訪問資料庫的速度。   好處是,不必重複SQL語句的句法,而只需要改其中變數的值,便可重新執行SQL語句。選擇PreparedStatement物件與否,在於相同句法的SQL語句是否執行了多次,而且兩次之間的差別僅是變數的不同。如僅執行一次的話,它和普通的物件無差異,體現不出預編譯的優越性。 java 操作sql server資料庫(表)[Sql_test5.java] 在軟體公司實際開發過程中,也許需要你在 java 程式中來控制對資料庫(表)的建立、刪除、備份、恢復工作 ,這是我們又該怎樣完成呢?
 1 /**
 2  * 在java中如何使用ddl語句(credate(建立),drop(刪除),backup(備份),restore(恢復))資料庫
 3  */
 4 package com.sqlserver;
 5 import java.sql.*;
 6 public class Sql_test5 {
 7     public static void main(String[] args) {
 8         //定義需要的物件
 9         PreparedStatement ps=null;
10         Connection ct=null;
11         ResultSet rs=null;
12         try {
13             //1、載入驅動
14             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
15             //2、得到連線
16           ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=test;user=sa;password=sa;");
17             if(!ct.isClosed()){
18                 System.out.println("資料庫連線成功");
19             }else{
20                 System.out.println("資料庫連線失敗");
21             }
22 //          //3、建立ps,建立資料庫
23 //          ps=ct.prepareStatement("create database vvv");
24 //          //如果執行的是ddl語句
25 //          if(!ps.execute()){
26 //              System.out.println("建立資料庫成功");
27 //          }else{
28 //              System.out.println("建立資料庫失敗");
29 //          }
30             //4、建立ps,建立表
31 //          ps=ct.prepareStatement("create table xxx(aa int)");
32 //          //如果執行的是ddl語句
33 //          if(!ps.execute()){
34 //              System.out.println("建立表成功");
35 //          }else{
36 //              System.out.println("建立表失敗");
37 //          }
38             //5、備份資料庫
39 //          ps=ct.prepareStatement("backup database vvv to disk='e:/vvv.bak'");
40 //          if(!ps.execute()){
41 //              System.out.println("備份資料庫成功");
42 //          }else{
43 //              System.out.println("備份資料庫失敗");
44 //          }
45             //6、恢復資料庫
46             ps=ct.prepareStatement("restore database vvv from disk='e:/vvv.bak'");
47             if(!ps.execute()){
48                 System.out.println("恢復資料庫成功");
49             }else{
50                 System.out.println("恢復資料庫失敗");
51             }
52            
53         } catch (Exception e) {
54             e.printStackTrace();
55         }finally{
56             try {
57                 if(rs!=null){
58                     rs.close();
59                 }
60                 if(ps!=null){
61                     ps.close();
62                 }
63                 if(ct!=null){
64                     ct.close();
65                 }
66             } catch (SQLException e) {
67                 e.printStackTrace();
68             }
69         }
70     }
71 }