3,null int i=rs.getInt("age"); if(!rs.wasNull())....//RecordSet::wasNull()用来检查null 4,存取大字符串和二进制文本 对于数据库中longvarchar和langvarbinary进行流操作 ResultSet rs=stmt.executeQueryString("select ..."); BufferedReader br=new BufferedReader(new InputStream(rs.getAsciiStream("vol1")));//长文本串 BufferedReader br=new BufferedReader(new InputStream(rs.getUnicodeStream("vol1"))); BufferedReader br=new BufferedReader(new InputStream(rs.getBinaryStream("vol2")));//长二进制文本 //取数据必须在rs.getAsciiStream(), rs.getUnicodeStream(), rs.getBinaryStream()等之后马上进行 五,浏览ResultSet 1,JDBC2.0提供了更多浏览ResultSet的方法 首先,确定你的jdbc驱动程序支持jdbc2.0 其次,由Connection生成Statement时要指定参数 Statement stmt=con.getStatement("游标类型", "记录更新权限"); 游标类型: ResultSet.TYPE_FORWORD_ONLY:只可以向前移动 ResultSet.TYPE_SCROLL_INSENSITIVE:可卷动。但是不受其他用户对数据库更改的影响。 ResultSet.TYPE_SCROLL_SENSITIVE:可卷动。当其他用户更改数据库时这个记录也会改变。 记录更新权限: ResultSet.CONCUR_READ_ONLY,只读 ResultSet.CONCUR_UPDATABLE,可更新
getStatement()缺省参数:getStatement(ResultSet.TYPE_FORWORD_ONLY, ResultSet.CONCUR_READ_ONLY) 2,如果ResultSet是可卷动的,以下函数可以使用: rs.absolute()//绝对位置,负数表示从后面数 rs.first()第一条 rs.last()最后一条 rs.previoust()前一条 rs.next()后一条 rs.beforeFirst()第一条之前 rs.afterLast()最后之后 rs.isFirst(),rs.isLast(),rs.isBeforeFirst(),rs.isAfterLast 注意,刚打开的时候是处于第一条记录之前的 六,更新数据库 1,stmt.executeUpdate("strSql"),strSql是一条sql更新语句。update,insert,delete返回影响到的条数 2,stmt.execute()方法在不知道sql语句是查询还是更新的时候用。如果产生一条以上的对象时,返回true,此时可用 stmt.getResultSet()和stmt.getUpdateCount()来获取execute结果,如果不返回ResultSet对象则返回false. 3,除了Statement的executeUpdate之外还可以用ResultSet: rs.updateInt(1,10); rs.updateString(2,"sfafd"); rs.updateRow(); 七,使用预编译PreparedStatement PreparedStatement对象和Statement对象类似,都可以用来执行SQL语句。不同在于,数据库会对PreparedStatement的SQL语句进行预编译,而且仍旧能输入参数并重复执行编译好的查询速度比未编译的要快。 PreparedStatement stmt=con.preparedStatement("Insert Into users(userid, username) values(?,?)"); stmt.clearParameters(); stmt.setInt(1,2); stmt.setString(2,"Big"); stmt.executeUpdate(); 八,执行存储过程 1,JDBC调用存储过程,并使用存储过程的返回值。这样可以将处理工作分为服务端和客户端两部分,并大大加快系统的设计和开发的时间。比如可以重复使用服务器上的组件。使用存储过程之后大量诸计算工作可以交给数据库服务器来处理,这将降低Web服务器的负载,从而提高整个系统的性能。 2,有两个表UserMain{UserID,UserName,UserType},UserRef{BrefID, UserID, UserBrief} 下面的存储过程可以接受jdbc传来的参数,新增内容到UserMain和UserRef,并输出一个OutUserID. CREATE PROCEDURE ap_adduser ( @OutUserID int output, //此为输出参数,output标记 @UserName varchar(25), //参数表示方法:"@XXX"为变量名,"变量名 类型 [output]" @UserType tinyint, @UserBrief varchar(255), ) AS Declare @UserID int //定义局部变量 insert into UserMain(UserName, UserType) values(@UserName,@UserType) select @UserID=@@IDENTITY //赋值用select,此处自动获得ID insert into UserRef(UserID, UserBrief) select @OutUserID=@UserID GO/*结束,基本结构: CREATE PROCEDURE procedureName( parameters ) AS actions GO */ |