?? dealconf.java
字號:
package kjb.backup;
import kjb.main.*;
import java.util.*;
/**
*@Author: 1234
*Function:1.從sql類型到數據庫類型的映射
* 2.從數據庫類型到sql類型的映射
* 3.導出數據時添加數據庫類型到sql類型的映射
*By Date: 2003-11-11
*/
public class DealConf
{
/**
*從sql類型到數據庫類型的映射結果集
*/
Vector v_sqltodb[] = new Vector[2];
/**
*從數據庫類型到sql類型的映射
*/
Vector v_dbtosql[] = new Vector[2];
String conffile = "";
String dbType = "";
/**
*初始化兩個映射結果集
*conffile為配置文件名,dbType為數據庫常量名,參見ParentBean.class
*@link {ParentBean.class}
*/
public void initMapList(String conffile,String dbType)
{
v_sqltodb[0] = new Vector();
v_sqltodb[1] = new Vector();
v_dbtosql[0] = new Vector();
v_dbtosql[1] = new Vector();
String sign = "sql-to-" + dbType + "";
v_sqltodb = initVector(conffile,sign);
sign = "" + dbType + "-to-sql";
v_dbtosql = initVector(conffile,sign);
this.conffile = conffile;
this.dbType = dbType;
}
/**
*查詢某個子段之間的內容
*/
protected Vector []initVector(String conffile,String sign)
{
DealFile df = new DealFile();
df.connFIS(conffile);
Vector vect[] = new Vector[2];
vect[0] = new Vector();
vect[1] = new Vector();
String sign_begin = "<" + sign + ">";//開始標記
String sign_end = "</" + sign + ">";//結束標記
long pos = df.seekStrPos(0,sign_begin);//開始位置
long end = df.seekStrPos(0,sign_end);//結束位置
//循環搜索<type></type><map-type></map-type>,不包括<!--//-->之間的內容
long temp = pos;
long temp1 = pos;
long temp2 = pos;
String map[] = new String[2];
map[0] = "";
map[1] = "";
Vector t1 = new Vector();
Vector t2 = new Vector();
while(pos<end)
{
//取出映射字段名
pos = df.seekStrPos(pos,"<type>");
temp = df.seekStrPos(pos,"</type>");
temp1 = df.seekStrPos(pos,"<!--");
if(temp1!=-1&&temp>temp1)//有注釋部分,應該跳過
{
pos += 6;
map[0] = df.substring(pos,(int)(temp1 - pos));//取出跳過之前的部分
temp2 = df.seekStrPos(temp1,"-->");
pos = temp2 + 3;//當前指針跳到注釋之后
temp = df.seekStrPos(pos,"</type>");
}
else
{
pos += 6;
}
map[0] += df.substring(pos,(int)(temp - pos));
//取出映射字段值
pos = df.seekStrPos(pos,"<map-type>");
temp = df.seekStrPos(pos,"</map-type>");
temp1 = df.seekStrPos(pos,"<!--");
if(temp1!=-1&&temp>temp1)//有注釋部分,應該跳過
{
pos += 10;
map[1] = df.substring(pos,(int)(temp1 - pos));//取出跳過之前的部分
temp2 = df.seekStrPos(temp1,"-->");
pos = temp2 + 3;//當前指針跳到注釋之后
temp = df.seekStrPos(pos,"</map-type>");
}
else
{
pos += 10;
}
map[1] += df.substring(pos,(int)(temp - pos));
t1.add(map[0]);
t2.add(map[1]);
map[0] = "";
map[1] = "";
pos = temp + 13;
}
vect[0] = t1;
vect[1] = t2;
df.closeFIS();//關閉文件輸入流
return vect;
}
/**
*將sql字段映射為數據庫字段
*/
public String mapsqltoDB(String type)
{
Vector v1 = (Vector)v_sqltodb[0];
Vector v2 = (Vector)v_sqltodb[1];
for(int i=0;i<v1.size();i++)
{
if(((String)v1.get(i)).trim().equals(type.trim()))
return (String)v2.get(i);
}
return "";
}
/**
*將數據庫字段映射為sql字段
*/
public String mapDBtosql(String type)
{
Vector v1 = (Vector)v_dbtosql[0];
Vector v2 = (Vector)v_dbtosql[1];
for(int i=0;i<v1.size();i++)
{
if(((String)v1.get(i)).trim().equals(type.trim()))
return (String)v2.get(i);
}
return "";
}
/**
*添加或修改sql到數據庫的字段映射
*/
public void addsqltoDB(String sqlType,String dbType)
{
Vector v1 = (Vector)v_sqltodb[0];
Vector v2 = (Vector)v_sqltodb[1];
int i = 0;
for(;i<v1.size();i++)
{
if(((String)v1.get(i)).trim().equals(sqlType.trim()))
break;
}
if(i==v1.size())
{
v1.add(i,sqlType);
v2.add(i,dbType);
}
v_sqltodb[0] = v1;
v_sqltodb[1] = v2;
}
/**
*添加或修改數據庫到sql的字段映射
*/
public void addDBtosql(String dbType,String sqlType)
{
Vector v1 = (Vector)v_dbtosql[0];
Vector v2 = (Vector)v_dbtosql[1];
sqlType = tosqlType(sqlType);
int i = 0;
for(;i<v1.size();i++)
{
if(((String)v1.get(i)).trim().equals(dbType.trim()))
break;
}
if(i==v1.size())
{
v1.add(i,dbType);
v2.add(i,sqlType);
}
v_dbtosql[0] = v1;
v_dbtosql[1] = v2;
}
/**
*將sql類型正型值轉化為對應的字符串
*/
public String tosqlType(String no)
{
int num = Integer.parseInt(no);
switch(num)
{
case 2003:return "ARRAY";
case -5:return "BIGINT";
case -2:return "BINARY";
case -7:return "BIT";
case 2004:return "BLOB";
case 16:return "BOOLEAN";
case 1:return "CHAR";
case 2005:return "CLOB";
case 70:return "DATALINK";
case 91:return "DATE";
case 3:return "DECIMAL";
case 2001:return "DISTINCT";
case 8:return "DOUBLE";
case 6:return "FLOAT";
case 4:return "INTEGER";
case 2000:return "JAVA_OBJECT";
case -4:return "LONGVARBINARY";
case -1:return "LONGVARCHAR";
case 0:return "NULL";
case 2:return "NUMERIC";
case 1111:return "OTHER";
case 7:return "REAL";
case 2006:return "REF";
case 5:return "SMALLINT";
case 2002:return "STRUCT";
case 92:return "TIME";
case 93:return "TIMESTAMP";
case -6:return "TINYINT";
case -3:return "VARBINARY";
case 12:return "VARCHAR";
default:return "";
}
}
/**
*將sql類型映射為java類型
*/
public String mapsqltojava(String sqlType)
{
if(sqlType.equals("ARRAY"))return "";
if(sqlType.equals("BIGINT"))return "long";
if(sqlType.equals("BINARY"))return "byte";
if(sqlType.equals("BIT"))return "boolean";
if(sqlType.equals("BLOB"))return "BLOB";
if(sqlType.equals("BOOLEAN"))return "";
if(sqlType.equals("CHAR"))return "String";
if(sqlType.equals("CLOB"))return "CLOB";
if(sqlType.equals("DATALINK"))return "";
if(sqlType.equals("DATE"))return "Date";
if(sqlType.equals("DECIMAL"))return "BigDecimal";
if(sqlType.equals("DISTINCT"))return "";
if(sqlType.equals("DOUBLE"))return "double";
if(sqlType.equals("FLOAT"))return "double";
if(sqlType.equals("INTEGER"))return "int";
if(sqlType.equals("JAVA_OBJECT"))return "";
if(sqlType.equals("LONGVARBINARY"))return "LONGbyte";
if(sqlType.equals("LONGVARCHAR"))return "LONGString";
if(sqlType.equals("NULL"))return "";
if(sqlType.equals("NUMERIC"))return "BigDecimal";
if(sqlType.equals("OTHER"))return "Object";
if(sqlType.equals("REAL"))return "float";
if(sqlType.equals("REF"))return "Ref";
if(sqlType.equals("SMALLINT"))return "short";
if(sqlType.equals("STRUCT"))return "";
if(sqlType.equals("TIME"))return "Time";
if(sqlType.equals("TIMESTAMP"))return "Timestamp";
if(sqlType.equals("TINYINT"))return "short";
if(sqlType.equals("VARBINARY"))return "byte";
if(sqlType.equals("VARCHAR"))return "String";
return "";
}
/**
*提交變化的內容到文件
*/
public void commit()
{
String str = "<!--\r\n"
+"sql的某一個數據類型映射為"+dbType+"的一個數據類型,此處為人為定義\r\n"
+"//-->\r\n";
//寫sql-to-DB
str += "<sql-to-Access>\r\n";
Vector v1 = (Vector)v_sqltodb[0];
Vector v2 = (Vector)v_sqltodb[1];
for(int i=0;i<v1.size();i++)
{
str += "\t<type>"+(String)v1.get(i)+"</type><map-type>"+(String)v2.get(i)+"</map-type>\r\n";
}
str += "</sql-to-Access>\r\n";
str += "<!--\r\n"
+dbType+"的某一個數據類型映射為sql的一個數據類型,此處為程序動態定義\r\n"
+"因為本程序的操作順序一定為先導出為程序中定義的數據格式,所以在將已經\r\n"
+"導出的數據文件導到\r\n"
+"(1)"+dbType+"類型時:不用查詢本配置文件,直接映射為自身;\r\n"
+"(2)其他類型時:要先將已經導出的有數據庫的字段類型映射為sql類型,\r\n"
+" 再查詢sql映射為目標數據庫的字段類型,記為上面的列表文件\r\n"
+"//-->\r\n";
//寫DB-to-sql
str += "<Access-to-sql>\r\n";
Vector v3 = (Vector)v_dbtosql[0];
Vector v4 = (Vector)v_dbtosql[1];
for(int i=0;i<v3.size();i++)
{
str += "\t<type>"+(String)v3.get(i)+"</type><map-type>"+(String)v4.get(i)+"</map-type>\r\n";
}
str += "</Access-to-sql>\r\n";
DealFile df = new DealFile();
df.connFOS(conffile);
df.writeCHStr(str);
df.closeFOS();
((Vector)v_sqltodb[0]).clear();
((Vector)v_sqltodb[1]).clear();
((Vector)v_dbtosql[0]).clear();
((Vector)v_dbtosql[1]).clear();
}
public static void main(String args[])
{
DealConf rc = new DealConf();
//初始化
rc.initMapList("backupconf/Access.conf","Access");
//查詢
//System.out.println(rc.mapsqltoDB("FLOAT"));
//寫入
rc.addDBtosql("BLOB","-1");
//更新到文件
rc.commit();
}
};
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -