发表用户:bj_meng
收集整理:James.Liu
相关讨论:http://www.mygis.com.cn/forum/dispbbs.asp?boardID=11&ID=3049
信息原始来源:bj_meng

文章标题:在jbuilderX中建立MapXtreme for Java4.7应用(bj_meng学习笔记 2004-5-25)

2004-05-25
1、 从页面上传入坐标,选取图元的疑惑:发现了问题的根源,在于电子地图在页面上显示时在四边上有空白的部分,坐标的起点从左上脚开始,这样点击坐标传递到java层后,该坐标却从电子地图的左上脚开始(不包括空白部分),所以选择的图元必然出现不正确的情况。不知道如何解决这个问题。如下图:
 
2、 今天做“抢险队伍组织”管理的功能。比较简单,就录入和查询。在服务端增加一个servlet,客户端增加两个页面。亲自动手做就是不一样,有很大的提高——我以前没有做过web页面,一大堆乱七八糟的东西,也够烦人的。好在DreamWeaver还挺好用。做的两个页面粗糙,没有经过美化,内容也比较少,不过却是初学者的入门好材料。Jsp的代码见相关的jsp文件,服务端的代码只给出主要的方法的代码,感兴趣的完全可以自己在jbx中自己编写一个servlet予以实现,难度不大,我在这里给出代码段的目的只是为了起到一个抛砖引玉的作用。本部分的内容也为那些对java中连接数据库的入门者提供一个相对简单的示例。
a) 在jsp页面端在rushTroopRpt.jsp中增加了一段代码,主要是通过Session对象获得从服务端返回的记录信息,以ArrayList对象保存,页面编译通过,但是没有把我记录表中唯一的一条记录返回,实在迷惑,正在抓紧检查。
b) 在rushTroop.jsp中主要实现录入和保存的工作,通过“保存”按钮,其动作设置为“提交表单”并采用“Post”方法,这样保存时自动调用服务端的,RushTroopServlet中的doPost方法,doPost方法调用SaveRushTroopRecord方法,从而完成了数据的保存。
DoPost方法的代码段:
  //Process the HTTP Post request
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws
      ServletException, IOException {
    doGet(request, response);
    /**
     * 保存抢险队伍信息
     */
    SaveRushTroopRecord(request);
  }
SaveRushTroopRecord方法的代码段:
  /**
   * 保存抢险队伍信息
   * @param request HttpServletRequest
   * @return boolean
   */
  private boolean SaveRushTroopRecord(HttpServletRequest request) {
    try {
      String rtName, rtNum, rtPrincipal, rtAddr, rtDis, rtTime, rtConnect,
          rtRemark;
      rtName = request.getParameter("txtName");
      rtNum = request.getParameter("txtNum");
      rtPrincipal = request.getParameter("txtPrincipal");
      rtAddr = request.getParameter("txtAddr");
      rtDis = request.getParameter("txtDis");
      rtTime = request.getParameter("txtTime");
      rtConnect = request.getParameter("txtConnect");
      rtRemark = request.getParameter("txtRemark");
      Statement stat;
      ChartBean cb = new ChartBean();
      stat = cb.getConnection().createStatement();
      String sSql = "INSERT INTO rushTroop(rtName, rtNum, rtPrincipal, " +
          "rtAddr, rtDis, rtTime, rtConnect, rtRemark) valueS('" +
          rtName + "', '" + rtNum + "', '" + rtPrincipal + "', '" +
          rtAddr + "', '" + rtDis + "', '" + rtTime + "', '" +
          rtConnect + "', '" + rtRemark + "')";
      System.out.println(sSql);
      stat.executeQuery(sSql);
      return true;
    }
    catch (Exception e) {
      e.printStackTrace();
      return false;
    }
  }
c) rushTroop.jsp上的“报表”的主要思想是:在按“报表”按钮时,进入rushTroopRpt.jsp,同时通过“get”方法调用服务端的doGet方法,在doGet方法中调用getRushTroopRecord方法读取记录,并先讲每一条记录封装到ArrayList类型的valueRd中,在把每一个valueRd封装到一个ArrayList类型的valueRs中,通过request的session,把valueRs返回。
doGet方法的代码段:
  //Process the HTTP Get request
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws
      ServletException, IOException {
    response.setContentType(CONTENT_TYPE);
    /**
     * 查询抢险队伍信息,以arrayList格式返回
     */
    getRushTroopRecord(request);
  }
getRushTroopRecord方法的代码段:
  /**
   * 读取抢险队伍信息
   * @param request HttpServletRequest
   */
  private void getRushTroopRecord(HttpServletRequest request) {
    try {
      //语句句柄
      Statement stat;
      //记录集
      ResultSet rs = null;
      ChartBean cb = new ChartBean();
      stat = cb.getConnection().createStatement();
      String sSql = "SELECT rtName, rtNum, rtPrincipal, rtAddr, rtDis, " +
          " rtTime, rtConnect, rtRemark FROM rushTroop ORDER BY id";
      rs = stat.executeQuery(sSql);
      if (rs != null) {
        //rs.first();
        //记录一条记录,有字段组成
        ArrayList valueRd = new ArrayList();
        //记录整个记录集,有valueRd组成
        ArrayList valueRs = new ArrayList();
        int i = 0;
        while (rs.next()) {
          /**
           * 字段的顺序和查询的
           */
          valueRd.add(0, rs.getString(1).toString());
          valueRd.add(1, rs.getString(2).toString());
          valueRd.add(2, rs.getString(3).toString());
          valueRd.add(3, rs.getString(4).toString());
          valueRd.add(4, rs.getString(5).toString());
          valueRd.add(5, rs.getString(6).toString());
          valueRd.add(6, rs.getString(7).toString());
          valueRd.add(7, rs.getString(8).toString());
          //print record value
          System.out.println(rs.getString(1).toString());
          System.out.println(rs.getString(2).toString());
          System.out.println(rs.getString(3).toString());
          System.out.println(rs.getString(4).toString());
          System.out.println(rs.getString(5).toString());
          System.out.println(rs.getString(6).toString());
          System.out.println(rs.getString(7).toString());
          System.out.println(rs.getString(8).toString());
          /**
           * 把记录加入记录集中
           */
          valueRs.add(i, valueRd);
          i++;
        }
        /**
         * 返回给jsp页面
         */
        request.getSession().setAttribute("rushtrooprd", valueRs);
      }
      else {
        System.out.println("no record found");
        //request.getSession().setAttribute("rushtrooprdnotfound", null);
      }
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }
d) 我的同事Sunday_28编写了连接数据的方法getConnection,由于封装在另一个package中,这里只给出其程序段。
GetConnection方法的代码段:
 /**
  * 获取一个演示用的简单数据集对象
  * @return
  */
 Connection conn=null;
 ResultSet rs=null;
 Statement stat=null;
 public Connection getConnection()
 {
  Connection conn=null;
  try{
   Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
   conn=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databasename=flood_prevention","sa","sa");
  }
  catch(Exception e)
  {
   System.out.println (e.getMessage());
  }
  return conn;
 }
e) 做页面我是绝对的菜鸟,但也不怕羞耻地提供了两个jsp文件,其实无他,只是为了告诉大家一个道理:只要是自己的劳动成果就没有什么不好意思的,至少浸透了自己的一番辛勤。创造总是快乐的。鲲鹏是这样起步的。为有壮志多磨难,且待天时乘长风。
3、 其他