在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("");

       }

    }

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java没有 DataTable 类,但是可以使用 Java 的类来实现类似 DataTable 的数据模型。其最常用的类是 ArrayList 和 HashMap。 以下是一个简单的示例: ```java import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class DataTable { private List<Map<String, Object>> rows; private String[] columns; public DataTable(String[] columns) { this.columns = columns; this.rows = new ArrayList<>(); } public void addRow(Object[] rowData) { Map<String, Object> row = new HashMap<>(); for (int i = 0; i < rowData.length; i++) { String columnName = this.columns[i]; Object columnValue = rowData[i]; row.put(columnName, columnValue); } this.rows.add(row); } public List<Map<String, Object>> getRows() { return this.rows; } public String[] getColumns() { return this.columns; } public int getRowCount() { return this.rows.size(); } public Object getValue(int rowIndex, String columnName) { Map<String, Object> row = this.rows.get(rowIndex); return row.get(columnName); } public void setValue(int rowIndex, String columnName, Object value) { Map<String, Object> row = this.rows.get(rowIndex); row.put(columnName, value); } } ``` 这个类使用 List<Map<String, Object>> 存储数据行,其每个 Map 表示一行数据,其 key 为列名,value 为列值。addRow() 方法通过将 rowData 转换为 Map 来添加新的行,getValue() 和 setValue() 方法利用 Map 的 get() 和 put() 方法获取和设置列值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值