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 中东 阅读(5679) 评论(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  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: