JAVA入門到精通-第66講-sql server-JDBC
阿新 • • 發佈:2018-11-29
sql server JDBC-ODBC
sql server面對各種語言的使用;
odbc相當於一個開關介面;
驅動就是一堆函式、方法或者包;
JDBC驅動:資料庫直接支援JAVA程式的呼叫;
Hibernate:orm技術,物件關係對映;
連線方式不一樣,其他大同小異;
為了安全,SQL server提供了一個介面ODBC;
jdbc-odbc對JAVA提供介面;
直接提供jdbc驅動,速度有一定優勢;
-PreparedStatement[火箭車]
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'
將來可以做一個執行緒定時去備份資料庫
=====================
com.microsoft.jdbc.sqlserver.SQLServerDriver
1
1
1
com .microsoft.jdbc.sqlserver.SQLServerDriver
rs=ps.executeQuery();
如果是*,需要getString(2)......
JDBC-ODBC橋連,不需要包;
如果是JDBC方式,需要引入三個JAR包;
JDBC-ODBC橋連操作sql server與JDBC驅動直連操作sql server的區別:
1、JDBC-ODBC橋連sql server無需引入外部驅動
2、JDBC直連需要引入微軟提供的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
Statement和PreparedStatement的區別(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 }