- /**
- * Title: 檢驗XML數據文件
- * Description: 檢驗XML數據項
- * @date : 2006-3-20
- * @author : zhanglei
- * @version : 1.0
- */
- package server;
- import java.io.*;
- import java.util.*;
- import java.sql.*;
- public class CheckXml {
- private DomXML DomXML = MainServer.DomXML;
- private StringBuffer log = new StringBuffer();
- private String xmlFileName = "";
- private int JLS = 0; //讀出XML文件JLS的記錄數的值
- private String checkFlag = "y"; //是否檢測XML
- private String TableName = "";
- public CheckXml(String fileName, String tablename) {
- xmlFileName = fileName;
- DomXML.GetBeginItem("CheckXmlConfig");
- checkFlag = DomXML.GetItemVal("CheckFlag").trim().toLowerCase();
- TableName = tablename;
- }
- //讀取config文件,對packagehead相映ITEMNAME檢驗其ITEMVAL,返回檢驗結果
- public int GetHeadCheckFlg(String itemName, String itemVal) {
- int flag = 0;
- if (DomXML.GetBeginItem("PackageHead") == null) {
- SaveLog.SetInfo(xmlFileName + "config配置文件無法定位<PackageHead>!", 1);
- return -1;
- }
- //得到JLS頭中的record記錄數
- if (itemName.equals("JLS") && MyFunction.IsNumber(itemVal)) {
- JLS = Integer.parseInt(itemVal);
- return JLS;
- }
- if (itemName.equals("SJBLX") && MyFunction.IsNumber(itemVal)) {
- DomXML.GetBeginItem("CheckType");
- String sjblx = DomXML.GetItemAttribute(xmlFileName.substring(3, 6), "sjblx").trim();
- //對數據包進行判斷,文件名的數據包類型和sjblx是否一致,否則寫失敗庫
- if (!itemVal.equals(sjblx)) {
- log.setLength(0);
- log.append(xmlFileName.substring(4, 6) + "文件名中包類型" + sjblx + "與包內類型代碼" + itemVal + "不相符合;");
- SaveLog.SetInfo(xmlFileName + log.toString(), 1);
- flag = -1;
- }
- }
- String len = DomXML.GetItemAttribute(itemName, "len").trim().toLowerCase();
- if (len.length() != 0) { //數據值長度不位
- if (itemVal.length() != Integer.parseInt(len)) {
- SaveLog.SetInfo(xmlFileName + itemName + "值長度不爲" + len, 1);
- return -1;
- }
- }
- //是否進行檢測
- if (!checkFlag.equals("y")) {
- return 0;
- }
- // DomXML.GetBeginItem(TableName);
- // String itemType = DomXML.GetItemAttribute(itemName, "itemtype").trim().toLowerCase();
- // if (itemType.equals("")) { //數據項爲空
- // SaveLog.SetInfo(TableName + "檢測內容爲空!" + len, 1);
- // return -1;
- // }
- return flag;
- }
- //讀取config文件,對data相映ITEMNAME檢驗其ITEMVAL,返回檢驗結果
- public int GetDataCheckFlg(String itemName, String itemVal) {
- //是否進行檢測
- if (!checkFlag.equals("y")) {
- return 0;
- }
- if (itemName.equals("Data") || itemName.equals("Package")) {
- return 0;
- }
- int flag = 0;
- if (DomXML.GetBeginItem(TableName) == null) {
- //SaveLog.SetInfo(xmlFileName + "config配置文件無法定位<" + TableName + ">!", 1);
- //return -1;
- }else{
- flag = ItemCheck(itemName, itemVal);
- }
- return flag;
- }
- //對應config中的項目進行檢驗
- public int ItemCheck(String itemName, String itemVal) {
- log.setLength(0);
- String sfId = "";
- try {
- DomXML.GetBeginItem(TableName);
- String itemType = DomXML.GetItemAttribute(itemName, "itemtype").trim().
- toLowerCase();
- if (itemType.equals("")) {
- log.append(itemName + "不存在此項目字段;");
- //數據返回1,不生成SQL,此項不入庫
- return 1;
- }
- if (itemType.indexOf("number") != -1) {
- if (!MyFunction.IsNumber(itemVal)) {
- log.append(itemName + "值不爲數字;");
- }
- }
- if (itemType.indexOf("nonull") != -1) {
- if (itemVal.length() == 0) {
- log.append(itemName + "值爲空;");
- }
- }
- String len = DomXML.GetItemAttribute(itemName, "len").trim().toLowerCase();
- if (len.length() != 0) {
- if (itemVal.length() != Integer.parseInt(len)) {
- log.append(itemName + "值長度不爲" + len + ";");
- }
- }
- String maxlen = DomXML.GetItemAttribute(itemName, "maxlen").trim().
- toLowerCase();
- if (maxlen.length() != 0 && !itemType.equals("blob")) {
- if (itemVal.length() > Integer.parseInt(maxlen)) { //
- log.append(itemName + "值長度超過" + maxlen + ";");
- }
- }
- if (log.length() > 0) {
- log.insert(0, xmlFileName + "文件檢驗錯誤:身份ID爲" + sfId + "的record內");
- SaveLog.SetInfo(log.toString(), 1);
- return -1;
- }
- }
- catch (Exception e) {
- SaveLog.SetInfo("config文件檢驗PackageHead出錯:" + itemName, 2);
- return -1;
- }
- return 0;
- }
- //生成數據表檢驗XML文件
- public void GetCheckTableXml(String tablename) {
- WriteXml myxml = new WriteXml();
- try {
- myxml.WriteFile(tablename + ".xml");
- myxml.AddRoot(0, tablename);
- String aa[] = new String[2];
- String bb[] = new String[2];
- JdbcWork jw = new JdbcWork();
- ResultSet rs = jw.SelectSql("SELECT * FROM " + tablename + " WHERE 1=1");
- ResultSetMetaData rsmd = rs.getMetaData();
- for (int i = 1; i <= rsmd.getColumnCount(); i++) {
- System.out.println(rsmd.getColumnName(i) + " " + rsmd.getColumnTypeName(i) +
- " " + rsmd.getColumnDisplaySize(i));
- aa[0] = "itemtype";
- bb[0] = rsmd.getColumnTypeName(i);
- aa[1] = "maxlen";
- bb[1] = String.valueOf(rsmd.getColumnDisplaySize(i));
- myxml.AddItem(0, rsmd.getColumnName(i), "", aa, bb);
- }
- myxml.toSave("1");
- System.out.print(tablename + ".xml writing is successful.");
- }
- catch (Exception ex) {
- System.out.print(tablename + ".xml writing is unsuccessful.");
- }
- }
- //檢測數據庫字段與配置文件是否一致
- public int CheckDbToXml(String TableName) {
- String colName, colType, colSize;
- try {
- JdbcWork ZzJw = new JdbcWork();
- DomXML DomXML = null;
- ResultSet rs = ZzJw.SelectSql("select * from " + TableName + " where 1=2");
- ResultSetMetaData rsmd = rs.getMetaData();
- for (int m = 0; m < DomXML.GetItemCount(TableName); m++) {
- colName = DomXML.GetItemNoName(m).toUpperCase().trim();
- if (colName.equals("")) {
- continue;
- }
- colType = DomXML.GetItemAttribute(colName, "itemtype").toUpperCase().trim();
- colSize = DomXML.GetItemAttribute(colName, "maxlen").toUpperCase().trim();
- int cFlag = 0;
- for (int i = 1; i <= rsmd.getColumnCount(); i++) {
- if (rsmd.getColumnName(i).toLowerCase().equals(colName)) {
- if (!colType.equals(rsmd.getColumnTypeName(i))) {
- System.out.println(TableName + "表" + colName + "字段的數據庫類型爲" + colType + "與配置文件不匹配!");
- }
- if (!colSize.equals(String.valueOf(rsmd.getColumnDisplaySize(i)))) {
- System.out.println(TableName + "表" + colName + "字段的長度爲" + colType + "與配置文件不匹配!");
- }
- cFlag = 1;
- break;
- }
- }
- if (cFlag == 0) {
- System.out.println("配置文件中字段" + colName + "不存在!");
- }
- }
- }
- catch (Exception ex) {
- }
- return 1;
- }
- }
checkxml.java
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.