關於JDCB連接oracle數據庫。
阿新 • • 發佈:2019-03-21
.exe 級別 mit 方法 表數 基準 增刪 api 詳細講解
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對數據庫的操作就完成了。
-
1:什麽是JDBC(百度可詳細解釋)
關於JDCB連接oracle數據庫。