日期:2014-05-20  浏览次数:20787 次

JDBC问题,为什么我的TYPE_SCROLL_SENSITIVE和TYPE_SCROLL_INSENSITIVE不起效果?
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 

import javax.swing.JButton; 
import javax.swing.JFrame; 

public class Main extends JFrame{ 

JButton jb = new JButton(); 

static ResultSet rs = null; 
static Statement stmt = null; 
static Connection conn = null; 
public Main(){ 
this.setTitle("Test"); 
this.setBounds(200, 200, 400, 200); 
this.setLayout(null); 
jb.setText("OK"); 
jb.setBounds(100, 100, 60, 30); 
jb.addActionListener(new ActionListener(){ 
public void actionPerformed(ActionEvent e) { 
call(); 

}); 
this.add(jb); 
this.setVisible(true); 


public void call(){ 
try{ 
String id = rs.getString("EXAMID"); 
String name = rs.getString("NAME"); 
int age = rs.getInt("AGE"); 
System.out.println(id + ": " + name + " " + age); 
}catch(Exception ex){ 
ex.printStackTrace(); 



public static void main(String[] args) { 
try { 
new Main(); 
Class.forName("oracle.jdbc.driver.OracleDriver"); 
conn = DriverManager.getConnection( 
"jdbc:oracle:thin:@127.0.0.1:1521:XE", "sa", "sa"); 
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
ResultSet.CONCUR_UPDATABLE); 
rs = stmt.executeQuery("select * from SYS.STUBINFOX"); 

rs.next(); 
} catch (Exception ex) { 
ex.printStackTrace(); 




上面的代码用来测试TYPE_SCROLL_SENSITIVE参数,我修改数据库以后,再点击一下按钮,可是打印出来的没有改变,不是说TYPE_SCROLL_SENSITIVE对修改是敏感的吗?昨天晚上在家测试连接ACCESS(家里机器装不了Oracle),结果恰好相反,无论是TYPE_SCROLL_SENSITIVE参数还是TYPE_SCROLL_INSENSITIVE都敏感,只要数据库一修改,打印的结果马上就跟着修改。完全没有头绪,请教给予支持!!!谢谢!!!!!!

------解决方案--------------------
http://blog.csdn.net/axman/archive/2009/03/12/3984103.aspx
------解决方案--------------------
2.TYPE_SCROLL_INSENSITIVE,双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来。
3.TYPE_SCROLL_SENSITIVE,双向滚动,并及时跟踪数据库的更新,以便更改ResultSet中的数据
http://blog.csdn.net/axman/archive/2009/03/12/3984103.aspx
这个问题我在几年前说过,但今天再次从CSDN上看到有人问这个问题,可以看出,真正懂这个问题的人1%都不到。
我再次把这个问题写在这里,希望光临我的BLOG的人能真正了解它。

我们先来做一个例子,在例子中我用的是mysql-essential-5.1.30-win32版。

来跟我做以下几个命令:

mysql> create database axman;
mysql> use axman;
mysql> create table axmantest(
-> id int(4) not null auto_increment primary key
-> name varchar(20));

mysql> insert into axmantest (name) values ('axman')
mysql> insert into axmantest (name) values ('sager')
mysql> insert into axmantest (name) values ('p4');

OK,写一个测试程序:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;


public class MainTest {
 public static void main(String[] args) throws Exception{
  
Class.forName("org.gjt.mm.mysql.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/axman?useUnicode=true&characterEncoding=UTF-8","root","password");
Statement stmt = conn.createStatement(ResultSet.CONCUR_UPDATABLE, ResultSet.TYPE_SCROLL_SENSITIVE);
ResultSet rs = stmt.executeQuery("select * from axmantest");