Beehive数据库操作使用示例
2005-01-14 17:09
786 查看
在Beehive PageFlow Tutorial中有过一些关于Beehive Data control的介绍,这里将通过一个例子,具体说明如何运用Beehive build-in的数据控制机制来完成数据库的相关操作。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
1. 首先,需要对数据库连接进行配置。
Beehive内置的数据库是derby。如果你希望使用其他数据库,就需要修改一些源码,该文件位于BEEHIVE_HOME/samples/controls-db/src/dbControl/下面。在文件DatabaseControlImpl.jcs中可以重新设置数据库的URL,例如要使用SQL Server 就可以做如下修改:
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
也可以按需求修改其他源文件。然后利用Ant工具重新编译并打包成dbControl.jar,放到web应用的相应位置(一般为WEB-INF/lib下面)即可。
2. 定义数据库操作。
我们需要创建一个jcx文件来定义所需的数据库相关操作,下面通过一个例子来说明如何完成该操作。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
圆圈代表action,方块代表page
在该例中,我们在首页点击相应链接跳转到displaydata.jsp,在这里将数据库操作的结果展示出来。因此show action是核心,由它进行一系列的数据库操作并将结果输出给下个页面。Beehive使用自己的机制封装了数据库操作的具体实现,因此在show方法中,相关的代码量很少。这个例子中我们需要创建如下文件:
l Project_home/WEB-INF/src/dbcontroller/ MyFirstDBControl.jcx
l Project_home/WEB-INF/src/forms/Employee.java
l Project_home/Controller.jpf
l Project_home/*.jsp
注意:src目录下面可以根据自己的需要建立包结构,与import相对应就可以。
MyFirstDBControl.jcx
MyFirstDBControl首先定义了数据库连接的JNDI属性,接口主体则定义了能够完成的数据库操作。注意要引入相应的数据库表的持久类,即操作对象。这里分别定义了建表,删表,以及对记录的增删查改操作。对于查询,可以定义不同的返回类型以符合需求。还可以在@SQL里增加maxRows属性,控制返回的记录个数。
Employee是这个例子中用到的数据表,它有三个字段,id、name和age。我们需要创建该表对应的持久类forms/Employee.java,注意到beehive需要将该类的成员变量声明为public的。
Employee.java
3. 在Controller中调用数据库操作。
有了上面两个文件的支持,我们就可以编辑page Flow里的核心文件Controller.jpf了。
Controller.jpf
可以看到,在show方法中我们调用了selectEmployee方法,查询id为1的用户,返回值为Employee类型。然后将结果赋给一个request的变量,在页面中便可以使用该变量引用查询结果,如下所示:
<p>Name:<netui:span value="${requestScope.data.name}"/>
<p>Age:<netui:span value="${requestScope.data.age}"/>
这里,查询结果是一条记录,返回类型为对应的持久类。如果是多条记录,我们可以用Vector来作为查询结果的容器,并将之传给页面显示。代码如下:
相应地,页面也需要做些修改来展示多条记录。可以直接使用Beehive提供的标签<netui-data:repeater>,它专门用于显示以集合形式存储的数据,可以是数组,或者Vector等。
displaydata.jsp
displaydata页面将以表格的形式显示Employee表中所有的记录,如下图所示:
1. 首先,需要对数据库连接进行配置。
Beehive内置的数据库是derby。如果你希望使用其他数据库,就需要修改一些源码,该文件位于BEEHIVE_HOME/samples/controls-db/src/dbControl/下面。在文件DatabaseControlImpl.jcs中可以重新设置数据库的URL,例如要使用SQL Server 就可以做如下修改:
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
也可以按需求修改其他源文件。然后利用Ant工具重新编译并打包成dbControl.jar,放到web应用的相应位置(一般为WEB-INF/lib下面)即可。
2. 定义数据库操作。
我们需要创建一个jcx文件来定义所需的数据库相关操作,下面通过一个例子来说明如何完成该操作。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
圆圈代表action,方块代表page
在该例中,我们在首页点击相应链接跳转到displaydata.jsp,在这里将数据库操作的结果展示出来。因此show action是核心,由它进行一系列的数据库操作并将结果输出给下个页面。Beehive使用自己的机制封装了数据库操作的具体实现,因此在show方法中,相关的代码量很少。这个例子中我们需要创建如下文件:
l Project_home/WEB-INF/src/dbcontroller/ MyFirstDBControl.jcx
l Project_home/WEB-INF/src/forms/Employee.java
l Project_home/Controller.jpf
l Project_home/*.jsp
注意:src目录下面可以根据自己的需要建立包结构,与import相对应就可以。
MyFirstDBControl.jcx
package dbcontroller; import java.sql.SQLException; import java.io.Serializable; import java.util.Iterator; import java.util.HashMap; import javax.sql.RowSet; import org.apache.beehive.controls.api.bean.ControlExtension; import dbControl.DatabaseControl; import dbControl.DatabaseControl.ConnectionDataSource; import dbControl.DatabaseControl.SQL; import forms.Employee; @ControlExtension @ConnectionDataSource(jndiName="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Test;user=sa;password=sa") //配置数据库连接属性 public interface MyFirstDBControl extends DatabaseControl { @SQL(statement="CREATE TABLE Employee (id INT PRIMARY KEY NOT NULL, " + "name VARCHAR(50), age INT)") public void createTable() throws SQLException; @SQL(statement="DROP TABLE Employee") public void dropTable() throws SQLException; @SQL(statement="INSERT INTO Employee " + "(id, name, age) " + "VALUES ({u.id}, {u.name}, {u.age})") public void insertEmployee(Employee u) throws SQLException; @SQL(statement="UPDATE Employee SET age = {age} WHERE id = {id}") public void changeTitle(int id, String title) throws SQLException; @SQL(statement="DELETE FROM Employee WHERE id = {id}") public void deleteEmployee(int id) throws SQLException; @SQL(statement="SELECT name FROM Employee") public String[] selectAllName() throws SQLException; @SQL(statement="SELECT * FROM Employee WHERE id={id}") public Employee selectEmployee(int id) throws SQLException; @SQL(statement="SELECT * FROM Employee ORDER BY id") public Employee[] selectEmployees() throws SQLException; @SQL(statement="SELECT * FROM Employee ORDER BY id", iteratorElementType=Employee.class) public Iterator selectEmployeesWithIterator() throws SQLException; @SQL(statement="SELECT * FROM Employee ORDER BY id") public HashMap selectEmployeeWithHashMap() throws SQLException; @SQL(statement="SELECT * FROM Employee ORDER BY id", maxRows=1) public Employee[] selectOneEmployee() throws SQLException; @SQL(statement="select count(*) from Employee") public Integer getCount() throws SQLException; //返回int型的一定要定义返回类型为Integer } |
|
Employee是这个例子中用到的数据表,它有三个字段,id、name和age。我们需要创建该表对应的持久类forms/Employee.java,注意到beehive需要将该类的成员变量声明为public的。
Employee.java
package forms; public class Employee { public Integer id; public String name; public int age; public Employee(Integer id, String name, int age) { this.id = id; this.name = name; this.age = age; } public Employee(Integer id) { this.id = id; } public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } } |
|
有了上面两个文件的支持,我们就可以编辑page Flow里的核心文件Controller.jpf了。
Controller.jpf
import javax.servlet.http.HttpSession; import org.apache.beehive.netui.pageflow.Forward; import org.apache.beehive.netui.pageflow.PageFlowController; import org.apache.beehive.netui.pageflow.annotations.Jpf; import forms.Employee; //应用中所需的持久类 import dbcontroller.MyFirstDBControl; //应用中所需的数据库操作的定义文件 import org.apache.beehive.controls.api.bean.Control; //用来解释@Control,将MyFirstDBControl接口实现成bean,并完成实例化工作。 |
@Control public MyFirstDBControl myControl; public Employee u; @Jpf.Action( forwards={ @Jpf.Forward(name="success", path="index.jsp") } ) protected Forward begin() { return new Forward("success"); } @Jpf.Action( forwards={ @Jpf.Forward(name="success", path="displaydata.jsp") } ) protected Forward show() throws java.sql.SQLException{ u = myControl.selectEmployee(1); getRequest().setAttribute("data",u); return new Forward(“success”); } |
<p>Name:<netui:span value="${requestScope.data.name}"/>
<p>Age:<netui:span value="${requestScope.data.age}"/>
这里,查询结果是一条记录,返回类型为对应的持久类。如果是多条记录,我们可以用Vector来作为查询结果的容器,并将之传给页面显示。代码如下:
………….. @Control public MyFirstDBControl myControl; public Vector u; ………….. protected Forward show() throws java.sql.SQLException{ u = new Vector(); Employee[] es = myControl.selectEmployees(); for(int i=0;i<es.length;i++) { u.add(es[i]); } return new Forward(“success”); } |
|
displaydata.jsp
<netui-data:repeater dataSource="pageFlow.u"> <netui-data:repeaterHeader> <table border="1"> <tr> <td><b>id</b></td> <td><b>name</b></td> <td><b>age</b></td> </tr> </netui-data:repeaterHeader> <netui-data:repeaterItem> <tr> <td> <netui:label value="${container.item.id}" /> </td> <td> <netui:label value="${container.item.name}" /> </td> <td> <netui:label value="${container.item.age}" /> </td> </tr> </netui-data:repeaterItem> <netui-data:repeaterFooter> </table> </netui-data:repeaterFooter> </netui-data:repeater> |
|
id | name | age |
1 | candy | 23 |
2 | nick | 24 |
3 | keller | 25 |
相关文章推荐
- android listview综合使用示例_结合数据库操作和listitem单击长按等事件处理
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- Python使用Flask-SQLAlchemy连接数据库操作示例
- android listview综合使用示例_结合数据库操作和listitem单击长按等事件处理
- java使用jdbc操作数据库示例分享
- android简单的数据库使用查询操作示例
- PHP程序中使用PDO对象实现对数据库的增删改查操作的示例代码
- PHP程序中使用PDO对象实现对数据库的增删改查操作的示例代码
- android listview综合使用示例_结合数据库操作和listitem单击长按等事件处理
- Flask框架使用DBUtils模块连接数据库操作示例
- 使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
- Android sqlite数据库操作通用框架AHibernate(一)-CRUD示例和使用步骤
- android listview综合使用示例_结合数据库操作和listitem单击长按等事件处理
- android listview综合使用示例_结合数据库操作和listitem单击长按等事件处理
- 使用XML封装数据库操作语句的实现(zz)
- tornado开发学习之2.输入输出,数据库操作,内置模板,综合示例
- 使用Map存储对象并进行操作示例
- 使用python将mdb数据库文件导入postgresql数据库示例
- Hive命令行经常使用操作(数据库操作,表操作)
- 使用Hibernate编写通用数据库操作代码