|
快速应用JDBC控件访问数据库资源(4) 修改Tomct配置文件,创建DataSource资源
·如何创建Tomcat环境下的DataSource资源请参考Tomcat的帮助文档。
修改Web应用的配置文件web.XML,增加如下内容,增加对资源的引用
Datasource example jndi/samplesDataSource javax.sql.DataSource Container ·创建访问Tomcat服务器Jndi上下文的类JndiContextFactory
JndiContextFactory类继承自JdbcControl.JndiContextFactory父类,覆盖父类中的抽象方法----getContext(),清单3 中显示了JndiContextFactory类定义和实现的完整代码。
清单3 src\ org\vivianj\beehive\controls\examples\controls\
jndicontext\JndiContextFactory.java
1. package org.vivianj.beehive.controls.examples.controls.jndicontext; 2. 3. import java.util.Hashtable; 4. 5. import javax.naming.Context; 6. import javax.naming.InitialContext; 7. 8. import org.apache.beehive.controls.system.jdbc.JdbcControl; 9. 10. /** 11. * JndiContextFactory 用于从Tomcat服务器中获取访问JNDI内容的上下文环境 12. */ 13. public class JndiContextFactory extends JdbcControl.JndiContextFactory { 14. /** 15. * 获得本地Tomcat服务器中访问JNDI内容的上下文环境 16. * 17. */ 18. public Context getContext() { 19. 20. Context ctx = null; 21. 22. try { 23. ctx = (Context)(new InitialContext().lookup("java:/comp/env")); 24. } catch (Exception e) { 25. 26. } 27. 28. return ctx; 29. } 30. }
我们可以使用ConnectionDataSource注释和新创建的JndiContextFactory类来注释JDBC控件了。
下面的代码片断就是一个简单的例子,使用这段代码注释的JDBC控件,调用任何业务方法时,将通过本地Tomcat服务器上、JNDI名为“jndi/ samplesDataSource”的DataSource资源获取数据库连接。
@JdbcControl.ConnectionDataSource( jndiName = "jndi/samplesDataSource", jndiContextFactory=JndiContextFactory.class)
ConnectionOptions注释
ConnectionOptions可以用于定义访问数据库时的一些扩展特性,可以选择性的和ConnectionDataSource或者ConnectionDriver一起使用。ConnectionOptions支持三个参数:readOnly、resultSetHoldability、typeMappers。
·readOnly
boolean类型,如果设置为true,数据库连接将优化为ReadOnly的访问方式,但是仍然可以进行更新和删除操作。默认为false。
·resultSetHoldability
org.apache.beehive.controls.system.jdbc.JdbcControl.HoldabilityType类型,可以选择为HOLD_CURSORS_OVER_COMMIT或者CLOSE_CURSORS_AT_COMMIT,用于设置ResultSet指针的关闭策略,默认值是CLOSE_CURSORS_AT_COMMIT,表示在每次commit之后关闭ResulSet对象指针。
·typeMappers
org.apache.beehive.controls.system.jdbc.JdbcControl.TypeMapper数组类型。设置SQL自定义类型和Java类型之间的映射。TypeMappers类中指定的Java类型必须实现java.sql.SQLData接口
SQL注释
SQL注释用于描述JDBC控件继承类中定义的方法,主要设置被注释方法调用时需要执行的SQL语句和其它功能。我们可以回头看一看清单2,里面的每一个业务方法之前均有@SQL注释。
SQL注释支持很多属性设置,包括statement、arrayMaxLength等,其中最重要的就是statemet,本节中我们讨论statement属性的设置,其他属性的设置方法请大家参考Beehive的帮助文档,在大多数的情况下最好不要设置这些属性,因为里面可能用到JDBC3.0规范中的新特性,而现在很多数据库驱动并不支持这些特性。
statement内容描述了我们需要完成的业务逻辑,在statement中我们可以使用变量的方式访问被注释方法中传递进来的参数,JDBC控件的解析器在运行时保证这些参数的正确传递。
statement编写规则
SQL注释的statement属性提供了被注释方法调用时执行的SQL语句的内容,SQL语言中可以使用JdbcControl提供的特殊语法直接访问Java对象或者它的属性。编写statement必须满足以下条件。
·statement中的sql语句编写方式和要求参考目标数据库的sql语句编写方式和要求。
·statement中使用{…}声明变量来获取业务方法调用时所传递参数或者它的属性。
·statement中变量声明的第一个字符和最后一个字符不能是空格,也就是说不能出现{ a}或者{a }这样的情况,否则可能执行结果和您期望的会有很大的出入
·{}中间的内容是大小写敏感的。如果传入的参数名为a,而{}中引用为A,他们之间将无法匹配。
·{}中间的内容可以是参数名(传入的参数是Java基本数据类型时适用),或者是参数对象的某个成员变量(传入的参数是Java类对象时)。
·{}中引用Java对象的字段时,必须保证该字段符合以下条件之一,否则Java控件调用时将会返回一个违例:
* 该字段被public关键字声明为公共字段,可以使用 对象名.字段名 直接访问
* 该字段被private关键字声明为私有字段,但是提供了公共的getter方法,可以通过 对象名.get属性名 方式访问。
* 该Java对象继承了java.util.Map接口,可以通过 对象名.get(“属性名”)方式访问
statement中引用业务方法中传递的参数时必须保证这些参数和对应的数据表的字段类型保持一致,不能出现数据表的字段是NUMBER类型,而对应的参数却是String类型。
当业务方法传递的日期或者时间类型的参数需要在statement中被引用时,请保证这些传递的日期和时间使用的是java.sql包中的对应类,比如我们应该使用java.sql.Date而不要使用java.util.Date来传递日期类型的变量给statement
statement中不能出现单引号。如果确实需要使用单引号,必须采用特别的方法解决。
statement创建实例
·不从业务方法获取参数
下面的业务方法声明可以从demo表中取出所有所有记录,返回一个Demo对象的数组。
@SQL(statement=“select * from demo” )
|