kingbase程序员参考手册内容摘要:

向它所涉及的数据库传送 SQL 语句。 通过 JDBC 对可被发送的 SQL 语句类型不加任何限制,它允许使用特定的数据库语句。 Kingbase JDBC Driver 提供了三个类,用于向数据库发送 SQL 语句, Connection 接口中的三个方法可用于创建这些类的实例。 ( 1) Statement 对象:由方法 createStatement 所创建,用于发送简单的 SQL 语句。 ( 2) PreparedStatement 对象:由方法 prepareStatement 所创建,用于发送带有一个或多个输入参数( IN 参数)的 SQL 语句。 ( 3) CallableStatement 对象:由方法 prepareCall 所创建,用于执行 SQL 存储过程。 程序员参考手册 5 程序员参考手册 Kingbase ES JDBC 用户使用手册 Statement对象 Statement 对象由方法 createStatement 所创建, Statement 对象用于发送简单的 SQL 语句,来进行查询或对数据库进行更新。 例如: Statement stmt=()。 (“ update table1 set col1=1” )。 PreparedStatement 对象 数据库服务器在处理 SQL 语句时都是首先生成该语句的执行计划,然后执行。 对于有些应用需要反复处理具有相同执行计划的语句,就会浪费处理资源,这时就可以使用 PreparedStatement 对象,这样,数据库服务器可以提前取得 SQL 语句,并为它创建查询计划,以后该语句就可以多次执行。 PreparedStatemen对象由方法 prepareStatement所创建,用于发送 带有一个或多个输入参数( IN参数)的 SQL 语句。 PreparedStatement 对象具有一组 setXXX()方法,用于设置 IN 参数的值。 执行语句时,这些 IN参数将被送到数据库中。 处理一个带参数的 SQL 语句通常包括以下过程: (1) 生成一个 PreparedStatement 对象,对语句进行预编译。 (2) 设置参数。 (3) 执行语句,获取结果。 例如 : PreparedStatement pstmt = ( “ UPDATE EMPLOYEES SET SALARY=? WHERE ID=?” )。 int i。 for(i=0。 I。 I++) { (1,employee[i].salary)。 (2, employee[i].id)。 Kingbase ES 金 鼎 数 据 库 管 理 系 统 6 ()。 }  注意: Kingbase JDBC 目前的版本还不能获取参数的元数据信息。 CallableStatement 对象 提供了对调用数据库中存储过程的支持,用户可以在高级语言中使用服 务器端的存储过程。 CallableStatement 对象由方法 prepareCall 所创建,用于执行存储过程。 CallableStatement 对象从 PreparedStatement 中继承了用于处理 IN 参数的方法,而且还增加了用于处理 OUT 参数和 INOUT 参数的方法。 CallableStatemen 对象由方法 prepareCall 所创建,用于发送带有一个或多个输入参数( IN 参数)和输出参数( OUT 参数)或输入输出参数( INOUT 参数)的 SQL 语句。 CallableStatement 对象继承了 PreparedStatement 的 setXXX()方法,用于设置 IN 参数的值。 在执行语句前必须用 CallableStatement 的特有方法 registerOutParameter()对 OUT/INOUT 参数进行注册 ,语句执行之后,可以用 getXXX()方法获取参数值。 处理一个存储过程的 SQL 语句通常包括以下过程: (1) 生成一个 CallableStatement 对象,对语句进行预编译。 (2) 提取参数信息。 (3) 设置参数。 (4) 注册输出参数。 (5) 执行语句。 (6) 获取输出参数的返回值。 要获取参数的元数据信息可以直接用从 PreparredStatement 类 的 继 承 的getParameterMetaData()方法来实现 如: ParameterMetaData pmd=()。 例如 : CallableStatement cstmt = (“ call procName(?,?,?)” )。 //参数 1为 INOUT 类型,参数 2为 IN 类型,参数 3 为 OUT 类型 //注册输出参数 (1,)。 程序员参考手册 7 程序员参考手册 Kingbase ES JDBC 用户使用手册 (3,)。 //获取参数信息 ParameterMetaData pmd=()。 //设置输出参数 (1,5)。 (2, )。 //执行语句 ()。 //获取输出参数值 int I=(1)。 float f=(3)。 查询结果集的处理 在建立了到服务器端的连接之后,我们可以在该连接上执行查询语句,并返回结果集对象,具体方法如下: ( 1)创建一个语句对象( Statement,PreparedStatement)。 Statement stmt=()。 ( 2)执行一条 SQL 查询语句,并返回结果集。 ResultSet rs=(“ select * from table1” )。 或者 , (“ select * from table1” )。 ResultSet rs=()。  注意 : 用户在创建语句的同时还可以指定结果集的类型、并发性和 hold 方式。 目前, Kingbase ES 的 JDBC Driver 支 持 的 结 果 集 类 型 是 : TYPE_FORWARD_ONLY 和TYPE_SCROLL_INSENSITIVE,暂时不支持 TYPE_SCROLLSENSITIVE。 结果集的并发性支持: CONCUR_READ_ONLY 和 CONCUR_UPDATABLE。 结果集的 hold 方式支持 CLOSE_CURSORS_AT_COMMIT,而对 HOLD_CURSORS_OVER_COMMIT 暂时不支持。 在生成结果集时,用户还可以获取结果集的元数据( MetaData),即对结果集中各列的描述信息。 例: ResultSetMetaData rsmd=()。 Kingbase ES 金 鼎 数 据 库 管 理 系 统 8 结果集的读取 在 ResultSet 第一次创建时,指针定位在第一行的前面,通过 ResultSet 中提供的各个定位函数使 ResultSet 指针指向实际要访问的数据行,然后使用 getXXX 方法读取结果集中当前行或列的值。 具体来讲, ResultSet 中的定位函数有: next, absolute, afterLast, beforeFirst, first,last, previous, moveToInsertRow, moveToCurrentRow。 对于 TYPE_FORWARD_ONLY 类型的结果集只能使用 next()方法移动 ResultSet 指针。 例如: Statement stmt=()。 ResultSet rs=(“ select * from table1” )。 while (()) ( (1))。 对结果集的更新 除了利用更新语句来对数据库进行更新以外,我们还可以通过对结果集进行更新,来达到更新数据库的目的。 但要注意:这种情况下,结果集的并发性类型必须为 CONCUR_UPDATABLE。 用户对结果集的更新同时作用于数据源。 例如 : Statement stmt=(TYPE_SCROLL_INSENSITIVE, CONCUR_UPDATABLE)。 ResultSet rs=(“ select * from table1” )。 ()。 (1,21)。 //修改当前行第一列的值为 21。 ()。 //作用于数据源 如果不支持可更新的结果集,我们还可以采用定位更新的方式来对数据库进行更新。 该方法通过游标名使得多个 Statement 对象作用到同一个结果集。  注意:要进行定位更新,必须将该连接的提交模式设置为非自动提交。 否则可能会由于第二条语句的执行导致第 一条语句提交而出现错误。 例如: Statement stmt=()。 程序员参考手册 9 程序员参考手册 Kingbase ES JDBC 用户使用手册 (“ cursor1” )。 ResultSet rs=(“ select author from table1 for update” )。 ()。 String cursorName =()。 Statement stmt2=()。 Int updateCount=(“ update table1 set author=” Tom” where current of “ + cursorName)。 批处理 Kingbase ES JDBC 支持 SQL 语句的批处理功能。 Statement 和它的子类通过 addBatch()方法支持批处理功能。 例如: Statement stmt = ()。 int[] rows。 for(int i=0。 i。 i++) { (“ UPDATE EMPLOYEES SET SALARY=” + employees[i].salary + “ WHERE ID=” + employee[I].id)。 } rows = ()。 在批处理中也可以使用 PreparedStatement 对象,例如: PreparedStatement stmt = ( “ UPDATE EMPLOYEES SET SALARY=? WHERE ID= ?” )。 int[] rows。 for(int i=0。 i。 i++) { Kingbase ES 金 鼎 数 据 库 管 理 系 统 10 (1,employee[i].salary)。 (2, employee[i].id)。 } rows = ()。 事务处理 事务的提交与回滚 应用程序创建一个连接时,该连接默认事务自动提交,用户可以在 Connection 对象中设置事务提交模式(分为自动提交和非自动提交两种),方法如下: (boolean autoCommit)。 当 autoCommit 为 true 时,表示为自动提交模式,这种情况下,该连接下的所有语句在执行完之后都会自动提交。 否则为非自动提交模式。 在非自动提交模式下,用户在一个事务执行完成之后需要显式调用 方法来提交事务。 方法如下: ()。 否则,当该事务需要回滚时,则需要显式调用 方法。 ()。 事务的隔离级别 Kingbase 支 持 的 事 务 隔 离 级 别 有 : TRANSACTION_READ_COMMITTED 和TRANSACTION_SERIALIZABLE,默认的事务隔离级别为 TRANSACTION_READ_COMMITTED。 用 户 可 以 通 过 来 指 定 事 务 隔 离 级 别 , 通 过 来读取当前事务隔离级别。 大对象数据的处理 在 Kingbase ES 中 ,大对象 数据 用于保存那些无法在通常 SQL 表里面保存的数据 ,例如声音、图象、大文本等。 在 Kingbase ES 中提供了用来存储大对象数据的数据类型 BLOB,用来存储大数据 程序员参考手册 11 程序员参考手册 Kingbase ES JDBC 用户使用手册 量的二进制数据。 JDBC 中提供了两个接口用于处理大对象数据: 和 , Kingbase ES JDBC 实现了这两个接口。  注意: ,必须使用 setAutoCommit(false) 方法 关闭自动提交设置。 ES 目前的版本还没有实现 CLOB 数据类型,因此 Kingbase ES JDBC 目前的版本实现 CLOB 对象时是借助于 Kingbase ES 的 BLOB 类型数据的存储方式。 大对象数据的读取 同检索其他数据类型一样,用同样的方法可以从一个结果集中检索 Blob 和 Clob 这两种数据类型的数据,该获得方法为: Blob b=()。 Clob c=()。 与其它数据类型不同,调用 getBlo。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。