oracle查询可更新结果集,jdbc 可更新结果集
jdbc中ResultSet在jdk 5.0以后默認都是可滾動的,不可更新的。可滾動的意思是我們可以調用absolute(),previous(), ?first()等操作來更新結果集中的指針位置。
當我們需要結果集可更新的時候,可以設置它的值為ResultSet.CONCUR_UPDATABLE,默認是ResultSet.CONCUR_READ_ONLY。
當我們在連接的是oracle數據庫時,如果查詢的sql語句是select * from 表名的話,那么oracle默認我們是以只讀方式訪問表,所以我們程序設置為可更新的結果集,也是沒有任何用處的,需要select 字段名..... from 表名,才能調用可更新的結果集。
下面我們演示 更新結果集的操作,把表的sname列,更新為“姓名”+i。
package com.shizhan.main;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.shizhan.util.DatabaseUtil;
public class TestResult {
/**
* @param args
*/
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
//當操作oracle數據庫的時候,如果設置結果集是可更新的,則sql語句設置為select *from 表名,是無法更新的,需要設置select
//字段1,字段2.。。from表名
String sql ="select sno,sname from student";
try {
conn = DatabaseUtil.getConnection();
//ResultSet.TYPE_SCROLL_INSENSITIVE結果集可滾動
//ResultSet.CONCUR_UPDATABLE結果集可更新
ps = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
rs = ps.executeQuery();
//指針移動到最后
rs.last();
//返回當前的行號
int rownum = rs.getRow();
for(int i=rownum;i>0;i--)
{
//指針移動到第i條記錄
rs.absolute(i);
System.out.println("sno:"+rs.getInt(1)
+"\t"+"sname"+rs.getString(2));
//修改第二列的值
rs.updateString(2,"姓名"+i);
//提交修改,更新列
rs.updateRow();
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally{
DatabaseUtil.close(rs);
DatabaseUtil.close(ps);
DatabaseUtil.close(conn);
}
}
}
package com.shizhan.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DatabaseUtil {
static Connection connection = null;
static String driver = "oracle.jdbc.driver.OracleDriver";
static String url = "jdbc:oracle:thin:localhost:1521:orcl";
static String username ="scott";
static String password ="tiger";
public static Connection getConnection() throws Exception
{
Class.forName(driver);
connection = DriverManager.getConnection(url,username,password);
return connection;
}
public static void close(Connection conn) {//關閉連接對象
if(conn != null) {//如果conn連接對象不為空
try {
conn.close();//關閉conn連接對象對象
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(PreparedStatement pstmt) {//關閉預處理對象
if(pstmt != null) {//如果pstmt預處理對象不為空
try {
pstmt.close();//關閉pstmt預處理對象
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(Statement pstmt) {//關閉預處理對象
if(pstmt != null) {//如果pstmt預處理對象不為空
try {
pstmt.close();//關閉pstmt預處理對象
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rs) {//關閉結果集對象
if(rs != null) {//如果rs結果集對象不為null
try {
rs.close();//關閉rs結果集對象
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
總結
以上是生活随笔為你收集整理的oracle查询可更新结果集,jdbc 可更新结果集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于java SSM springboo
- 下一篇: HTML+CSS+JS实现美女canva