ORACLE_JDBC操作指令和代碼例子
JDBC :
// JDBC基礎操作步驟 :
1 加載驅動
2 獲取鏈接對象
3 鏈接
4 傳送數據,數據庫處理,接受數據結果集
5 處理結果集
6 關閉資源
//增 :
1 加載驅動 三種方式
// 第一種
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
//第二種
Class.forName("oracle.jdbc.driver.OracleDriver");
//第三種
new oracle.jdbc.driver.OracleDriver();
2 鏈接數據庫
//2 鏈接數據庫
Connection conn = DriverManager.getConnection("全路徑","用戶名","密碼");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "system", "root");
3 創建語句對象
//3 創建語句對象
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from c##scott.emp");//需要查詢的表
4 循環獲取結果
next();//返回值是boolean true/false 是問下一位還有沒有元素,如果有就返回true,否則返回false
while (rs.next()) {//判斷下一位還有沒有值
5 在循環中吧數據類型轉換 得到自己想要的數據類型(java對應的數據類型),可以隨意轉換,只要不丟失精度就行
System.out.print(rs.getString("empno")+" ");//rs.getIn("empno");也行,因為emono用的 number 類型
System.out.print(rs.getString("ename")+" ");
System.out.println(rs.getString("job")+" ");
}
6 關閉資源
close();//關閉資源
rs.close();
stmt.close();
conn.close();
executeQuery :
executeQuery();//查詢語句 返回值用ResultSet類型接收 獲取之後是個數組,數組中每個元素都是表的一行的對象
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "system", "root");
Statement stmt = conn.createStatement();//創建語句對象
ResultSet rs = stmt.executeQuery("select * from c##scott.emp");//需要查詢的表 需要執行的語句 返回值類型是ResultSet類型
next :
next();//返回值是boolean true/false 是問下一位還有沒有元素,如果有就返回true,否則返回false
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "system", "root");
Statement stmt = conn.createStatement();//創建語句對象
ResultSet rs = stmt.executeQuery("select * from c##scott.emp");// 需要查詢的表 需要執行的語句 返回值類型是ResultSet類型 獲取之後相當於是個數組 每個數組的元素都是一行的對象
rs.next();//獲取下一位元素(行)
getString :
statement.executeUpdate(sql);
getString();//獲得字符串
executeUpdate :
executeUpdate(" ");//把字符串指令執行 添加insert into...
如 : String sql = "insert into c##scott.a_tab values(123,'xiaomei','beijing~')";
statement.executeUpdate(sql);//就會把添加指令 在結果集中修改 只是結果集
getInt :
getInt();//獲得整型值
executeUpdate :
executeUpdate();
把語句插入到指定的表中
String sql = "insert into c##scott.a_tab values(123,'xiaomei','beijing~')";
statement.executeUpdate(sql);
DriverManager_getConnection :
DriverManager.getConnection();//鏈接數據庫 是Connection類型
如 : //Connection conn = DriverManager.getConnection(全路徑,用戶名,密碼);
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "system", "root");
createStatement :
//沒有參數的
createStatement();//創建語句對象 用Connection類型調用 返回Statement類型接收
如 :
Statement stmt = conn.createStatement();
//有參數的
createStatement(int resultSetType,int resultSetConcurrency);
//參數1
resultSetType - 結果集類型 :
它是 ResultSet.TYPE_FORWARD_ONLY,
ResultSet.TYPE_SCROLL_INSENSITIVE//如果寫了這個就可以使用 ResultSet裡面的所有方法
或 ResultSet.TYPE_SCROLL_SENSITIVE 之一
//參數2
resultSetConcurrency - 並發類型 ;
它是 ResultSet.CONCUR_READ_ONLY //查詢(查)
或 ResultSet.CONCUR_UPDATABLE 之一 //添加/更改/刪除 (增/刪/改)
createStatement(參數1,參數2);//如果不寫參數1 就只能調用ResultSet的next()方法,如果寫了,就都能調用了
PreparedStatement :
PreparedStatement s = conn.PreparedStatement("insert into c##scott.a_tab values(?,?,?)");//預先准備好字符串,values值用?代替 因為我們還不知道裡面是什麼類型的情況下
要想改變結果集,要執行語句把,這個的執行語句是execute();
execute :
s.execute();//就行了 就執行了 每個創建語句對象的執行方法不一樣
setInt :
setInt();//設置上面的問號,整型值
s.setInt(1,11);//前面 1 代表第一個問號,後面 11,代表要添加的值
setString :
setString();//設置上面的問號,字符串
s.setString(2,"sad");//前面 2 代表第二個問號,後面"sad",代表要添加的值
parseInt :
parseInt();//是Integer的方法(int的封裝類型),是把純數字的字符串,轉換為int型
int i = Integer.parseInt("123");//轉換為123
addBatch :
addBatch();//多條語句添加
如 :
s.setInt(1,123);
s.setString(2, "234");
s.setString(3, "456");
s.addBatch();//這算一條
s.setInt(1,123);
s.setString(2, "234");
s.setString(3, "456");
s.addBatch();//到這是兩條
//上面只是弄好字符串和指令了 但是沒有執行吧
//addBatch()多條語句執行,要用executeBatch()
executeBatch :
s.executeBatch();//多條語句添加執行
commit :
commit();//強制提交
Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@127.0.0.1:1521:orcl", "system", "root");//鏈接數據庫
conn.commit();//就是強制提交
setAutoCommit :
setAutoCommit();//設置自動提交(沒輸入一次指令,提交一次), true/false
conn.setAutoCommit(false);//設置不自動提交
conn.setAutoCommit(true);//設置自動提交
savepoint :
//添加設置回滾點
savepoint a;//設置回滾點 回滾點的名字叫 a
rollback_to :
//回滾到回滾點之前的操作,回滾點之後的操作都等於沒有操作
rollback to a(回滾點名);//回滾到 a 點
rollback :
rollback();//回滾,如果沒有設置回滾點,就會回滾到上次提交的地方 並把所有回滾點都取消
conn.rollback();//回滾
ResultSet_Li_Mian_De_Fang_Fa :
//查 : 修改的只是結果集
ResultSet rs = stmt.executeQuery("select * from c##scott.a_tab");
next :
next();//返回值是boolean true/false 是問下一位還有沒有元素,如果有就返回true,否則返回false
rs.next();//光標指向下一位
last :
last();//指向最後一位(最後一列) 指針在最後一列上
rs.last();//把光標指向rs結果集的最後一位(最後一列)
isLast :
isLast();//判斷當前光標指向的位置是否為最後一位,返回值為boolean布爾型,true/false
rs.isLast();//判斷當前光標指向的是不是rs結果集的最後一位
absolute :
absolute();//把光標指向指定的位置
rs.absolute(3);//把光標指向rs結果集的第三位元素
previous :
previous();//把光標指向當前光標的前一個位置
//上面那個absolute(3);不是把光標指向了第三位了嗎
rs.previous();//那麼現在就是第二位, 就是把當前光標向上移動一位
//增 :
moveToInsertRow :
moveToInsertRow();//一個緩沖區,可以認為位於結果集最後一行的下面(也可以說是在結果集的最下面新建一個空行) 當有緩沖區的時候,光標不管指向哪裡,默認操作都是這個緩沖區,一直到把這個緩沖區添加到結果集和數據庫中
rs.moveToInsertRow();//在rs結果集的最後一行,新建一個空行
updateInt :
updateInt();//添加 列(number類型) 值
rs.updateInt(1,9999);//往第一列(第一個字段),添加值為9999
或者是 :
rs.updateInt("ID",9999);//或者是通過指定的列,添加值
updateString :
updateString();//添加 (或更改)列(varchar2類型) 值
rs.updateString(2, "youname");//第二列(第二個字段),添加值為"youname"
或者是 :
rs.updateString("ENAME", "youname");//通過指定的列,添加值
insertRow :
insertRow();//把以上添加的新行和裡面的內容,添加到結果集中,也添加到數據庫中
rs.insertRow();//把上面設置的這一個新行,添加到結果集和數據庫中
moveToCurrentRow :
moveToCurrentRow();//把光標移動到新建的行
rs.moveToCurrentRow();//在rs結果集中,把光標移動到新建的行
deleteRow :
deleteRow();//刪除當前光標指向的行,結果集和數據庫都刪
rs.deleteRow();//刪除rs結果集中和數據庫中,當前光標指向的行
//改 :
updateString :
updateString();////更改內存中數據集中的數據
rs.updateString("hello", "hellonimei");//更改內存中數據集中的數據(列為hello,值為hellonimei)
updateRow :
updateRow();//把更改的數據更新到數據庫中
rs.updateRow();//把更改更新到數據庫中,是數據庫哦
close :
close();//關閉資源 一般都是從下往上關閉
如 : 打開資源的時候,先打開conn然後是stmt然後是rs
關閉的時候就是先關閉rs在關閉stmt,在關閉conn
// 1 驅動對象
new oracle.jdbc.driver.OracleDriver();
// 2 連接對象
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@127.0.0.1:1521:orcl", "c##scott", "root");
// 3 傳輸對象
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);//並發可更新,和前面對比
// 4 結果集對象
ResultSet rs = stmt.executeQuery("select * from emp");
rs.close();
stmt.close();
conn.close();