JDBC
来源:互联网 发布:深入浅出mfc源码 编辑:程序博客网 时间:2024/04/28 09:32
DriverMannager
Public static Connection synchronized getConnection( String url ) throws SQLException;
Public static Connection synchronized getConnection( String url, java.util.Properties info);
//Properties包含了用于特定数据库的所需要的参数。
Public static Connection synchronized getConnection( String url, String user , String password);
注:所有这些方法都是同步的,意味着多个应用程序不能直接得到同一个Connection对象。
Public static void setLotinTimeout(int seconds);
Public static void getLotinTimeout();
可滚动的和可更新的结果集
在JDBC2.1以前,在缺省的情况下,执行语句所创建的结果集只能向前滚动。也就是说只能用next()方法在结果集中导航。当到达最后一条记录时,next()方法就会返会false,而不能取得更多的纪录信息。
可滚动的结果集 包括向前滚动和向后滚动
滚动的相关性 滚动非相关的结果集表示查询执行后的一个静态快照。可滚动的相关结果集,在查询执行后,对数据的修改很敏感,因此,它表示的是能够知道数据变化的动态的快照。
可修改的结果集 结果集在缺省的情况下是只读的。也就是说,结果集中的内容是只读的,不能被修改。可修改的结果集,当结果被修改后,修改操作就会按照结果集中的数据修改原始数据。
可滚动的结果集
java.sql.ResutSet接口定义了三种类型的结果集:
TYPE_FORWARD_ONLY
TYPE_SCROLL_INSENSITIVE 双向滚动
TYPE_SCROLL_SENSITIVE 这种结果集,在结果集得到后,对数据所做的修改很敏感。例如,如果查询返回十行数据,而另一个应用程序删除了另外的两行,那这个结果集中就只用八行数据了。
与游标位置有关的方法:
public boolean isBeforeFirst( ) throws SQLException
public boolean isAfterLast( ) throws SQLException
public boolean isFirst( ) throws SQLException
public boolean isLast( ) throw SQLException
用于滚动的方法:
public boolean first( ) throws SQLException
public boolean last( ) throws SQLException
public boolean absolute( int row ) throws SQLException
//absolute把游标位置移到结果集中特定的行.行参数可为正或者负,负表示把游标向相反的方向移动,为正向前移动.
Public boolean relative( int row ) throws SQLException
//这个方法根据游标的当前位置把游标移动到另一个项对位置.当游标位置无效时,不应该调用这个方法.例如,循环调用next( )直到next( )返回false(表示到达结果集的最后),就不应该调用这个方法.在调用relative( )之前,应当用absolute( ),first( )或last( )方法把游标置于有效的位置.
Public boolean previous( ) throws SQLException
数据获取方向和尺寸的方法:
public void setFetchDirection( int direction ) throws SQLException
//这个方法获取数据方向.java.sql.ResultSet接口定义了三个定义获取方向的常数ResultSet.FETCH_UNKNOWN,ResultSet.FETCH_FORWARD和ResultSet.FETCH-REVERSE.这些常数指明了结果集中当前的数据获取方向.
Public void setFachSize( ) throws SQLException
//这个告诉JDBC驱动器,应当从数据库中要获取的行的数量.注意,当获取尺寸设置为1时,那么在调用next( )时,结果集每次都会从数据库中获取数据.通过设置较大的获取尺寸,能够一次获取更多的行数,从而能够优化获取过程.
可修改的结果集:
可修改的结果集,当结果集被修改后,更新操作会按照当前集中的数据修改原始数据。
CONCUR_READ_ONLY
CONCUR_UPDATEABLE 可修改的。(在ResultSet中定义)
1.更新一行
使用update***( )方法更新结果集当前行中的元素
public void updateTimestamp( int columnIndex , Timestamp x)
public void updateTimestamp( String columnName ,Timestamp x)
当调用了这些方法后,应当调用updateRow( )方法来更新所做的修改.另外,也可以调用cancelRowUpdate( )方法取消已完成的修改.
RowUpdate()方法用于确定当前行是否被修改了.返回值取决于结果集是否能够探测到更新.
2.删除一行
可以调用deleteRow( )方法从结果集中删除当前行,并且提交道数据库.rowDeleted( )方法用于确定某行是否已经被删除.注意,一个被删除的行可能在结果集中占用一个空位置rowDeleted( )方法可以探测这个空位置.
3.插入一行
要在结果集中插入一行,并且提交到数据库,应当首先调用moveToInsertRow( )方法,调用moveToInsertRow( )会把游标移动到所插入的行.被插入的行是一个与可更新的结果集相关联的缓存行,调用update***( )方法设置行中的其他元素,这些结束后,应当调用insertRow( )方法最后在数据库中真正插入一行.
ResultSetMetaData
ResultSetMetaData metaData = rs.getMetaData( );
getColumenClassName( int i);//返回该列java数据类型的类名
getColumenTypeName( int I );//返回该列DB数据类型名
getColumnConut( ); //返回结果集中的列数.
getColumnLabel( int I );//返回打印数出和现实的建议列标题
getColumnName( int i);//获得列名
isAutoIncrement( int i );//列是否自动记数,为只读.
IsNullable( int I );//该列I是否可以放一个null值
关于事物支持
try {
//begin a transaction
connnection.setAutoCommit(false);
Statement statment = connection.createSatement();
//update table1
sttement.executeUpdate( " insert into table1~~~~~~~~~~~" );
//update table2
statment.executeUpdate( "update table table2~~~~~~~~~" );
if( something ){
//Business logic succeeded
statement.executeUpdate( "sqlString" );
connection.commit();
}else{
connection.roollback();
}
} catch (SQLException e) {
//Handle exception here
} finally{
//close the statment and connection
}