乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      JDBC小結(jié)

       芥納須彌 2015-04-24


      一、JDBC連接數(shù)據(jù)庫的3種形式: 

              1.直接寫連接數(shù)據(jù)庫的4個語句,進行連接: 
             
      Java代碼  收藏代碼
      1. /** 
      2.  * DBUtil:數(shù)據(jù)庫工具類 
      3.  *  
      4.  * @author XiangdongLee 
      5.  *  
      6.  */  
      7. public class DBUtil {  
      8.     /** 
      9.      * 獲得數(shù)據(jù)庫連接 
      10.      *  
      11.      * @return 
      12.      */  
      13.     public static Connection getConnection() {  
      14.         Connection conn = null;  
      15.         String driverName = "oracle.jdbc.OracleDriver";  
      16.         String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";  
      17.         String username = "scott";  
      18.         String password = "tiger";  
      19.   
      20.         try {  
      21.             Class.forName(driverName);  
      22.             conn = DriverManager.getConnection(url, username, password);  
      23.         } catch (ClassNotFoundException e) {  
      24.             System.out.println("加載數(shù)據(jù)庫驅(qū)動出錯...");  
      25.             e.printStackTrace();  
      26.         } catch (SQLException e) {  
      27.             System.out.println("獲得數(shù)據(jù)庫連接出錯...");  
      28.             e.printStackTrace();  
      29.         }  
      30.         return conn;  
      31.     }  


              2.將數(shù)據(jù)庫加載放入靜態(tài)代碼塊中,這樣,數(shù)據(jù)庫只需要加載一次即可: 
             
      Java代碼  收藏代碼
      1. public class DBUtilStatic {  
      2.     // 只加載一次  
      3.     static {  
      4.         try {  
      5.             Class.forName("oracle.jdbc.driver.OracleDriver");  
      6.         } catch (ClassNotFoundException e) {  
      7.             e.printStackTrace();  
      8.         }  
      9.     }  
      10.   
      11.     public static Connection getConnection() {  
      12.         Connection conn = null;  
      13.         String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";  
      14.         String username = "scott";  
      15.         String password = "tiger";  
      16.   
      17.         try {  
      18.             conn = DriverManager.getConnection(url, username, password);  
      19.         } catch (SQLException e) {  
      20.             e.printStackTrace();  
      21.         }  
      22.   
      23.         return conn;  
      24.     }  


              3.創(chuàng)建配置文件,加載配置文件中的信息: 
             
      Java代碼  收藏代碼
      1. public class DBUtil {  
      2.     private static Properties props;  
      3.   
      4.     static {  
      5.         try {  
      6.             props = new Properties();  
      7.             // 讀取 jdbc 配置文件到輸入流(jdbc.properties)  
      8.             InputStream in = DBUtil.class.getClassLoader().getResourceAsStream(  
      9.                     "jdbc.properties");  
      10.             // 從輸入流中加載 jdbc 配置文件  
      11.             props.load(in);  
      12.             Class.forName(props.getProperty("driverName"));  
      13.         } catch (IOException e) {  
      14.             e.printStackTrace();  
      15.         } catch (ClassNotFoundException e) {  
      16.             e.printStackTrace();  
      17.         }  
      18.     }  
      19.   
      20.     public static Connection getConnection() {  
      21.         Connection conn = null;  
      22.         String url = props.getProperty("url");  
      23.         String username = props.getProperty("username");  
      24.         String password = props.getProperty("password");  
      25.         try {  
      26.             conn = DriverManager.getConnection(url, username, password);  
      27.         } catch (SQLException e) {  
      28.             e.printStackTrace();  
      29.         }  
      30.         return conn;  
      31.     }  


      二、2個范例。 
              
              下面,再寫2個JDBC連接和操作數(shù)據(jù)庫的范例代碼,供學(xué)習(xí)和回顧JDBC。 

              范例1  JDBC處理Select語句 
        
              題目:基于Emp和Dept表,求部門名和該部門的平均薪水。 
              
              第1步:打開Oracle服務(wù),使用PL/SQL Developer工具,寫出該題目的sql語句并先執(zhí)行,查看效果。 
             
      Sql代碼  收藏代碼
      1. --求部門名和平均薪水  
      2. select d.dname,round(avg(e.sal)) avgsal   
      3. from emp e,dept d  
      4. where d.deptno=e.deptno group by d.dname;  


              第2步:創(chuàng)建Pojo類。 
             
      Java代碼  收藏代碼
      1. package com.lxd.pojo;  
      2.   
      3. import java.io.Serializable;  
      4.   
      5. public class DeptSal implements Serializable {  
      6.     private static final long serialVersionUID = 1L;  
      7.     private String dname;  
      8.     private Integer avgsal;  
      9.   
      10.     public DeptSal() {  
      11.     }  
      12.   
      13.     public String getDname() {  
      14.         return dname;  
      15.     }  
      16.   
      17.     public void setDname(String dname) {  
      18.         this.dname = dname;  
      19.     }  
      20.   
      21.     public Integer getAvgsal() {  
      22.         return avgsal;  
      23.     }  
      24.   
      25.     public void setAvgsal(Integer avgsal) {  
      26.         this.avgsal = avgsal;  
      27.     }  
      28.   
      29.     public static long getSerialversionuid() {  
      30.         return serialVersionUID;  
      31.     }  
      32.   
      33. }  


              第3步:創(chuàng)建數(shù)據(jù)庫工具類DBUtil。 
             
      Java代碼  收藏代碼
      1. package com.lxd.dao;  
      2.   
      3. import java.io.IOException;  
      4. import java.io.InputStream;  
      5. import java.sql.Connection;  
      6. import java.sql.DriverManager;  
      7. import java.sql.PreparedStatement;  
      8. import java.sql.ResultSet;  
      9. import java.sql.SQLException;  
      10. import java.util.Properties;  
      11.   
      12. public class DBUtil {  
      13.     private static Properties props;  
      14.   
      15.     static {  
      16.         try {  
      17.             props = new Properties();  
      18.             // 讀取 jdbc 配置文件到輸入流(jdbc.properties)  
      19.             InputStream in = DBUtil.class.getClassLoader().getResourceAsStream(  
      20.                     "jdbc.properties");  
      21.             // 從輸入流中加載 jdbc 配置文件  
      22.             props.load(in);  
      23.             Class.forName(props.getProperty("driverName"));  
      24.         } catch (IOException e) {  
      25.             e.printStackTrace();  
      26.         } catch (ClassNotFoundException e) {  
      27.             e.printStackTrace();  
      28.         }  
      29.     }  
      30.   
      31.     public static Connection getConnection() {  
      32.         Connection conn = null;  
      33.         String url = props.getProperty("url");  
      34.         String username = props.getProperty("username");  
      35.         String password = props.getProperty("password");  
      36.         try {  
      37.             conn = DriverManager.getConnection(url, username, password);  
      38.         } catch (SQLException e) {  
      39.             e.printStackTrace();  
      40.         }  
      41.         return conn;  
      42.     }  
      43.   
      44.     public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {  
      45.         if (rs != null) {  
      46.             try {  
      47.                 rs.close();  
      48.             } catch (SQLException e) {  
      49.                 e.printStackTrace();  
      50.             }  
      51.         }  
      52.   
      53.         if (ps != null) {  
      54.             try {  
      55.                 ps.close();  
      56.             } catch (SQLException e) {  
      57.                 e.printStackTrace();  
      58.             }  
      59.         }  
      60.   
      61.         if (conn != null) {  
      62.             try {  
      63.                 conn.close();  
      64.             } catch (SQLException e) {  
      65.                 e.printStackTrace();  
      66.             }  
      67.         }  
      68.     }  
      69.   
      70.     // public static void main(String[] args) {  
      71.     // System.out.println(getConnection());  
      72.     // }  
      73. }  


              第4步:創(chuàng)建Dao類封裝對數(shù)據(jù)庫的操作。 
             
      Java代碼  收藏代碼
      1. package com.lxd.dao;  
      2.   
      3. import java.sql.Connection;  
      4. import java.sql.PreparedStatement;  
      5. import java.sql.ResultSet;  
      6. import java.sql.SQLException;  
      7. import java.util.ArrayList;  
      8. import java.util.List;  
      9.   
      10. import com.lxd.pojo.DeptSal;  
      11.   
      12. public class DeptSalDao {  
      13.     private Connection conn;  
      14.     private PreparedStatement ps;  
      15.     private ResultSet rs;  
      16.   
      17.     // 結(jié)果集為多行多列,使用List。  
      18.     public List<DeptSal> getDeptSal() {  
      19.         List<DeptSal> list = new ArrayList<DeptSal>();  
      20.   
      21.         try {  
      22.             conn = DBUtil.getConnection();  
      23.             String sql = "select d.dname,round(avg(e.sal)) avgsal ";  
      24.             sql += " from emp e,dept d";  
      25.             sql += " where d.deptno=e.deptno group by d.dname";  
      26.             ps = conn.prepareStatement(sql);  
      27.             rs = ps.executeQuery();  
      28.             while (rs.next()) {  
      29.                 // 根據(jù)結(jié)果集,定義封裝類去封裝。  
      30.                 DeptSal deptSal = new DeptSal();  
      31.                 deptSal.setDname(rs.getString("dname"));  
      32.                 // deptSal.setDname(rs.getString(1));  
      33.                 deptSal.setAvgsal(rs.getInt("avgsal"));  
      34.                 // deptSal.setAvgsal(rs.getInt(2));  
      35.                 list.add(deptSal);  
      36.             }  
      37.         } catch (SQLException e) {  
      38.             e.printStackTrace();  
      39.         } finally {  
      40.             DBUtil.close(conn, ps, rs);  
      41.         }  
      42.         return list;  
      43.     }  
      44. }  

              代碼說明: 
            (1)第25行:在將PL/SQL中的sql語句的第3行復(fù)制粘貼的時候,注意不要把分號“;”一起粘貼過來,這樣會報錯。也就是說,第25行不要寫成: 
             
      Sql代碼  收藏代碼
      1. sql += " where d.deptno=e.deptno group by d.dname;";  

              而應(yīng)該是: 
             
      Sql代碼  收藏代碼
      1. sql += " where d.deptno=e.deptno group by d.dname";  

            (2)第31-34行:既可以根據(jù)字段名獲得字段值(列的值)。也可以根據(jù)字段索引獲得字段值(列的值),注意:下標從 1 開始。 


              第5步:創(chuàng)建測試類,顯示結(jié)果。 
             
      Java代碼  收藏代碼
      1. package com.lxd.test;  
      2.   
      3. import org.junit.Test;  
      4.   
      5. import com.lxd.dao.DeptSalDao;  
      6. import com.lxd.pojo.DeptSal;  
      7.   
      8. public class DeptSalDaoTest {  
      9.     @Test  
      10.     public void deptSal() {  
      11.         DeptSalDao dao = new DeptSalDao();  
      12.         for (DeptSal deptSal : dao.getDeptSal()) {  
      13.             System.out.println("部門名:" + deptSal.getDname() + " " + "平均薪水:"  
      14.                     + deptSal.getAvgsal());  
      15.         }  
      16.     }  
      17. }  

              這一步,就相當于直接在PL/SQL Developer工具中,執(zhí)行sql語句后查看結(jié)果。 



              范例2  JDBC處理存儲過程 
        
              題目:使用EMP表,建立一個存儲過程,輸入一個雇員號,返回該雇員的上司姓名。 
              
              第1步:打開Oracle服務(wù),使用PL/SQL Developer工具,寫出該題目的存儲過程并執(zhí)行,創(chuàng)建出procedure文件:p_mgr。 
             
      Sql代碼  收藏代碼
      1. --使用EMP表,建立一個存儲過程,輸入一個雇員號,返回該雇員的上司姓名。  
      2. create or replace procedure p_mgr(  
      3.   v_empno emp.empno%type,  
      4.   v_ename out emp.ename%type  
      5. as  
      6. --KING沒有上司。  
      7.   v_mgr emp.mgr%type;  
      8. begin   
      9.   select mgr into v_mgr   
      10.   from emp where empno=v_empno;  
      11.   if v_mgr is null then  
      12.     v_ename:='沒有上司';  
      13.     --這兒寫return,如果沒有上司,后面的代碼就不執(zhí)行了。  
      14.     return;  
      15.   end if;  
      16.   select ename into v_ename from emp  
      17.   where empno=v_mgr;  
      18. exception  
      19.   when others then  
      20.     v_ename:='NO_PERSON';  
      21. end p_mgr;  


              第2步:創(chuàng)建Dao類封裝對數(shù)據(jù)庫中存儲過程的操作。 
             
      Java代碼  收藏代碼
      1. package com.lxd.dao;  
      2.   
      3. import java.sql.CallableStatement;  
      4. import java.sql.Connection;  
      5. import java.sql.ResultSet;  
      6. import java.sql.SQLException;  
      7. import java.sql.Types;  
      8.   
      9. import com.lxd.dao.DBUtil;  
      10.   
      11. public class MgrEnameDao {  
      12.     public String getMgrEname(Integer empno) {  
      13.         Connection conn = null;  
      14.         CallableStatement cs = null;  
      15.         // 不需要用到結(jié)果集,因此可不定義。  
      16.         // ResultSet rs = null;  
      17.         String ename = "";  
      18.   
      19.         try {  
      20.             conn = DBUtil.getConnection();  
      21.             String sql = "(call p_mgr(?,?))";  
      22.             cs = conn.prepareCall(sql);  
      23.             cs.setInt(1, empno);  
      24.             cs.registerOutParameter(2, Types.VARCHAR);  
      25.   
      26.             cs.executeUpdate();  
      27.             ename = cs.getString(2);  
      28.         } catch (SQLException e) {  
      29.             e.printStackTrace();  
      30.         } finally {  
      31.             DBUtil.close(conn, cs, null);  
      32.         }  
      33.   
      34.         return ename;  
      35.     }  
      36. }  


              第3步:創(chuàng)建測試類,顯示結(jié)果。 
             
      Java代碼  收藏代碼
      1. package com.lxd.dao.test;  
      2.   
      3. import java.io.BufferedReader;  
      4. import java.io.IOException;  
      5. import java.io.InputStreamReader;  
      6.   
      7. import org.junit.Test;  
      8.   
      9. import com.mgr.dao.MgrEnameDao;  
      10.   
      11. public class MgrEnameDaoTest {  
      12.     @Test  
      13.     public void getMgrEname() {  
      14.         try {  
      15.             System.out.println("請輸入雇員號");  
      16.             BufferedReader br = new BufferedReader(new InputStreamReader(  
      17.                     System.in));  
      18.             Integer empno = Integer.parseInt(br.readLine());  
      19.             MgrEnameDao dao = new MgrEnameDao();  
      20.             String ename = dao.getMgrEname(empno);  
      21.             if (ename.equals("NO_PERSON")) {  
      22.                 System.out.println("雇員號:" + empno + "不存在");  
      23.             } else {  
      24.                 System.out.println("雇員號:" + empno + "的上司名:" + ename);  
      25.             }  
      26.         } catch (NumberFormatException e) {  
      27.             System.out.println("請輸入數(shù)字");  
      28.             e.printStackTrace();  
      29.         } catch (IOException e) {  
      30.             e.printStackTrace();  
      31.         }  
      32.     }  
      33. }  

              這一步,就相當于直接在PL/SQL Developer工具中,編寫存儲過程測試代碼,然后執(zhí)行,查看結(jié)果。代碼如下: 
             
      Sql代碼  收藏代碼
      1. declare  
      2.   v_empno emp.empno%type;  
      3.   v_ename emp.ename%type;  
      4. begin  
      5.   v_empno:=&empno;  
      6.   p_mgr(v_empno,v_ename);  
      7.   dbms_output.put_line(v_empno||' 上司名:'||v_ename);  
      8. end;  

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多