1. 程式人生 > >關於JDCB連接oracle數據庫。

關於JDCB連接oracle數據庫。

.exe 級別 mit 方法 表數 基準 增刪 api 詳細講解

1:什麽是JDBC(百度可詳細解釋)

JDBC(Java DataBase Connectivity,java數據庫連接)是一種用於執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序,同時,JDBC也是個商標名。 他是一套用於執行SQL語句的javaAPI,應用程序可通過這套API連接到關系數據庫,並使用SQL語句來完成對數據庫數據的CRUD(數據庫的查詢,更新,修改以及刪除)的操作,這節詳細講解關於jdbc連接Oracle數據庫。 2:關於jdbc連接數據庫的常用api,這些api主要位於java.sql包下,該包定義了一系列的接口和類。
DriverManager:用於管理JDBC驅動的服務類。程序中使用該類的的主要功能是獲取Connection對象,該類包含如下方法: public static Connection getConnection(String url, String user, String password) throws SQLException 該方法獲得url對應數據庫的連接; Connection:代表數據庫連接對象,每個Connection代表一個物理連接會話。要想訪問數據庫,必須先得到數據庫連接。該接口的常用方法如下: Statement createStatement() throws SQLException; 該方法返回一個Statement對象; PreparedStatement prepareStatement(String sql)throws SQLException;該方法返回預編譯的Statement對象,即將SQL語句提交到數據庫進行預編譯; CallableStatement prepareCall(String sql) throws SQLException; 該方法返回CallableStatement對象,該對象用於調用存儲過程。 上面上個方法都返回用於執行sql語句的Statement對象,PreparedStatement和CallableStatement是Statement的子類,只有獲得了Statement之後才可以執行sql語句; 除此之外,Connection還有如下幾個用於控制事務的方法。
Savepoint setSavepoint() throws SQLException;創建一個保存點;     Savepoint setSavepoint(String name) throws SQLException;以指定名字來創建一個保存點;     void setTransactionIsolation(int level) throws SQLException;設置事務的隔離級別;     void rollback() throws SQLException;回滾事務;     void rollback(Savepoint savepoint) throws SQLException;將事務回滾到指定的保存點;     void setAutoCommit(boolean autoCommit) throws SQLException;關閉自動提交,打開事務;     void commit() throws SQLException;提交事務; Statement
:用於執行sql語句的工具接口。該對象既可以執行DDL,DCL語句,也可以用於執行DML語句,還可以用於執行sql查詢。當執行sql查詢時,返回查詢到的結果集。它的常用方法如下: ResultSet executeQuery(String sql) throws SQLException;該方法用於執行查詢語句,並返回查詢結果對應ResultSet對象。該方法只能用於執行查詢語句。 int executeUpdate(String sql) throws SQLException;該方法用於執行DML語句,並返回受影響的行數;該方法也可用於執行DDL語句,執行DDL語句將返回0; boolean execute(String sql) throws SQLException;改方法可以執行任何sql語句。如果執行後第一個結果為ResultSet對象,則返回true;如果執行後第一個結果為受影響的行數或沒有任何結果,則返回false; PreparedStatement:預編譯的Statement對象,PreparedStatement是Statement的子接口,它允許數據庫預編譯sql語句(這些sql語句通常帶有參數),以後每次只改變sql命令的參數,避免數據庫每次都需要編譯sql語句,無需再傳入sql語句, 只要為預編譯的sql語句傳入參數值即可。所以它比Statement多了如下方法: void setXxx(int parameterIndex, Xxx value):該方法根據傳入參數值的類型不同,需要使用不同的方法。傳入的值根據索引傳給sql語句中指定位置的參數。 ResultSet:結果集對象。該對象包含訪問查詢結果的方法,ResultSet可以通過列索引或列名獲得列數據。它包含了如下常用方法來移動記錄指針。 void close() throws SQLException;釋放ResultSet對象; boolean absolute( int row ) throws SQLException;將結果集的記錄指針移動到第row行,如果row是負數,則移動到倒數第row行,如果移動後的記錄指針指向一條有效記錄,則該方法返回true; boolean next() throws SQLException;將結果集的記錄指針定位到下一行,如果移動後的記錄指針指向一條有效的記錄,則該方法返回true; boolean last() throws SQLException;將結果集的記錄指針定位到最後一行,如果移動後的記錄指針指向一條有效的記錄,則該方法返回true; 3:簡單介紹了JDBC常用的幾個接口和類,下面是具體的代碼實現。 3-1:首先我們寫連接的獲取。我們把它寫成一個類。 public class oracleJdbc { // 獲得conn連接 private static Connection getConn() { String driver = "oracle.jdbc.OracleDriver"; String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String username = "scott"; String password = "tiger"; Connection conn = null; try { Class.forName(driver); try { conn = (Connection) DriverManager.getConnection(url, username, password); } catch (SQLException e) { e.printStackTrace(); } } catch (ClassNotFoundException e) { e.printStackTrace(); } return conn; } 寫了這個連接類,我們接下來的操作就簡單多了,我們接下來的對數據庫的操作就簡單了很多,不管是增刪改查,我們就可以直接調用這個連接類就行了。 // 插入數據 private static int insert(Student student) { Connection conn = getConn(); int i = 0; String sql = "insert into students (Name,Sex,Age) values(?,?,?)"; PreparedStatement pstmt = null; try { pstmt = (PreparedStatement) conn.prepareStatement(sql); pstmt.setString(1, student.getName()); pstmt.setString(2, student.getSex()); pstmt.setString(3, student.getAge()); i = pstmt.executeUpdate(); pstmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } return i; } //修改數據 private static int update(Student student) { Connection conn = getConn(); int i = 0; String sql = "update students set Age=‘" + student.getAge() + "‘ where Name=‘" + student.getName() + "‘"; PreparedStatement pstmt; try { pstmt = (PreparedStatement) conn.prepareStatement(sql); i = pstmt.executeUpdate(); System.out.println("resutl: " + i); pstmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } return i; } // 查詢全部數據 private static Integer getAll() { Connection conn = getConn(); String sql = "select * from scott.students"; // String sql = "select * from scott.emp"; PreparedStatement pstmt; try { pstmt = (PreparedStatement)conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); int col = rs.getMetaData().getColumnCount(); System.out.println("============================"); while (rs.next()) { for (int i = 1; i <= col; i++) { System.out.print(rs.getString(i) + "\t"); if ((i == 2) && (rs.getString(i).length() < 8)) { System.out.print("\t"); } } System.out.println(""); } System.out.println("============================"); } catch (SQLException e) { e.printStackTrace(); } return null; } //刪除數據 private static int delete(String name) { Connection conn = getConn(); int i = 0; String sql = "delete from students where Name=‘" + name + "‘"; PreparedStatement pstmt; try { pstmt = (PreparedStatement) conn.prepareStatement(sql); i = pstmt.executeUpdate(); System.out.println("resutl: " + i); pstmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } return i; } //測試類 public static void main(String args[]) { oracleJdbc.getAll(); //oracleJdbc.insert(new Student("Achilles", "Male", "14")); // oracleJdbc.getAll(); // oracleJdbc.update(new Student("Bean", "", "7")); // oracleJdbc.delete("Achilles"); // oracleJdbc.getAll(); } } 這個學生類是提前寫好的。測試類可以直接操作上面的四個方法對數據庫進行CRUD操作。 這樣jdbc對數據庫的操作就完成了。

關於JDCB連接oracle數據庫。