zoukankan      html  css  js  c++  java
  • 在java中实现类似于.net中的DataTable,请各位看看,这种方法可行吗?

    由于项目需求,最近必须用java做一个项目。

    说句实话,我做起来非常之不爽快,各种不爽快,随便什么地方都想和.net靠近,

    所以晚上就写了这个模拟DataTable的简单功能,初步测试是通过了,由于太晚了也不能优化。

    现在贴出代码请各位大哥,帮物品看看,此种方法是否可行???

    在java中实现.net的datatable功能!!!

    package cdu.yas.zfkp.util;

     

    import java.util.List;

     

    public class DataTable {

     

        List<DataRow> row;

     

        public DataTable(List<DataRow> r) {

           row = r;

        }

     

        public List<DataRow> getRow() {

           return row;

        }

     

        public void setRow(List<DataRow> row) {

           this.row = row;

        }

     

    }

    package cdu.yas.zfkp.util;

     

    import java.util.List;

     

    public class DataRow {

     

        List<DataColumn> col;

     

        public DataRow(List<DataColumn> c) {

           col = c;

        }

     

        public List<DataColumn> getCol() {

           return col;

        }

     

        public void setCol(List<DataColumn> col) {

           this.col = col;

        }

     

     

    }

     

     

    package cdu.yas.zfkp.util;

     

    import java.util.Collection;

    import java.util.HashMap;

    import java.util.Map;

    import java.util.Set;

     

    public class DataColumn {

     

        String key;

        Object value;

     

        public DataColumn(String k, Object v) {

           key = k;

           value = v;

        }

     

        public String getKey() {

           return key;

        }

     

        public Object getValue() {

           return value;

        }

     

        public void setKey(String key) {

           this.key = key;

        }

     

        public void setValue(Object value) {

           this.value = value;

        }

     

    }

     

    package cdu.yas.zfkp.util;

     

    public class SqlParameter {

     

        public SqlParameter(String type, String value) {

           this.type = type;

           this.value = value;

        }

     

        String type;

        String value;

     

        public String getType() {

           return type;

        }

     

        public String getValue() {

           return value;

        }

     

        public void setType(String type) {

           this.type = type;

        }

     

        public void setValue(String value) {

           this.value = value;

        }

     

    }

     

     

    public DataTable executeValue(String sql, SqlParameter[] p) {

           Connection conn = DB.createConn();

           PreparedStatement ps = DB.prepare(conn, sql);

           List<List<HashMap<String, Object>>> table = new ArrayList<List<HashMap<String, Object>>>();

           DataTable t = null;

           try {

               for (int j = 0; j < p.length; j++) {

                  // wl(p[j].getValue() + "--" + p[j].getType() + "--" + j);

                  if (p[j].getType().equals("int")) {

                      ps.setInt(j + 1, Integer.parseInt(p[j].getValue()));

     

                  }

                  if (p[j].type.equals("String")) {

                      ps.setString(j + 1, p[j].getValue());

                  }

                  if (p[j].type.equals("Date")) {

                      ps.setDate(j + 1, Date.valueOf(p[j].getValue()));

                  }

               }

     

               ResultSet rs = ps.executeQuery();

               ResultSetMetaData rsmd = rs.getMetaData();

     

               List<DataRow> row = new ArrayList<DataRow>();// 表所有行集合

               List<DataColumn> col = null;// 行所有列集合

               DataRow r = null; // 单独一行

               DataColumn c = null;// 单独一列

               // 此处开始循环读数据,每次往表格中插入一行记录

               while (rs.next()) {

                  // 初始化行集合,

     

                  // 初始化列集合

                  col = new ArrayList<DataColumn>();

                  // 此处开始列循环,每次向一行对象插入一列

                  for (int i = 1; i <= rsmd.getColumnCount(); i++) {

                      String columnName = rsmd.getColumnName(i);

                      Object value = rs.getObject(columnName);

                      // 初始化单元列

                      c = new DataColumn(columnName, value);

                      // 将列信息加入列集合

                      col.add(c);

                  }

                  // 初始化单元行

                  r = new DataRow(col);

     

                  // 将行信息降入行结合

                  row.add(r);

     

               }

     

               // 得到数据表

               t = new DataTable(row);

           } catch (SQLException e) {

               e.printStackTrace();

           } finally {

               DB.close(ps);

               DB.close(conn);

           }

           return t;

        }

     

    最后的测试方法

        private void wl(String s) {

           System.out.println(s);

        }

     

        @Test

        public void testSql() throws SQLException {

           DB db = new DB();

           SqlParameter[] p = new SqlParameter[1];

           p[0] = new SqlParameter("int", "1");

     

           String sql = "select * from kpxz where kpxzbh!=?";

           DataTable table = db.executeValue(sql, p);

           for (DataRow row : table.getRow()) {

     

               for (DataColumn col : row.getCol()) {

                  System.out.print(col.getKey() + ":" + col.getValue() + "--");

               }

               wl("");

           }

        }

     

     

     

  • 相关阅读:
    c中static的作用
    数据分析人士必看的10个中文博客
    使用cat命令和EOF标识输出多行文件
    linux 查看系统信息命令(比较全)
    ORACLE 使用LEADING, USE_NL, ROWNUM调优
    Oracle Hint(提示)和INDEX(索引)的一些忠告
    Linux操作系统中巧用CD和Pushd切换目录
    索引失效的一些原因
    .NET使用一般处理程序生成验证码
    上传图片到指定文件目录,没有则创建目录
  • 原文地址:https://www.cnblogs.com/yexiaochai/p/2102100.html
Copyright © 2011-2022 走看看