1. 程式人生 > >JDBC概述及JDBC完成對Oracle的增刪改查

JDBC概述及JDBC完成對Oracle的增刪改查

dep 版本jar包 員工 rman 返回 exception ktr 接口 c代碼

什麽是JDBC
JDBC(Java Data Base Connectivity,Java數據庫連接),是一種用於執行SQL語句的Java API,為多種關系數據庫提供統一訪問。它由一組用Java語言編寫的類和接口組成。
技術分享圖片

JDBC API
 提供者:Sun公司
 內容:供程序員調用的接口與類,集成在java.sql和javax.sql包中,如
DriverManager類 作用:管理各種不同的JDBC驅動
 Connection接口
 Statement接口
 ResultSet接口
JDBC 驅動
提供者:數據庫廠商
作用:負責連接各種不同的數據庫
JDBC對Java程序員而言是API,對實現與數據庫連接的服務提供商而言是接口模型。

三方關系
SUN公司是規範制定者,制定了規範JDBC(連接數據庫規範)
數據庫廠商微軟、甲骨文等分別提供實現JDBC接口的驅動jar包
程序員學習JDBC規範來應用這些jar包裏的類。
技術分享圖片

JDBC連接數據庫最簡單的方式
一:拿到jar包,【這裏是用Oracle進行了連接測試】
jar包位置:Oracle的安裝的路徑下去找或者直接百度對應的版本jar包即可。
技術分享圖片
二:導入jar包到Java項目裏
技術分享圖片
導入jar包截圖步驟:
技術分享圖片

三、寫代碼:【6步驟】
// 1.加載一個driver驅動
Class.forName("oracle.jdbc.OracleDriver");
技術分享圖片
// 2.創建數據庫連接(Connection)
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "scott", "tiger");


// 3.創建SQL命令發送器Statement--由連接connection來創建sql命令發送器
Statement statement = connection.createStatement();
// 4.通過Statement發送SQL命令並得到結果(測試添加數據)
String sql = "insert into emp values(1007,‘zhangsan‘,‘student‘,7788,‘09-10月-2018‘,5000,3000,10)";
// 5.處理結果--返回int 底層直接實現了commit
int commit =statement.executeUpdate(sql);
//6.關閉數據庫資源--先開的資源後關

statement.close();
connection.close();
詳細代碼:

技術分享圖片
 1 package boom;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.SQLException;
 6 import java.sql.Statement;
 7 
 8 /**Oracle連接JDBC
 9  * 1.導入jar包
10  * 2.寫jdbc
11  * @author Administrator
12  *
13  */
14 public class JDBC_test01 {
15     
16     public static void main(String[] args) throws ClassNotFoundException, SQLException {
17         // 1.加載一個driver驅動
18         Class.forName("oracle.jdbc.OracleDriver");
19         // 2.創建數據庫連接(Connection)
20         Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "scott", "tiger");
21         // 3.創建SQL命令發送器Statement--由連接connection來創建sql命令發送器
22         Statement statement = connection.createStatement();
23         // 4.通過Statement發送SQL命令並得到結果(測試添加數據)
24         String sql = "insert into emp values(1007,‘zhangsan‘,‘student‘,7788,‘09-10月-2018‘,5000,3000,10)";
25         // 5.處理結果--返回int 底層直接實現了commit
26         int commit =statement.executeUpdate(sql);
27         // 判斷
28         if(commit>0){
29             System.out.println("JDBC_test01.main(測試添加數據成功)");
30         }else{
31             System.out.println("JDBC_test01.main(測試添加數據失敗)");
32         }
33         // 6.關閉數據庫資源--先開的資源後關
34         statement.close();
35         connection.close();
36     }
37 
38 }
View Code

測試結果:
技術分享圖片

小結:
JDBC訪問數據庫步驟
1:加載一個Driver驅動
2:創建數據庫連接(Connection)
3 :創建SQL命令發送器Statement
4:通過Statement發送SQL命令並得到結果
5:處理結果(select語句)
6:關閉數據庫資源
JDBC語法小結:
1.加載驅動
加載JDBC驅動是通過調用方法java.lang.Class.forName(),下面列出常用的幾種數據庫驅動程序加載語句的形式 :
Class.forName(“oracle.JDBC.driver.OracleDriver”);//使用Oracle的JDBC驅動程序
Class.forName(“com.microsoft.JDBC.sqlserver.SQLServerDriver”);//使用SQL Server的JDBC驅動程序
Class.forName(“com.ibm.db2.JDBC.app.DB2Driver”);//使用DB2的JDBC驅動程序
Class.forName("com.mysql.JDBC.Driver");//使用MySql的JDBC驅動程序
2.創建數據庫連接
與數據庫建立連接的方法是調用DriverManager.getConnection(String url, String user, String password )方法
String url="jdbc:oracle:thin:@localhost:1521:XE";
String user=“scott";
String password=“tiger";
3.創建Statement並發送命令
Statement對象用於將 SQL 語句發送到數據庫中,或者理解為執行sql語句
有三種 Statement對象:
 Statement:用於執行不帶參數的簡單SQL語句;
 PreparedStatement(從 Statement 繼承):用於執行帶或不帶參數的預編譯SQL語句;
 CallableStatement(從PreparedStatement 繼承):用於執行數據庫存儲過程的調用。
技術分享圖片

完善JDBC代碼,達到規範的寫法,實現增刪改查操作:【遵循六大步驟】
1:驅動名,URL,用戶名,密碼提取到代碼的前面
2:處理抓取異常信息
3:實現JDBC對數據庫的增刪改操作
獲取當前日期封裝成了util類:

public class MyUtil {
	/**
	 * 獲取當前的系統日期,字符串類型
	 * @return newdatestr
	 */
	public static String GetSysTime(){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
				String newdatestr = sdf.format(new Date());
				return newdatestr;
	}
}

詳細代碼:

技術分享圖片
 1 package boom;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.SQLException;
 6 import java.sql.Statement;
 7 
 8 import boom.util.MyUtil;
 9 import oracle.net.aso.s;
10 
11 /**Oracle連接JDBC
12  * 提取:驅動名,URL,用戶名,密碼
13  * 處理異常信息
14  * 實現建增刪改
15  * @author Administrator
16  *
17  */
18 public class JDBC_test02 {
19     
20     public static void main(String[] args){
21         // 聲明參數
22         String driver="oracle.jdbc.driver.OracleDriver";
23         String url = "jdbc:oracle:thin:@localhost:1521:XE";
24         String userName="scott";
25         String userPwd="tiger";
26         
27         // 聲明連接,初始化為空
28         Connection connection = null;
29         Statement statement = null;
30         
31         try {
32             // 1.加載驅動
33             Class.forName(driver);
34             // 2.創建連接
35             connection = DriverManager.getConnection(url, userName, userPwd);
36             // 3.創建SQL命令發送器
37             statement = connection.createStatement();
38             // 4.發送SQL獲取結果
39             // 添加
40             String add = "insert into emp values(9999,‘李四‘,‘MANAGER‘,7788,to_date(‘"+MyUtil.GetSysTime()+"‘,‘yyyy-mm-dd‘),9000,1000,10)";
41             // 刪除
42             String delete = "delete from emp where empno=9999"; 
43             // 修改
44             String update = "update emp set sal=sal+8000,comm=comm+520 where empno=9999"; 
45             
46             // 相當於事務的提交更新commit
47             int commit = statement.executeUpdate(delete);
48             // 5.處理結果
49             if(commit>0){
50                 System.out.println("JDBC_test02.main(測試數據成功)");
51             }else{
52                 System.out.println("JDBC_test02.main(測試數據失敗)");
53             }
54         } catch (ClassNotFoundException e) {
55             // TODO Auto-generated catch block
56             e.printStackTrace();
57         } catch (SQLException e) {
58             // TODO Auto-generated catch block
59             e.printStackTrace();
60         }finally{
61             // 6.關閉資源 【先開後關】
62             try {
63                 if(statement !=null){                    
64                     statement.close();
65                 }
66             } catch (SQLException e) {
67                 // TODO Auto-generated catch block
68                 e.printStackTrace();
69             }
70             try {
71                 if(connection !=null){                    
72                     connection.close();
73                 }
74             } catch (SQLException e) {
75                 // TODO Auto-generated catch block
76                 e.printStackTrace();
77             }
78         }
79     }
80 
81 }
View Code

JDBC對Oracle進行查詢操作

技術分享圖片
 1 package boom;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.ResultSet;
 6 import java.sql.SQLException;
 7 import java.sql.Statement;
 8 import java.util.Date;
 9 
10 import boom.util.MyUtil;
11 import oracle.net.aso.s;
12 
13 /**
14  * 查詢
15  * @author Administrator
16  *
17  */
18 public class JDBC_test03 {
19     
20     public static void main(String[] args){
21         // 聲明參數
22         String driver="oracle.jdbc.driver.OracleDriver";
23         String url = "jdbc:oracle:thin:@localhost:1521:XE";
24         String userName="scott";
25         String userPwd="tiger";
26         
27         // 聲明連接,初始化為空
28         Connection connection = null;
29         Statement statement = null;
30         ResultSet result = null;
31         
32         try {
33             // 1.加載驅動
34             Class.forName(driver);
35             // 2.創建連接
36             connection = DriverManager.getConnection(url, userName, userPwd);
37             // 3.創建SQL命令發送器
38             statement = connection.createStatement();
39             // 4.發送SQL獲取結果
40             // 查詢
41             String select = "select * from emp where comm is not null order by sal desc";
42             result = statement.executeQuery(select);
43             // 5.處理結果-遍歷結果集需要用到while
44             while(result.next()){
45                 // 遍歷循環表字段
46                 int empno = result.getInt("EMPNO");
47                 String ename = result.getString("ENAME");
48                 String job = result.getString("JOB");
49                 int mgr = result.getInt("MGR");
50                 Date hiredate = result.getDate("HIREDATE");
51                 double sal = result.getDouble("SAL");
52                 double comm = result.getDouble("COMM");
53                 int deptno = result.getInt("DEPTNO");
54                 //輸出
55                 System.out.println(empno+"\t"+ename+"\t"+job+"\t"+mgr+"\t"+hiredate+"\t"+sal+"\t"+comm+"\t"+deptno);
56             }
57         } catch (ClassNotFoundException e) {
58             // TODO Auto-generated catch block
59             e.printStackTrace();
60         } catch (SQLException e) {
61             // TODO Auto-generated catch block
62             e.printStackTrace();
63         }finally{
64             // 6.關閉資源 【先開後關】
65             try {
66                 if(result!=null){
67                     result.close();
68                 }
69             } catch (SQLException e) {
70                 // TODO Auto-generated catch block
71                 e.printStackTrace();
72             }
73             try {
74                 if(statement !=null){                    
75                     statement.close();
76                 }
77             } catch (SQLException e) {
78                 // TODO Auto-generated catch block
79                 e.printStackTrace();
80             }
81             try {
82                 if(connection !=null){                    
83                     connection.close();
84                 }
85             } catch (SQLException e) {
86                 // TODO Auto-generated catch block
87                 e.printStackTrace();
88             }
89         }
90     }
91 
92 }
View Code

效果圖為查詢有獎金的員工所有信息
技術分享圖片
逆序查詢:
關閉結果集正序遍歷並設置只讀
statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

// 把結果集的指針移到最後
result.afterLast();
// 遍歷結果集向上遍歷
result.previous()
詳細代碼:

技術分享圖片
 1 package boom;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.ResultSet;
 6 import java.sql.SQLException;
 7 import java.sql.Statement;
 8 import java.text.SimpleDateFormat;
 9 import java.util.Date;
10 /**
11  * 
12  * @author 查詢--逆向遍歷
13  *
14  */
15 public class JDBC_test04 {
16     public static void main(String[] args) {
17         // 聲明參數
18         String driver = "oracle.jdbc.driver.OracleDriver";
19         String url = "jdbc:oracle:thin:@localhost:1521:XE";
20         String username = "scott";
21         String userpwd = "tiger";
22 
23         // 聲明連接
24         Connection connection = null;
25         Statement statement = null;
26         ResultSet result = null;
27         try {
28             // 1:加載驅動
29             Class.forName(driver);
30             // 2:創建連接
31             connection = DriverManager.getConnection(url, username, userpwd);
32             // 3:創建sql命令發送器
33             statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
34             // 4:發送sql獲取結果
35             // 查詢
36             String select = "select empno,ename,job from emp where sal>=2000 order by ename";
37             result = statement.executeQuery(select);
38             // 把結果集的指針移到最後
39             result.afterLast();
40 
41             // 5:處理結果-遍歷結果集需要用到while
42             // 遍歷結果集向上遍歷
43             while(result.previous()){
44                 // 遍歷循環表字段
45                 int empno = result.getInt("EMPNO");
46                 String ename = result.getString("ENAME");
47                 String job = result.getString("JOB");
48                 //輸出
49                 System.out.println(empno+"\t"+ename+"\t"+job+"\t");
50             }
51         } catch (ClassNotFoundException e) {
52             // TODO Auto-generated catch block
53             e.printStackTrace();
54         } catch (SQLException e) {
55             // TODO Auto-generated catch block
56             e.printStackTrace();
57         } finally {
58             // 關閉資源--先開後關
59             try {
60                 if (result != null) {
61                     result.close();
62                 }
63             } catch (SQLException e) {
64                 // TODO Auto-generated catch block
65                 e.printStackTrace();
66             }
67 
68             try {
69                 if (statement != null) {
70                     statement.close();
71                 }
72             } catch (SQLException e) {
73                 // TODO Auto-generated catch block
74                 e.printStackTrace();
75             }
76 
77             try {
78                 if (connection != null) {
79                     connection.close();
80                 }
81             } catch (SQLException e) {
82                 // TODO Auto-generated catch block
83                 e.printStackTrace();
84             }
85 
86         }
87 
88     }
89 }
View Code

效果圖是按姓名逆序輸出
技術分享圖片
Oracle裏是升序:select empno,ename,job from emp where sal>=2000 order by ename
技術分享圖片


JDBC概述及JDBC完成對Oracle的增刪改查