使用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 Object
Dim 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 Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim tbl As Variant
Dim 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, adLockReadOnly
While 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
Wend
rs.Close
Set rs = Nothing
Set fso = Nothing
Set 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数据库中。