java 类似datatable_在java中实现类似于.net中的DataTable,请各位看看,这种方法可行吗?...

这篇博客探讨了如何在Java中模拟.NET的DataTable功能。作者创建了三个类(DataTable, DataRow, DataColumn)来实现这一目标,并提供了一个执行SQL查询的方法,将结果转换为自定义的数据结构。测试结果显示该方法可行,但还有优化的空间。" 117712848,10545954,使用CefSharp在C#中实现浏览器并抓取资源,"['CefSharp', 'C#开发', '浏览器开发', 'HTML5', '资源抓取']
摘要由CSDN通过智能技术生成

由于项目

1769ff8ea9fb618cf447b51a62312c57.png

0dc019c5199b39aa57e339a4f206c0c0.png

5b38932695cce7fdd9e59215b9c38fa6.png

a55ae596c51d129321f541adb08a3664.png

8344e28e04d6955e07338bd4969242bb.png

c8251c7ca1b7890d7089b9acccefe38e.png

c2e60e58aaa0a6a56bb35135c21f91ae.png

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

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

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

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

710618e6812418e0af6b0b5425fdafe2.png

835e1432044f4a05a484a3e00c19ae82.gif

b48f8a4380e6e0062a4b28aac257a259.png

5fecfda2a23097d88b5e8fb2844122c2.png

d84f8f32df16f704d95fc70ce1386a25.png

e0944cca81af3c6f2693f18f0f39ea63.png

package cdu.yas.zfkp.util;

import java.util.List;

public class DataTable {

List row;

public DataTable(List r) {

row = r;

}

public List getRow() {

return row;

}

public void setRow(List row) {

this.row = row;

}

}

package cdu.yas.zfkp.util;

import java.util.List;

public class DataRow {

List col;

public DataRow(List c) {

col = c;

}

public List getCol() {

return col;

}

public void setCol(List 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>> table = new ArrayList>>();

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 row = new ArrayList();// 表所有行集合

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

DataRow r = null; // 单独一行

DataColumn c = null;// 单独一列

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

while (rs.next()) {

// 初始化行集合,

// 初始化列集合

col = new ArrayList();

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

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

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值