AJAX for Java简单表数据查询实例
AJAX WebShop 3Java开发具有良好的支持,同时也提供了各种层次的后台服务开发接口,本系列文章对AJAX for Java的数据库应用编程方式进行全面介绍。
 
.数据表说明
例子采用了Access数据库,当然你也可以使用mysql 或其他类型数据库,数据库名称为:demo.mdb,表名为product,创建字段分别是PRODUCT_ID, PRODUCT_NAME, PRODUCT_PRICE, PRODUCT_AREA
 
.实现数据查询
首先启动AJAX WebShop 3,在File中选择“New Project”建立新工程。
 
在弹出的New Project对话框中设置projectname web server本例中设置projectname为:java_example和设置web server为:Java。如果要修改工程路径,请在Directory中设置要存放的路径。
 
首先我们要实现后台的数据库访问服务类,实现Java后台服务类的方法有几种,但都是使用XmlDataSet类,在3.0版本之前是使用XmlRequestXmlPost类,而XmlDataSet是这两个功能的集成,并提供了更简单易用的方法:
方法A:通过WebShop的向导产生基于BusinessObjectBean的类代码框架,然后在此基础上修改query_XMLupdate_XML方法
 
设置好New Project后,再打开“File”选择“New .Java Service”,在弹出的对话框内目录输入包名:demo,设置”Class Name”为:Simple,点击“OK“后,向导将按默认模板生成Java单表数据读取和数据提交的代码,修改代码中的数据库连接串、表名就可以了。
      
方法B       使用其他Java开发工具,建立基于BusinessObjectBean的类并覆盖query_XMLupdate_XML方法。
方法AB需要使用两个ServletQuery.classUpdate.class这两个Servletweb.xml中有配置。
方法C       使用其他Java开发工具,分别建立数据读取和数据提交的servletjsp,当然也可以建立您自己的框架与控制机制,比如用您的servlet控制调用相关的JavaBean,在JavaBean中实现数据读取和数据提交。此种方法也可以与现有的流行框架很好地融合。
 
不管采用以上何种方法主要涉及XmlDataSet类,常用的属性:maxRowsrecNo,常用的方法:opengetParamfillFieldsfillDatafillRowaddFieldappendsetValuesetRecordCountgetXmlsetError,详细请参考帮助文档。
 
简单读取数据的几种实现方法:
JavaBean数据读取方法
 
import joyistar.eip.bs.*;
import joyistar.eip.vo.*;
import java.sql.*;
 
public class Simple extends BusinessObjectBean {
    String drivers   = "sun.jdbc.odbc.JdbcOdbcDriver";
    String url       = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=database/demo.mdb";
    String tablename = "product";
    String username  = "";
    String password  = "";
   
    public Simple() {
    }
   
    public joyistar.eip.vo.XmlDataSet query_XML(joyistar.eip.vo.XmlDataSet xmlDataSet) throws Exception {
        Connection conn = null;
        String sql      = "";
        ResultSet rs    = null;
        Statement stmt  = null;
        try{
            System.setProperty("jdbc.drivers", drivers);
            conn = DriverManager.getConnection(url, username, password);
            sql  = "select * from " + tablename;
            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            rs   = stmt.executeQuery(sql);
            rs.last();
            xmlDataSet.setRecordCount(rs.getRow());
                     xmlDataSet.fillFields(rs);
                     xmlDataSet.fillData(rs);
         }
               catch(Exception e) {
            xmlDataSet.error = e.getMessage();
               e.printStackTrace();
        }
              finally {
            if(rs != null)
            rs.close();
            if(stmt != null)
            stmt.close();
            if(conn != null)
            conn.close();
        } 
        return xmlDataSet; 
    }   
 
JSP数据读取使用方法
<%@ page contentType="text/xml; charset=utf-8" %>
<%@ page import="joyistar.eip.vo.*" %>
<%@ page import="java.sql.*" %>
<%
    String drivers   = "sun.jdbc.odbc.JdbcOdbcDriver";
    String url       = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=database/demo.mdb";
    String tablename = "product";
    String username  = "";
    String password  = "";       
       Connection conn  = null;
    String sql       = "";
    ResultSet rs     = null;
    Statement stmt   = null;
    XmlDataSet xmlDataSet = new XmlRequest();
    try{
           xmlDataSet.open(request);
        System.setProperty("jdbc.drivers", drivers);
        conn = DriverManager.getConnection(url, username, password);
        sql  = "select * from " + tablename;
        stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
        rs   = stmt.executeQuery(sql);
        rs.last();
        xmlDataSet.setRecordCount(rs.getRow());
              xmlDataSet.fillFields(rs);
              xmlDataSet.fillData(rs);
              out.println(xmlDataSet.getXml());
              out.flush();
    }
       catch(Exception e) {
        xmlDataSet.error = e.getMessage();
              out.println(xmlDataSet.getXml());
              out.flush();
           e.printStackTrace();
    }
       finally {
        if(rs != null)
        rs.close();
        if(stmt != null)
                     stmt.close();
        if(conn != null)
            conn.close();
    } 
%>
在这里需要说明的是,如果带有参数的查询,需要加入类似以下取参数的代码:
        Param param1     = xmlDataSet.getParam("SALE_ID");
        if(param1!=null) {
            sql += " where SALE_ID="+param1.value;
        }
 
如果是JavaBean,需要使用Run->Build编译生成类文件(相关的路径在工程属性中可以查看),后台数据访问类建立好后,在“File”中选择“New Page”打开“New Page”对话框在“File Name”中设置页面名称,如本例“simple.htm”点击ok完成设置。
 
   webshop的元件选项板“Data Access ”,“DBControl”中,拖拉向表单加入DataSet和数据感应控件DBNavigatorDBEditDBGrid等,简单地可视化拖拉建立界面,点击组件,会在右侧出现相应属性。
       注意:AJAX for Java开发中DataSet的服务路径设置有几种方法,分别对应以上几种后台的开发方式,一种是设置DataSource的类名,另一种是设置OpenURLUpdateURL。如果设置了DataSource将系统优先采用这种方式。DataSource是用于JavaBean的方式,而 OpenURLUpdateURL适用于您的JSP、Servlet或框架。
选择DataSet1,在“DataSource”属性中添加Java Service类路径或在“OpenURL”属性中添加ServiceJSPServlet),这里设置DataSource为“demo/Simple”,如果是使用JSPServlet),这里可能是demo/simple_query.jsp
打开WebShop中的“Run”启动”Start WebServer”服务,内嵌的Tomcat将启动。
成功启动 WebServer”服务后,在DataSet1的“Fields”属性中添加数据字段,方法为点击右侧“”弹出Fields对话框,在页面单击右键,在弹出选项中选择“Add Field”在弹出的“Field List”中点击 “Refresh”会在列表中显示数据表 Product ”的字段名,全部选中后,点击“ok”完成设置.
 
 
设置好数据连接后,“DataSet1的“Active”属性设置为“true如图;
  同时选择DBGrid1DBNavigatorDBEdit等界面对象,在DataSet属性中选择数据源 “DataSet1”。完成数据库连接;另外,DBEdit需要选择设置DataField属性,指定要绑定的字段,点击“Run”查看运行效果。
 
       这里实现的是一个简单的表数据读取,后续的文章中我将介绍表数据提交、主从表及更高级的AJAX数据库应用编程。