public static boolean expToMssqlScripts(DatabaseInfo dbInfo, String dbName, String[] tableNames, String path, String[] fileNames)
{
int isSucceed = 0;
int tableNum = tableNames.length;
for(int i = 0; i < tableNum; i++)
{
isSucceed = isSucceed + 1;
expToMssqlScript(dbInfo, dbName, tableNames[i], path, fileNames[i]);
}
if(isSucceed == tableNum)
{
return true;
}
else
{
return false;
}
}
/**
* 将一个数据表导出到脚本
*
* @param dbName
* @param tableName
* @param fileName
* @return
*/
public static boolean expToMssqlScript(DatabaseInfo dbInfo, String dbName, String tableName, String path, String fileName)// throws SQLException
{
boolean isSucceed = false;
Vector columns = null;
try
{
columns = DBManagerHandler.getColumnInfos(dbInfo, dbName, tableName);
}
catch(FIException e1)
{
// TODO 自动生成 catch 块
e1.printStackTrace();
}
Vector values = null;
try
{
values = DBManagerHandler.getAllValues(dbInfo, dbName, tableName);
}
catch(FIException e1)
{
// TODO 自动生成 catch 块
e1.printStackTrace();
}
int thousandflag = 0;
// 换行符
final String LINE_SEP = System.getProperty("line.separator");
// 要执行的语句
StringBuffer sqlStr = new StringBuffer();
// 选择数据库
sqlStr.append("use[" + dbName + "]" + LINE_SEP);
sqlStr.append("delete from ").append(tableName).append(";").append(LINE_SEP);
// 插入语句
StringBuffer insertStr = new StringBuffer("insert into " + tableName + "(");
//没有获得列信息,说明获取列信息失败,返回false 代表导出脚本不成功,否则继续获取列中的数据,写sql脚本
int columnNum = 0;
if(columns == null)
{
return false;
}
else
{
columnNum = columns.size();
}
for(int columnIndex = 0; columnIndex < columnNum; columnIndex++)
{
String[] columnInfo = (String[]) columns.get(columnIndex);
insertStr.append(columnInfo[0] + ",");
}
insertStr.deleteCharAt(insertStr.length() - 1).append(") values(");
// 当返回有值时才开始写脚本,防止抛出空指针异常
if(values != null)
{
int recNum = values.size();
for(int recIndex = 0; recIndex < recNum; recIndex++)
{
sqlStr.append(insertStr);
Vector rec = (Vector) values.get(recIndex);
for(int columnIndex = 0; columnIndex < columnNum; columnIndex++)
{
// 将sql中的单引号' 替换成双引号 ''符号&就不用替换成‘||chr(38)||’
String value = (String) rec.get(columnIndex);
if( value!= null)
{
//防止value的值为null时抛出null异常
value = ToolBox.replaceString(value, "'", "''");
}
sqlStr.append("'").append(value).append("',");
}
sqlStr.deleteCharAt(sqlStr.length() - 1);
sqlStr.append(");").append(LINE_SEP);// 每一行以分号结尾
thousandflag = thousandflag + 1;
if(thousandflag == 1000)
{
sqlStr.append("GO").append(LINE_SEP);// 每1000行插入一个GO语句,并在脚本的最后加一个GO语句
}
}
sqlStr.append("GO").append(LINE_SEP);// 每1000行插入一个GO语句,并在脚本的最后加一个GO语句
// dMsg.debug(sqlStr);
}
// 创建脚本文件
File sqlFile = null;
FileWriter writer = null;
try
{
sqlFile = new File(path + System.getProperty("file.separator") + fileName);
//处理文件名的后缀问题
sqlFile = ToolBox.getSqlFile(sqlFile);
if(sqlFile.exists())
{
sqlFile.delete();
}
sqlFile.createNewFile();
writer = new FileWriter(sqlFile);
writer.write(sqlStr.toString());
isSucceed = true;
}
catch(IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
try
{
writer.close();
}
catch(IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return isSucceed;
}
public static boolean expToOracleScripts(DatabaseInfo dbInfo, String dbName, String[] tableNames, String path, String[] fileNames)
{
int isSucceed = 0;
int tableNum = tableNames.length;
for(int i = 0; i < tableNum; i++)
{
isSucceed = isSucceed +1;
expToOracleScript(dbInfo, dbName, tableNames[i], path, fileNames[i]);
}
if (isSucceed == tableNum)
{
return true;
}
else
{
return false;
}
}
/**
* 将一个数据表导出到脚本
*
* @param dbName
* @param tableName
* @param fileName
* @return
* @throws SQLException
*/
public static boolean expToOracleScript(DatabaseInfo dbInfo, String dbName, String tableName, String path, String fileName)
{
boolean isSucceed = false;
Vector columns = null;
try
{
columns = DBManagerHandler.getColumnInfos(dbInfo, dbName, tableName);
}
catch(FIException e1)
{
// TODO 自动生成 catch块
e1.printStackTrace();
}
Vector values = null;
try
{
values = DBManagerHandler.getAllValues(dbInfo, dbName, tableName);
}
catch(FIException e1)
{
// TODO 自动生成 catch 块
e1.printStackTrace();
}
int thousandflag = 0;
// 换行符
final String LINE_SEP = System.getProperty("line.separator");
// 要执行的语句
StringBuffer sqlStr = new StringBuffer();
sqlStr.append("delete from ").append(dbName).append(".").append(tableName).append(";").append(LINE_SEP);
// 插入语句
StringBuffer insertStr = new StringBuffer("insert into " + dbName + "." + tableName + "(");
// 没有获得列信息,说明获取列信息失败,返回false 代表导出脚本不成功,否则继续获取列中的数据,写sql脚本
int columnNum = 0;
if(columns == null)
{
return false;
}
else
{
columnNum = columns.size();
}
for(int columnIndex = 0; columnIndex < columnNum; columnIndex++)
{
String[] columnInfo = (String[]) columns.get(columnIndex);
insertStr.append(columnInfo[0] + ",");
}
insertStr.deleteCharAt(insertStr.length() - 1).append(") values(");
// 当返回有值时才开始写脚本,防止抛出空指针异常
if(values != null)
{
int recNum = values.size();
for(int recIndex = 0; recIndex < recNum; recIndex++)
{
sqlStr.append(insertStr);
Vector rec = (Vector) values.get(recIndex);
for(int columnIndex = 0; columnIndex < columnNum; columnIndex++)
{
// 将ORACLE中的值&在脚本中替换成‘||chr(38)||’ 单引号' 替换成双引号 ''
String value = (String) rec.get(columnIndex);
if( value!= null)
{
// 下面两句话的顺序不能颠倒
value = ToolBox.replaceString(value, "'", "''");
value = ToolBox.replaceString(value, "&", "'||chr(38)||'");
}
sqlStr.append("'").append(value).append("'").append(",");
}
sqlStr.deleteCharAt(sqlStr.length() - 1);
sqlStr.append(");").append(LINE_SEP);
thousandflag = thousandflag + 1;
if(thousandflag == 1000)
{
// 每1000行插入一个commit语句,并在脚本的最后加一个commit语句
sqlStr.append("commit;").append(LINE_SEP);
}
}
// 在脚本的最后加一个commit语句
sqlStr.append("commit;").append(LINE_SEP);
dMsg.debug(sqlStr);
}
// 创建脚本文件
File sqlFile = null;
FileWriter writer = null;
try
{
sqlFile = new File(path + System.getProperty("file.separator") + fileName);
//处理文件后缀名问题
sqlFile = ToolBox.getSqlFile(sqlFile);
if(sqlFile.exists())
{
sqlFile.delete();
}
sqlFile.createNewFile();
writer = new FileWriter(sqlFile);
writer.write(sqlStr.toString());
isSucceed = true;
}
catch(IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
try
{
writer.close();
}
catch(IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return isSucceed;
}