需求:写个SQL,根据SQL的列,动态更新Grid
例如: select id,name from table
grid显示:id,name的列和值
select *  from table 
grid显示:table 所有的列和值急!!追分相赠!!
给个思路 部分代码。谢谢!!

解决方案 »

  1.   

    我的部分代码:EXT
    Ext.QuickTips.init();
    panel = function()
    {
    var p = new Ext.Panel(
    {
    title:'自定义SQL查询',
    frame :true,
    autoScroll :true,
    region :'south',
    layout :'border',
    labelWidth :60,
    // closable: true, //这个属性就可以控制关闭该from
    bodyStyle : {
    paddingTop : '3px'
    },
    collapsible:true, //右上角的伸缩按钮
    // renderTo:'sqlQuery',
    renderTo: Ext.getBody(),
    tbar:[
    {
    text : '查询',
    iconCls : 'search',
    tooltip : '查询数据库',
    handler:query
    }]
    ,items:[formPanel]
    });
    }formPanel = function()
    {
    var fpcy =new Ext.FormPanel(
    {
    id:'fp',
    title:'SQL查询工具',
    collapsible:true,
    renderTo:Ext.getBody(),
    //        defaultType:'textarea',
            layout:'form',
            hideLabels:false, // hideLabels:true 看不到SQL查询
            autoHeight:true,
            blankText:'请输入sql语句',
            items: [
            {
             xtype:'textarea',
                fieldLabel: '输入SQL语句',
                id:'sqltext',
                anchor:"100%"
            },gridpanel
            ],
            buttons:[
            {
             text:'查询',
             iconCls : 'search',
             tooltip : '查询数据库',
             handler:query
            },
            {
             text:'重写',
             tooltip : '橡皮擦',
             handler:function()
             {
             fpcy.form.reset();
             }
            }
            ],
    draggable: {
    insertProxy: false,//拖动时不虚线显示原始位置
    onDrag : function(e){
    var pel = this.proxy.getEl();
    this.x = pel.getLeft(true);
    this.y = pel.getTop(true);//获取拖动时panel的坐标
    var s = this.panel.getEl().shadow;
    },
    endDrag : function(e){
    this.panel.setPosition(this.x, this.y);//移动到最终位置
    }
    }
    // =================
    });
    }query = function()
    {
    // Ext.Msg.wait('正在向服务器提交数据...');
    var scope = this;
    var ajx = Ext.Ajax.request({
    url : 'sqlQuery!getSqlQueryList.action',
    method:"post",
    params:
    {
    sql : Ext.getDom('sqltext').value
    },
    success:function(dataAggregate)
    {
    // alert('success');
    var scopt = this;
    var arrayData = dataAggregate.responseText;
    alert(dataAggregate.responseText);
    var result = Ext.decode(dataAggregate.responseText);
    /*
     * 
     */
    gridpanel();
    },
    failure:function(dataAggregate)
    {
    // alert('failure');
    alert('failure'+dataAggregate.responseText);
    }
    });
    }
    Ext.onReady(formPanel);sql = select id,xlmc from dm_xl fetch first 1 rows only (db2)package com.suypower.xssystem.action;import java.util.ArrayList;
    import java.util.List;
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;import com.suypower.xssystem.bean.ExtGridBean;
    import com.suypower.xssystem.service.sqlQueryService;public class SqlQueryAction {
    private static final String userResult = "user";
    private String result;
    private String sql; public String getSqlQueryList()
    {
    List list = new ArrayList();
    JSONObject obj = new JSONObject();
    ExtGridBean egb = new ExtGridBean();
    try {
    list = sqlQueryService.getSqlQueryService(sql);
    egb.setRows(list);
    egb.setSuccess(true);
    System.out.println(JSONObject.fromObject(egb).toString());

    } catch (Exception e) 
    {
    // System.out.println("=============================SqlQueryAction Exceptoin==========================");
    String getMessageException = e.getMessage();
    // System.out.println("SQLgetMessageException"+getMessageException+"\n");
    list.add(obj.accumulate(getMessageException,getMessageException));
    }
    this.setResult(JSONArray.fromObject(egb).toString());
    return userResult;
    }
    /*
     * get set method
     */
    public String getResult() {
    return result;
    } public void setResult(String result) {
    this.result = result;
    } public static String getUserResult() {
    return userResult;
    }

    public String getSql() {
    return sql;
    }
    public void setSql(String sql) {
    this.sql = sql;
    }
    }service:
    package com.suypower.xssystem.service;import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.List;
    import net.sf.json.JSONObject;
    import com.suypower.xssystem.dao.dbconn;public class sqlQueryService {
    public static List getSqlQueryService(String sql)throws Exception
    {
    final List list = new ArrayList();
    //  有没有对此封装调用 日后修改代码 同步
    Connection con = new dbconn().getConnection();
    Statement stmt = con.createStatement();
    /*
     * 查询SQL
     */
    JSONObject obj = new JSONObject();
    if((sql.indexOf("select") + sql.indexOf("delete") + sql.indexOf("update") + sql.indexOf("insert")) == -4)
    {
    list.add(obj.accumulate("非法SQL","非法SQL"));
    }else if(sql.startsWith("select"))
    {
    ResultSet rs = stmt.executeQuery(sql);
    while(rs.next())
    {
    int columnNum = rs.getMetaData().getColumnCount();
    for(int i =1;i<=columnNum;i++)
    {
    System.out.println("列名:"+rs.getMetaData().getColumnName(i)+"列值:"+rs.getString(i));
    obj.accumulate(rs.getMetaData().getColumnName(i),rs.getString(i));
    }
    }
    list.add(obj);
    }else if(sql.startsWith("update"))
    {
    stmt.executeUpdate(sql);
    int updateNum = stmt.getUpdateCount();
    // System.out.println("更新"+updateNum+"个");
    list.add(obj.accumulate(String.valueOf(updateNum),String.valueOf(updateNum)));
    }else if(sql.startsWith("delete"))
    {
    stmt.executeUpdate(sql);
    int updateNum = stmt.getUpdateCount();
    // System.out.println("删除"+updateNum+"个");
    list.add(obj.accumulate(String.valueOf(updateNum),String.valueOf(updateNum)));
    }else if(sql.startsWith("insert"))
    {
    stmt.executeUpdate(sql);
    int updateNum = stmt.getUpdateCount();
    // System.out.println("插入"+updateNum+"个");
    list.add(obj.accumulate(String.valueOf(updateNum),String.valueOf(updateNum)));
    }
    return list;
    }
    }可返回数据:例如
    {"extraData":null,"rows":[{"ID":"110025","XLMC":"雨石#1线"}],"success":true,"totalCount":0}
    即:":[{"ID":"110025","XLMC":"雨石#1线"}]
    现在要动态展示GRID 根据SQL