使用MDB转换至Oracle的实现(mdb转换为oracle)
使用MDB转换至Oracle的实现
在开发过程中,数据迁移是一项重要的工作。本文将介绍如何使用MDB转换至Oracle并且进行实现。
1. 下载JDBC驱动
从Oracle官网中下载JDBC驱动,选择与你所使用的Oracle数据库版本相应的驱动程序进行下载。在这里我们选择版本为11g的驱动程序,下载后解压得到ojdbc6.jar文件。
2. 创建MDB数据库
使用Microsoft Access软件创建一个MDB格式的数据库,并添加需要的表和数据。
3. 导出数据为XML格式
在MDB数据库中,导出需要迁移的表数据为XML格式。可以使用如下VBA宏来实现:
Sub ExportTableDataToXML()
Dim xmlDoc As ObjectDim xslDoc As Object
Set xmlDoc = CreateObject("MSXML2.DOMDocument")Set xslDoc = CreateObject("MSXML2.DOMDocument")
xmlDoc.LoadXML ""xmlDoc.Save "ExportData.xml"
xslDoc.LoadXML "" & _
"" & _
"
"{concat($tbl_name, '_', translate($fld_name, ' ', '_'))}"">" & _
""
xslDoc.Save "ExportTableData.xsl"
Dim fso As ObjectSet fso = CreateObject("Scripting.FileSystemObject")
Dim tbl As VariantDim rs As Object
Set rs = CreateObject("ADODB.Recordset")rs.Open "SELECT DISTINCT tbl_name FROM MSysObjects WHERE (Type = 1) AND (Left(tbl_name, 1) ""~"") AND (Left(tbl_name, 4) ""MSys"") ORDER BY tbl_name", _
CurrentProject.Connection, adOpenForwardOnly, adLockReadOnlyWhile Not rs.EOF
Set tbl = rs.Fields(0) Dim xDoc As Object
Set xDoc = CreateObject("MSXML2.DOMDocument") xDoc.Load "ExportData.xml"
xDoc.transformNodeToObject xslDoc, xDoc, Array("table_name", tbl) For Each node In xDoc.DocumentElement.ChildNodes
xDoc.DocumentElement.AppendChild xDoc.ImportNode(node, True) Next node
xDoc.DocumentElement.RemoveChild xDoc.DocumentElement.ChildNodes(0) fso.DeleteFile tbl & ".xml", True
xDoc.Save tbl & ".xml" rs.MoveNext
Wendrs.Close
Set rs = Nothing
Set fso = NothingSet xmlDoc = Nothing
Set xslDoc = Nothing
End Sub
在Microsoft Access软件中打开VBA编程环境,将上述宏代码复制到模块中,运行宏导出成XML格式的数据文件。
4. 创建Java工程
在Eclipse等Java开发IDE中,创建一个Java工程,并导入第1步下载的JDBC驱动。
5. 编写Java代码
接下来,使用Java代码将XML格式的数据文件读取并插入Oracle数据库中。以下是实现代码:
import java.io.File;
import java.sql.Connection;import java.sql.DriverManager;
import java.sql.PreparedStatement;import java.sql.SQLException;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;import org.w3c.dom.Element;
import org.w3c.dom.Node;import org.w3c.dom.NodeList;
public class MDBToOracle { public static void mn(String[] args) {
String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@//localhost:1521/orcl";
String user = "username"; String password = "password";
Connection conn = null; PreparedStatement pstmt = null;
try { Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
File folder = new File("export"); File[] files = folder.listFiles();
for (File file : files) { if (file.isFile() && file.getName().endsWith(".xml")) {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(file); doc.getDocumentElement().normalize();
String table = file.getName().replaceAll(".xml", "");
pstmt = conn.prepareStatement("INSERT INTO " + table + " VALUES (?, ?, ?, ?, ?)"); NodeList nodeList = doc.getElementsByTagName(table);
for (int i = 0; i Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node;
List values = readValues(element);
for (int j = 0; j pstmt.setString(j + 1, values.get(j));
} pstmt.execute();
} }
} }
System.out.println("Data migrated successfully!"); } catch (Exception e) {
e.printStackTrace(); } finally {
try { if (pstmt != null) {
pstmt.close(); }
if (conn != null) { conn.close();
} } catch (SQLException e) {
e.printStackTrace(); }
} }
private static List readValues(Element element) {
// TODO: read and return the field values }
}
其中,函数readValues用于从XML格式中读取字段值,并返回一个包含所有值的列表。
6. 运行Java工程
在Eclipse中运行Java工程,即可将MDB数据库中的数据转换并插入Oracle数据库中。