<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## Java操作Oracle PS:之前寫的關于Java操作SQLserver數據庫的博客和數據庫基礎的博客[http://blog.csdn.net/q547550831/article/details/49930537](http://blog.csdn.net/q547550831/article/details/49930537) [http://blog.csdn.net/q547550831/article/details/49925137](http://blog.csdn.net/q547550831/article/details/49925137) ![](https://box.kancloud.cn/2016-02-25_56ceb3e436c1e.jpg) ### JDBC-ODBC橋連(此方式連接無需打開監聽服務) ~~~ // 關鍵代碼,這里是和操作SQLServer不同的 // 加載驅動 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // 獲得連接 Connection ct=DriverManager.getConnection("jdbc:odbc:myoracledb","scott","123456"); ~~~ JDBC-ODBC說明: sun.jdbc.odbc.JdbcOdbcDriver此驅動由原sun公司提供 "jdbc:odbc:myoracledb","scott","123456" Jdbc:odbc:數據源名稱,"用戶名","密碼" PS:關于數據源的配置,可以百度。 ~~~ /** * jdbc_odbc橋連接Oracle */ package com.oracle.db; import java.sql.*; public class db1 { Connection ct = null; PreparedStatement ps = null; ResultSet rs = null; public db1() { try { // 1.加載驅動 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // 2.得到連接 ct = DriverManager.getConnection("jdbc:odbc:myoracledb", "scott", "123456"); // 3.創建PreparedStatement ps = ct.prepareStatement("select * from emp"); // 4.執行SQL rs = ps.executeQuery(); // 5.對獲取的數據進行操作 while (rs.next()) { System.out.println("員工名:" + rs.getString("ename")); } } 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(); } } } public static void main(String[] args) { db1 d1 = new db1(); } } ~~~ ### JDBC直連(此方式連接需要打開服務中的監聽服務) ~~~ // 關鍵代碼,這里是和操作SQLServer不同的 // 加載驅動 Class.forName("oracle.jdbc.driver.OracleDriver"); // 獲得連接 ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:Switch","scott","123456"); ~~~ JDBC說明: oracle.jdbc.driver.OracleDriver此驅動由oracle提供。 "jdbc:oracle:thin:@127.0.0.1:1521:Switch","scott","123456" Jdbc:oracle:thin:@ip地址:端口號默認1521:實例名,"用戶名","密碼" ~~~ /** * 使用jdbc直連Oracle */ package com.oracle.db; import java.sql.*; public class db2 { Connection ct = null; PreparedStatement ps = null; ResultSet rs = null; public db2() { try { // 1.加載驅動 Class.forName("oracle.jdbc.driver.OracleDriver"); // 2.得到連接 ct = DriverManager.getConnection( "jdbc:oracle:thin:@127.0.0.1:1521:Switch", "scott", "123456"); // 3.創建PreparedStatement ps = ct.prepareStatement("select * from emp"); // 4.執行SQL rs = ps.executeQuery(); // 5.對獲取的數據進行操作 while (rs.next()) { System.out.println("員工名:" + rs.getString("ename")); } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { if (rs != null) { rs.close(); } if (ps != null) { ps.close(); } if (ct != null) { ct.close(); } } catch (SQLException e) { e.printStackTrace(); } } } public static void main(String[] args) { db2 d1 = new db2(); } } ~~~ ### 什么時候使用jdbc,jdbc-odbc? 原則: 如果java程序和數據庫不在同一臺機器上,我們一般使用jdbc,如果java程序和數據庫在同一臺機器上,則兩個都可以使用。 數據庫服務器使用的系統不同使用的連接方式也不同,如果是linux或unix服務器,則使用jdbc。如果是windows?server服務器則使兩個都可以使用。 ? ### 擴展: 對CRUD操作的代碼重構,如果直接將CRUD寫入業務邏輯代碼中會造成業務邏輯不清晰,甚至是混亂。在稍大型一點的軟件開發中,都會選擇將CRUD封裝到一個類中,這樣邏輯層和控制層就分離開了。這里以SQLHelpter類為例。 ~~~ package com.oracle.test; import java.io.FileInputStream; import java.sql.*; import java.util.Properties; public class SQLHelper { //定義三個變量 private static Connection ct=null; private static PreparedStatement ps=null; private static ResultSet rs=null; //連接數據庫的用戶名,密碼,url,驅動 //說明:在實際開發中,我們往往把這些變量寫到一個外部文件中 //當程序啟動時,我們讀入這些配置信息。java.util.Properites private static String username; private static String password; private static String driver; private static String url; //使用靜態塊加載驅動(驅動只需要加載一次) static{ //使用Properties類,來讀取配置文件 Properties pp=new Properties(); FileInputStream fis=null; try { fis=new FileInputStream("dbinfo.properties"); //讓pp與dbinfo.properties文件關聯起來 pp.load(fis); //獲取dbinfo.properties文件內信息 username=(String) pp.getProperty("username"); password=(String) pp.getProperty("password"); driver=(String) pp.getProperty("driver"); url=(String) pp.getProperty("url"); //獲得驅動 Class.forName(driver); } catch (Exception e) { e.printStackTrace(); }finally{ try { if(fis!=null){ fis.close(); } } catch (Exception e) { e.printStackTrace(); } fis=null; } } //統一的curd操作 public static void executeUpdate(String sql,String[] parameters){ try { ct=DriverManager.getConnection(url,username,password); ps=ct.prepareStatement(sql); if(parameters!=null){ for(int i=0;i<parameters.length;i++){ ps.setString(i+1, parameters[i]); } } //執行 ps.executeUpdate(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); }finally{ close(rs,ps,ct); } } //寫一個方法,完成查詢任務 //sql表示要執行的sql語句 //sql select * from emp where ename=? public static ResultSet executeQuery(String sql,String[] parameters){ try { //根據實際情況我們對sql語句?賦值 //得到連接 ct=DriverManager.getConnection(url,username,password); //創建ps對象,得到sql語句對象 ps=ct.prepareStatement(sql); //如果parameters不為null,才賦值 if(parameters!=null){ for(int i=0;i<parameters.length;i++){ ps.setString(i+1, parameters[i]); } } rs=ps.executeQuery(); } catch (SQLException e) { e.printStackTrace(); //拋出運行異常 throw new RuntimeException(e.getMessage()); } finally{ //close(rs,ps,ct); } return rs; } //把關閉資源寫成函數 public static void close(ResultSet rs,Statement ps,Connection ct){ //關閉資源 if(rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } rs=null; } if(ps!=null){ try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } ps=null; } if(ct!=null){ try { ct.close(); } catch (SQLException e) { e.printStackTrace(); } ct=null; } } public static Connection getCt() { return ct; } public static PreparedStatement getPs() { return ps; } } ~~~ [dbinfo.properties]文件,數據庫連接相關信息 username=scott password=123456 driver=oracle.jdbc.driver.OracleDriver url=jdbc\:oracle\:thin\:@127.0.0.1\:1521\:Switch PS:像以上這么將CRUD分離就會方便很多,用起來直接調用就行了。這里的數據庫連接信息做成了一個文件,從文件中讀取連接信息,這樣方便調用也方便修改。連接信息是通過Properties類和輸入文件流來進行讀取的。 ### 實例:實現分頁功能的jsp ~~~ <%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <h2>oracle分頁案例</h2> <br> <table> <tr><td>用戶名</td><td>薪水</td></tr> <% try { // 1.加載驅動 Class.forName("oracle.jdbc.driver.OracleDriver"); // 2.得到連接 Connection ct = DriverManager.getConnection( "jdbc:oracle:thin:@127.0.0.1:1521:Switch", "scott", "123456"); // 3.創建PreparedStatement //接收pageNow String s_pageNow = (String)request.getParameter("pageNow"); int pageNow = 1; if(s_pageNow != null){ pageNow = Integer.parseInt(s_pageNow); } // 查詢總頁數 int pageCount = 0; //頁總數 int rowCount = 0; //共有幾條記錄 int pageSize = 5; //每頁顯示幾條 //通過查詢總記錄計算出總頁數 PreparedStatement ps = ct.prepareStatement("select count(*) from emp"); ResultSet rs = ps.executeQuery(); if(rs.next()){ rowCount = rs.getInt(1); if(rowCount % pageSize == 0){ pageCount = rowCount / pageSize; } else { pageCount = rowCount / pageSize + 1; } } //分頁查詢-可以參考我的博客Oracle表管理 ps = ct.prepareStatement("select * from (select e1.*,rownum rn from (select * from emp) e1 where rownum <= " + (pageNow*pageSize) +") where rn >=" + ((pageNow-1)*pageSize+1) +""); // 4.執行SQL rs = ps.executeQuery(); // 5.對獲取的數據進行操作 while (rs.next()) { out.println("<tr>"); out.println("<td>" + rs.getString("ename") + "</td>"); out.println("<td>" + rs.getString("sal") + "</td>"); out.println("</tr>"); } out.println(“</table>”); //打印總頁數 for(int i = 1; i <= pageCount; i++){ out.print("<a href=index.jsp?pageNow="+i+ "> [" + i + "] </a>"); } rs.close(); ps.close(); ct.close(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } %> </body> </html> ~~~ ----------參考《韓順平玩轉Oracle》
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看