/**
* 获取行数
* @return
public int getRowCount() {
return this.getRows().size();
/**
* 判断table是否含有数据
* @param p_Table
* @return
public static boolean hasData(DataTable p_Table) {
return null != p_Table && p_Table.getRows().size() > 0;
/**
* 转换成json格式
* @param p_IgnoreNull 为true时null为空字符串。为false时返回null
* @param p_UseLower 列名是否小写,true:列名大写转小写,false:保持列名
* @return
public String toJson(boolean p_IgnoreNull, boolean p_UseLower) {
return this.getRows().toJson(p_IgnoreNull,p_UseLower);
/** * 获取总行数 * @return private String getCount() { if (getTotalRows() > -1) { return Integer.toString(getTotalRows()); } else { return null == this.getData() ? "0" : Integer.toString(this.getData() .getRows().size());
public void writeXmlImpl(XMLStreamWriter p_writer, boolean p_needMoreColInfo) {
try {
p_writer.writeStartElement("DataTable");
p_writer.writeAttribute("tableName", getTableName());
p_writer.writeStartElement("Columns");
for (int i = 0; i < getColumns().size(); i++) {
getColumn(i).writeXmlImpl(p_writer, p_needMoreColInfo);
p_writer.writeEndElement();
p_writer.writeStartElement("Rows");
for (DataRow row : getRows()) {
row.writeXml(p_writer);
p_writer.writeEndElement();
p_writer.writeEndElement();
} catch (Exception e) {
throw new XmlSerializeException("DataTable 序列化为 Xml 时发生异常。", e);
@Override public DataRow clone() { DataRow row = new DataRow(this.table.cloneTableStructure()); for (int i = 0; i < this.data.size(); i++) { Object value = this.data.get(i); if (value != null) { if ((value instanceof DbNull)) { value = null; } else if ((value instanceof String)) { value = new String(value.toString()); } else if ((value instanceof Date)) { value = ((Date) value).clone(); } else if ((value instanceof byte[])) { byte[] org = (byte[]) value; byte[] bytes = new byte[org.length]; System.arraycopy(org, 0, bytes, 0, org.length); value = bytes; row.setValue(i, value, false); row.getTable().getRows().add(row); return row;
/**
* 获取所有服务
* @return
* @throws APPErrorException
public static List<ServicesEntity> getAllServices() throws APPErrorException
List<ServicesEntity> result =new ArrayList<ServicesEntity>();
DataTable dt= getServices();
for(int i=0;i<dt.getRows().size();i++)
ServicesEntity entity=ServicesEntity.paser(dt.getRow(i));
if(null!=entity)
result.add(entity);
return result;
for (DataRow matchRow : getRows()) {
if ((p_condition == null) || (p_condition.isValid(matchRow))) {
if ((p_orders == null) || (p_orders.length == 0)) {
/**
* 将DataTable 转换成Delete SQL集合
* @param p_Table
* @param p_TableName
* @return
public static List<String> buildDeleteSql(DataTable p_Table,
String p_TableName) {
List<String> sqls = new ArrayList<String>();
for (int i = 0; i < p_Table.getRows().size(); i++) {
String sql = buildDeleteSql(p_Table.getRow(i), p_TableName);
if (!StringUtil.isNullOrEmpty(sql)) {
sqls.add(sql);
return sqls;
for (DataRow matchRow : getRows()) {
if ((p_condition == null) || (p_condition.isValid(matchRow))) {
count++;
/**
* 将DataTable 转换成Insert SQL集合
* @param p_Table
* 数据Table
* @param p_TableName
* 表名
* @return
public static List<String> buildInsertSql(DataTable p_Table,
String p_TableName) {
List<String> sqls = new ArrayList<String>();
for (int i = 0; i < p_Table.getRows().size(); i++) {
String sql = buildInsertSql(p_Table.getRow(i), p_TableName);
if (!StringUtil.isNullOrEmpty(sql)) {
sqls.add(sql);
return sqls;
/**
* 将DataTable 转换成Update SQL集合
* @param p_Table
* 数据table
* @param p_TableName
* 表名称
* @return
public static List<String> buildUpdateSql(DataTable p_Table,
String p_TableName) {
List<String> sqls = new ArrayList<String>();
for (int i = 0; i < p_Table.getRows().size(); i++) {
String sql = buildUpdateSql(p_Table.getRow(i), p_TableName);
if (!StringUtil.isNullOrEmpty(sql)) {
sqls.add(sql);
return sqls;
for (DataRow matchRow : getRows()) {
if ((p_condition == null) || (p_condition.isValid(matchRow))) {
Object columnValue = matchRow.getValue(p_columnName);
/**
* 根据条件和列名获取最小值
* @param p_condition 条件
* @return
public Object min(String p_columnName, Condition p_condition) {
if (!NumberUtility.isNumberDbType(getColumn(p_columnName)
.getColumnType())) {
throw new DataAccessException("聚合函数 MIN 不支持非数值类型的字段 "
+ p_columnName);
Object result = null;
for (DataRow matchRow : getRows())
if ((p_condition == null) || (p_condition.isValid(matchRow))) {
Object columnValue = matchRow.getValue(p_columnName);
if (columnValue != null) {
double temp = Double.valueOf(columnValue.toString())
.doubleValue();
if ((result == null)
|| (Double.valueOf(result.toString()).doubleValue() > temp)) {
result = Double.valueOf(temp);
if (result != null) {
return NumberUtility.toInteger((Double) result);
return result;
/**
* 根据条件和列名获取最大值
* @param p_condition 条件
* @return
public Object max(String p_columnName, Condition p_condition) {
if (!NumberUtility.isNumberDbType(getColumn(p_columnName)
.getColumnType())) {
throw new DataAccessException("聚合函数 MAX 不支持非数值类型的字段 "
+ p_columnName);
Object result = null;
for (DataRow matchRow : getRows())
if ((p_condition == null) || (p_condition.isValid(matchRow))) {
Object columnValue = matchRow.getValue(p_columnName);
if (columnValue != null) {
double temp = Double.valueOf(columnValue.toString())
.doubleValue();
if ((result == null)
|| (Double.valueOf(result.toString()).doubleValue() < temp)) {
result = Double.valueOf(temp);
if (result != null) {
return NumberUtility.toInteger((Double) result);
return result;
reader1.next();
table.readXml(reader1);
System.out.println(table.getRows
().size());
/**
* 克隆一个新的DataTable 包含列和行
* @return
@Override
public DataTable clone() {
DataTable temp = this.cloneTableStructure();
DataRowCollection rows = this.getRows();
for (int i = 0; i < rows.size(); i++) {
DataRow row = temp.appendRow();
row.copyData(rows.get(i));
return temp;