首页>代码>java sqlserver数据库导入oracle实例工具>/sqlserverTooracle/src/getandset/oracleServlet.java
package getandset;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class oracleServlet extends HttpServlet {

	/**
	 * Constructor of the object.
	 */
	public oracleServlet() {
		super();
	}

	
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
		
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String[] index=request.getParameter("checkIndex").split(",");
		String orcName=request.getParameter("orcName");
		String orcPwd=request.getParameter("orcPwd");
		String orcDb=request.getParameter("orcDb");
		String orcIp=request.getParameter("orcIp");
		String orcPort=request.getParameter("orcPort");
		ArrayList al=(ArrayList)(request.getSession().getAttribute("tables"));//获取数据库中的所有表名
		//获得一个sql server数据库连接。
		SqldbAccess sdba=(SqldbAccess)(request.getSession().getAttribute("sqlcon"));
		//获取一个oracle数据库连接
		OrcdbAccess odba=OrcdbAccess.getDbAccess();
		odba.setValue(orcIp, orcPort, orcDb, orcName, orcPwd);
		for(int i=0;i<index.length;i++){
			String sql="select   a.name FROM syscolumns a join sysobjects b on a.id=b.id and b.xtype='U' and b.name<>'dtproperties' where exists"
							+" (SELECT 1 FROM sysobjects where xtype='PK' and name in "
							+" (SELECT name FROM sysindexes WHERE indid in( "
							+" SELECT indid FROM sysindexkeys WHERE id=a.id AND colid=a.colid))) and b.name='"+al.get(Integer.parseInt(index[i]))+"' ";
			String primaryKey=sdba.getFirstUnit(sql);//得到本次操作的表的主键字符串。
			String newTableSql="create table "+al.get(Integer.parseInt(index[i]))+"(";
			//获取以前的表的字段名及类型和长度。
            ResultSet rSet=sdba.executeResultSet("select c.name,c.length,t.name from  SysColumns c left join  systypes t on c.xtype=t.xtype "
		        +" where ID=OBJECT_ID('"+al.get(Integer.parseInt(index[i]))+"') Order By ColID ");
			String colName;//字段名字
			String colType;//字段类型
			int typeLength;//类型长度
			
			try {//开始取得建表语句。
				while(rSet.next()){
					colName=rSet.getString(1);//获取字段的名字
					typeLength=rSet.getInt(2);//获取字段的 长度
					colType=rSet.getString(3);//获取类型的名字
					//更新建表语句
					if(colType.contains("char")||colType.equals("datetime")){//如果是字符串类型或日期型,则需要指定长度。
						newTableSql+=colName+" varchar2("+typeLength+")";
					}else{//如果不是字符串类型,则不需要指定长度。
						newTableSql+=colName+" "+colType;
					}
					if(colName.equals(primaryKey)){//如果该字段是主键
						newTableSql+=" primary key,";
					}else {
						newTableSql+=" ,";
					}
				}
				rSet.close();
				//把所有的字段都添加进后,完善建表语句。
				newTableSql=newTableSql.substring(0,newTableSql.length()-1)+")";
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				System.out.println(e.getMessage());
				e.printStackTrace();
			}
			//以以前的表表名在oracle中建一个相同名字的表
			try{
			odba.getInt(newTableSql);//建表
			}catch (Exception e) {
				System.out.println("oracle建表失败,请确认是否已打开oracle服务!");
				// TODO: handle exception
			}
			//从sql server取出数据并导入oracle.
			String orlInsert;
			ResultSet rs=sdba.executeResultSet("select * from "+al.get(Integer.parseInt(index[i])));//查询表的所有内容。
			try {
				while(rs.next()){
					orlInsert="insert into "+al.get(Integer.parseInt(index[i]))+" values(";
					for(int j=1;j<rs.getMetaData().getColumnCount()+1;j++){
						String typeCheck=rs.getMetaData().getColumnTypeName(j);
						if(typeCheck.contains("char")||typeCheck.equals("datetime")){
							orlInsert+="'"+rs.getString(j)+"',";
						}else {
							orlInsert+=rs.getString(j)+",";
						}
					}
				//完善insert语句:
					orlInsert=orlInsert.substring(0,orlInsert.length()-1)+")";
					System.out.println(orlInsert+"|");
					odba.getInt(orlInsert);
				}
				System.out.println(al.get(Integer.parseInt(index[i]))+"转移成功!");
				rs.close();	
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		sdba.close();
		odba.close();
		response.sendRedirect("../Success.jsp");
	}

	public void init() throws ServletException {
		// Put your code here
	}

}
最近下载更多
Hachi6  LV13 2022年1月31日
占山为王7064  LV7 2021年12月31日
yangxuhao  LV1 2021年4月1日
lb1234  LV2 2021年3月18日
runs810  LV1 2021年1月29日
dongzhan  LV12 2020年12月9日
微量的记忆  LV10 2019年7月9日
安宇12345  LV15 2019年7月2日
gxd123  LV1 2019年6月25日
2585235446  LV2 2018年6月8日
最近浏览更多
siximu912  LV10 2023年7月14日
nurmamat001  LV2 2022年11月1日
lingqianjue  LV3 2022年4月27日
Hachi6  LV13 2022年1月31日
空心菜4  LV9 2022年1月12日
占山为王7064  LV7 2021年12月31日
knklan  LV8 2021年12月22日
BruceQ  LV14 2021年12月8日
yangsi1025yss  LV11 2021年11月29日
xiaokeimi01  LV15 2021年6月21日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友