peacess

          統計

          留言簿(14)

          積分與排名

          閱讀排行榜

          評論排行榜

          gwt 1.4學習--數據庫記錄顯示實現(二.1)(把源來的內容升級為gwt1.4)

          實現的功能
             在gwt開發中實現,與數據庫(oracle)的連接(jdbc),并顯示數據記錄集,說白了就是在ajax的gwt架構下與數據庫交互。
          相關工具
          gwt1.4,eclipse3.3
          首先說明一下要原理
          分為兩部分:客戶端部分與服務端部分
          如果對gwt的遠程調用不怎么清楚,請參見:http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.html

          客戶端部分
             由于客戶端只支持jdk1.4的包util與lang(沒有jdbc),所以只能自己寫一個類存放記錄集,如下
          public class PeaceResultSet {
              private String[] cols;
              /**
               * @gwt.typeArgs <java.lang.String[]>
               */
              private List rows;
              public String[] getCols() {
                  return cols;
              }
              public void setCols(String[] cols) {
                  this.cols = cols;
              }
              public List getRows() {
                  return rows;
              }
              public void setRows(List rows) {
                  this.rows = rows;
              }
          }
              對此類作一個簡單的說明。cols是存放列名的,rows是存放記錄行的,請注意在它前面的那一個注釋(/**
               * @gwt.typeArgs <java.lang.String[]>
               */),一定不能少的,因為,最終這個java代碼會被轉換成javascript,這里告訴轉換的類型的
          有了記錄集,我們就可以用FlexTable來把我們的記錄集顯示出來了,如下
          public class PeaceTable extends Composite{

              private FlexTable table = new FlexTable();
              public FlexTable getTable() {
                  return table;
              }
              public PeaceTable() {
                  this.initWidget(table);
              }
              public void showResultSet(PeaceResultSet re)
              {
                  this.table.clear();
                  if(re != null && re.getRows()!= null && re.getRows().size()>0)
                  {
                      String[] cols = re.getCols();
                      List rows = re.getRows();

                      for(int j = cols.length-1; j >= 0; j--)
                      {
                          table.setText(0,j,cols[j]);
                      }

                      for(int i = 0; i < rows.size(); i++)
                      {
                          cols = (String[])rows.get(i);
                          for(int j = cols.length-1; j >= 0; j--)
                          {
                              table.setText(i+1,j,cols[j]);
                          }
                      }
                  }
                  else
                  {
                      table.setText(0,0,"no data");
                  }
              }
              public void callServer(String sql) {
                  PeaceSelectResultSetAsync.Util.getInstance().select(sql, new AsyncCallback() {
                      public void onFailure(Throwable caught) {
                      }
                      public void onSuccess(Object result) {
                          showResultSet((PeaceResultSet) result);
                      }
                    });
              }
          服務端部分
          這一部分是完全的java,可以用java可以使用的全部庫(當然自己寫的也可以)
          我這里用的是jdbc來連接數據庫(只是最簡單的,因為這里不是說明數據怎么操作的),代碼如下
          public class PeaceSelectResultSetImpl extends RemoteServiceServlet implements
                  PeaceSelectResultSet {

              private static final long serialVersionUID = 1L;

              public PeaceResultSet select(String sql) {
                  Connection conn = null;
                  Statement stmt = null;
                  ResultSet se = null;
                  try {
                      Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
                      String url = "jdbc:oracle:thin:@192.168.1.11:1521:XXXX"; // orcl??????SID
                      String user = "uuser";
                      String password = "pwd";
                      conn = DriverManager.getConnection(url, user, password);
                      stmt = conn.createStatement();
                      se = stmt.executeQuery(sql);
                      ResultSetMetaData rsmd = se.getMetaData();

                      String[] cols = new String[rsmd.getColumnCount()];
                      List rows = new ArrayList();
                      for (int i = cols.length; i > 0; i--) {
                          cols[i - 1] = rsmd.getColumnName(i);
                      }
                      while (se.next()) {
                          String[] row = new String[cols.length];
                          rows.add(row);
                          for (int i = cols.length - 1; i >= 0; i--) {
                              row[i] = se.getString(cols[i]);
                          }
                      }
                      PeaceResultSet kfse = new PeaceResultSet();
                      kfse.setCols(cols);
                      kfse.setRows(rows);
                      return kfse;
                  } catch (Exception e) {
                      e.printStackTrace();
                  } finally {
                      if (se != null)
                          try {
                              se.close();
                          } catch (SQLException e1) {
                              e1.printStackTrace();
                          }
                      if (stmt != null)
                          try {
                              stmt.close();
                          } catch (SQLException e1) {
                              e1.printStackTrace();
                          }
                      if (conn != null)
                          try {
                              conn.close();
                          } catch (SQLException e) {
                              e.printStackTrace();
                          }
                  }
                  return null;
              }
          }
          在下一部分中,我將說明一些注意事項,以及給出完整的源代碼!!

          posted on 2007-07-24 22:42 中東 閱讀(5709) 評論(5)  編輯  收藏 所屬分類: gwt(google web toolkit)

          評論

          # re: gwt學習--數據庫記錄顯示實現(二.1) 2006-06-02 11:32 liang

          啊,我明白了  回復  更多評論   

          # re: gwt學習--數據庫記錄顯示實現(二.1) 2007-03-19 19:03 tomshen excuse99@tom.com

          您好,GWT中如何避免每一次新增加服務都要配置web.xml?
          如果這樣,web.xml豈不是成了團隊開發的瓶頸  回復  更多評論   

          # re: gwt 1.4學習--數據庫記錄顯示實現(二.1)(把源來的內容升級為gwt1.4) 2007-07-28 14:18 www.8383.com

          只要有博客就可以在8383.com免費申請.CN域名,輸入域名就能直接進入博客,我剛申請了一個,快輸入8383hosting.cn到我的博客看我是如何耍酷吧  回復  更多評論   

          # re: gwt 1.4學習--數據庫記錄顯示實現(二.1)(把源來的內容升級為gwt1.4) 2007-07-31 02:14 pepito

          Hi.

          Your code works ok, but I'm trying to do using a connection pool instead of usign class.ForName.

          Do you know something about, or a place to look...

          Thanks


          trumaxformax1@yahoo.es  回復  更多評論   

          # re: gwt 1.4學習--數據庫記錄顯示實現(二.1)(把源來的內容升級為gwt1.4) 2008-06-01 20:38 lovelong

          public class SampleServiceImpl extends RemoteServiceServlet implements SampleService {
          ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
          UserDAO dao=(UserDAO) ctx.getBean("UserDAO");
          User u=new User();
          List<User> list=dao.findAll();
          public List getPersons(String pattern) {
          return list;
          }
          我已經從數據庫中返回了一個list了
          現在我想把這個list
          打印到helloworld.java 可以加我也就是前臺了
          怎么弄呢 用什么組件?
          可以發郵件給我 87102146@qq.com  回復  更多評論   

          主站蜘蛛池模板: 姜堰市| 吐鲁番市| 武功县| 抚顺县| 岳普湖县| 右玉县| 迁西县| 洪湖市| 仪征市| 乡城县| 大悟县| 武夷山市| 罗源县| 突泉县| 乌海市| 连平县| 饶河县| 道孚县| 长春市| 垦利县| 榆林市| 黑河市| 福建省| 固镇县| 敦煌市| 信丰县| 封开县| 大港区| 含山县| 宜春市| 海南省| 锦屏县| 宁夏| 马尔康县| 枣强县| 报价| 清水河县| 洪湖市| 西丰县| 多伦县| 榕江县|