1. ResultSet光标控制
(1) 建立Statement或者PreparedStatement时,使用的是Connection的无参数的createStatement方法,如此以来,执行sql获得的ResultSet,将只能使用next方法逐条获得查询结果。
(2) 在建立Statement对象时指定resultSetType,可选参数有ResultSet.TYPE_FORWARD_ONLY、ResultSet.TYPE_SCROLL_INSENSITIVE与 ResultSet.TYPE_SCROLL_SENSITIV。默认是ResultSet.TYPE_FORWARD_ONLY,,也就是只能使用next()方法来逐条获得记录,指定第二个或第三个时,则可以使用ResultSet的afterLast()、previous()、absolute()、relative()等方法来移动以获得记录。TYPE_SCROLL_INSENSITIVE与TYPE_SCROLL_SENSITIVE的差别,在于能否获得ResultSet改变值后的数据。
(3) 另外必须指定resultSetConcurrency,有ResultSet.CONCUR_READ_ONLY与ResultSet.CONCUR_UPDATABLE两个参数可以设置,前者表示只能读取 ResultSet的数据,后者表示可以直接使用ResultSet来操作数据库,而不用通过sql语句的执行.默认为ResultSet.CONCUR_READ_ONLY。
2. ResultSet增加、修改、删除数据
(1) 增加某行数据
A、moveToInsertRow(),记录当前游标位置,将游标移动到插入行
B、使用updateXXX(column, value)方法来更新指定列数据。
C、使用insertRow()方法插入记录。
D、将游标指回原位,moveToCurrentRow()。
(2)修改某行数据
A、 absolute(int row),将游标移动到指定行。
B、使用updateXXX(column, value)方法来更新指定列数据。
C、使用updateRow()方法更新指定的行。
(3)删除某行数据
A、 absolute(int row),将游标移动到指定行。
B、使用deleteRow()方法删除记录。
String sql = "select * from mytable";
Class.forName ("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection ("jdbc:mysql://127.0.0.1:3306/test","root","root");
Statement st = conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = st.executeQuery (sql);
//-----start update one row information-----
rs.absolute (6);
rs.updateString ("PASSWORD","pwd6");
rs.updateRow ();
//-----end update one row information-----
//-----start insert one row information-----
rs.moveToInsertRow ();
rs.updateString ("name","yy7");
rs.updateString ("password","pwd7");
rs.insertRow ();
//-----end insert one row information-----
//-----start delete one row information-----
rs.last ();
rs.deleteRow ();
//-----end delete one row information-----
rs.absolute (1);
//移动到开头位置
rs.previous ();
while (rs.next ()){
System.out.println (rs.getInt ("no")+" "+rs.getString("name")+" "+rs.getString("password"));
}
rs.close ();
st.close ();
conn.close ();