JDBC概述及JDBC完成對Oracle的增刪改查
什麽是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的增刪改查