今天在做测试数据库的时候,需要把用户提供的视图,转换成我们的测试表。但是由于权限限制,我们没有办法获取用户的正式表(由于安全方面的关系,表结构不好协调)。只能通过plSql操作用户提供的视图,去建立自己的表。用PlSql搞来搞去,能通过plsql将查询结果导出为sql文件,还可以通过视图的描述功能,将字段信息导出xml文件,格式大概如下:
<?xml version="1.0" encoding="utf-8" ?>
<ROWDATA>
<ROW>
<Name>DICTIONARYID</Name>
<Type>VARCHAR2(125)</Type>
<Nullable></Nullable>
<Default></Default>
<Comments></Comments>
</ROW>
<ROW>
<Name>KIND</Name>
<Type>VARCHAR2(110)</Type>
<Nullable></Nullable>
<Default></Default>
<Comments></Comments>
</ROW>
<ROW>
<Name>CODE</Name>
<Type>VARCHAR2(120)</Type>
<Nullable></Nullable>
<Default></Default>
<Comments></Comments>
</ROW>
………..
</ROWDATA>
看来看去,想到,如果能通过解析这个xml文件,把对应的值取到,组成sql语句的话,创建表结构,然后把数据导入进去,不就可以了嘛!
这里就要用到java解析xml内容了。
源代码如下:
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class MakeSqlByXml {
public static DocumentBuilderFactory factory = null;
public static DocumentBuilder builder = null;
public static Document document = null;
public MakeSqlByXml() {
}
public static String MakeSql() {
String sql = "Create table test_t_dictionary";
String path = "d:\\tt.xml";
String fields = "";
//从 XML 文档获取生成 DOM 对象树的解析器实例
factory = DocumentBuilderFactory.newInstance();
try {
//从 XML 文档获取 DOM 文档实例
builder = factory.newDocumentBuilder();
//将给定文件的内容解析为一个 XML 文档
document = builder.parse(new File(path));
//访问文档的子节点
Element rootElement = document.getDocumentElement();
//返回具有给定标记名称的所有后代
NodeList nodeList = rootElement.getElementsByTagName("ROW");
//遍历所有节点
for (int i = 0; i < nodeList.getLength(); i++) {
Node nodel = nodeList.item(i);
//遍历节点的所有属性
for (Node node = nodel.getFirstChild(); node != null; node = node.getNextSibling())
{
//获取指定节点的值
if (node.getNodeName().equals("Name")) {
String name = node.getFirstChild().getTextContent();
fields = fields + name + " ";
}
if (node.getNodeName().equals("Type")) {
String type = node.getFirstChild().getNodeValue();
fields = fields + type + " , ";
}
}
}
fields = fields.substring(0, fields.length()-2);
sql = sql +"("+ fields+")";
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sql;
}
public static void main(String args[]) {
System.out.println(MakeSql());
}
}
运行结果:
然后在plsql中执行一下,再把数据导入进去,就可以了。
程序中指定了xml文件的路径,我直接把导出的xml文件放在了D盘下了。
<?xml version="1.0" encoding="utf-8" ?>
<ROWDATA>
<ROW>
<Name>DICTIONARYID</Name>
<Type>VARCHAR2(125)</Type>
<Nullable></Nullable>
<Default></Default>
<Comments></Comments>
</ROW>
<ROW>
<Name>KIND</Name>
<Type>VARCHAR2(110)</Type>
<Nullable></Nullable>
<Default></Default>
<Comments></Comments>
</ROW>
<ROW>
<Name>CODE</Name>
<Type>VARCHAR2(120)</Type>
<Nullable></Nullable>
<Default></Default>
<Comments></Comments>
</ROW>
………..
</ROWDATA>
看来看去,想到,如果能通过解析这个xml文件,把对应的值取到,组成sql语句的话,创建表结构,然后把数据导入进去,不就可以了嘛!
这里就要用到java解析xml内容了。
源代码如下:
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class MakeSqlByXml {
public static DocumentBuilderFactory factory = null;
public static DocumentBuilder builder = null;
public static Document document = null;
public MakeSqlByXml() {
}
public static String MakeSql() {
String sql = "Create table test_t_dictionary";
String path = "d:\\tt.xml";
String fields = "";
//从 XML 文档获取生成 DOM 对象树的解析器实例
factory = DocumentBuilderFactory.newInstance();
try {
//从 XML 文档获取 DOM 文档实例
builder = factory.newDocumentBuilder();
//将给定文件的内容解析为一个 XML 文档
document = builder.parse(new File(path));
//访问文档的子节点
Element rootElement = document.getDocumentElement();
//返回具有给定标记名称的所有后代
NodeList nodeList = rootElement.getElementsByTagName("ROW");
//遍历所有节点
for (int i = 0; i < nodeList.getLength(); i++) {
Node nodel = nodeList.item(i);
//遍历节点的所有属性
for (Node node = nodel.getFirstChild(); node != null; node = node.getNextSibling())
{
//获取指定节点的值
if (node.getNodeName().equals("Name")) {
String name = node.getFirstChild().getTextContent();
fields = fields + name + " ";
}
if (node.getNodeName().equals("Type")) {
String type = node.getFirstChild().getNodeValue();
fields = fields + type + " , ";
}
}
}
fields = fields.substring(0, fields.length()-2);
sql = sql +"("+ fields+")";
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sql;
}
public static void main(String args[]) {
System.out.println(MakeSql());
}
}
运行结果:
然后在plsql中执行一下,再把数据导入进去,就可以了。
程序中指定了xml文件的路径,我直接把导出的xml文件放在了D盘下了。
发表评论
-
一个故事讲清楚NIO(转载)
2015-10-22 11:32 649假设某银行只有10个职 ... -
struts2动态生成zip文件并下载
2013-10-18 14:55 934功能:zip文件下载 简述: 1.根据画面上的复选框进行文 ... -
一些数据库自定义函数
2013-10-15 21:42 904oracle 写法: --联系人列表 create or r ... -
如何远程连接db2数据库
2012-09-18 10:10 947在DB2数据库中,编目(catal ... -
[转]DB2行列转换
2012-09-13 13:15 860行转列 给出下面的数据: CREATE TABLE Sales ... -
存储过程 入门
2012-09-07 09:49 887示例说明:先创建一个临时表,并插入数据,然后查询临时表,返回游 ... -
ue使用的一些小技巧
2012-09-05 11:36 12471. UE里面替换tab键为空格 解决使用UE编辑好 ... -
ext tree 更改图标
2012-04-16 23:11 1686如果在Java代码中树的Node不设置cls的话,Extjs ... -
js六种数据类型和var
2012-04-13 14:32 1246JavaScript 有六种数据类 ... -
ExtJs 控制复选框disabled
2012-04-13 14:12 2921var csm2 = new Ext.grid.Checkbo ... -
JS 四舍五入
2012-04-10 23:36 950写法巨强的四舍五入的转换函数,如下: function ro ... -
Ext el属性
2012-04-10 23:08 874这个是你要将你的组件渲染到哪个div 比如有个<div ... -
getOutputStream() has already been called for this response
2012-04-06 17:33 975getOutputStream() has al ... -
修改TOMCAT(5.5版本前)内存的方法
2012-03-30 11:34 1094Tomcat默认可以使用的内 ... -
oracle 常用sql
2012-03-27 10:49 845--创建用户 CREATE USER &q ... -
两台windows服务器----SVN的迁移
2012-03-26 17:27 1151两台服务器,进行SVN的迁移: 系统平台:windows se ... -
hibernate 延迟加载
2012-03-23 18:06 775延迟加载机制是为了避 ... -
分享一个ldap验证链接的方法
2012-03-22 12:07 1133public String auth(String userN ... -
poi 操作excel
2012-03-19 21:52 1162本篇面向对象为Java的初 ... -
oracle 复制表
2012-03-15 11:47 11231.不同用户之间的表数 ...
相关推荐
- XML配置文件:MyBatis的SQL语句主要在XML配置文件中编写,包括数据源配置、事务管理、SQL映射等。通过工具,我们可以根据Oracle表结构自动创建这些XML文件,其中包含各个表的select、insert、update、delete等...
本书还特别关注性能优化,包括索引策略、查询优化器的工作原理、Explain Plan的使用,以及如何通过调整SQL语句和数据库参数来提升系统性能。此外,还会涉及数据库安全性,如用户权限管理、角色的创建与应用,以及...
Oracle SQL Monitor是一款强大的数据库性能监控工具,主要用于跟踪和分析Oracle数据库中的SQL语句执行情况。在数据库管理和优化中,理解SQL语句的执行性能是至关重要的,因为这直接影响到数据库的响应时间和整体效率...
SQL Developer 支持从多种格式(如 CSV、Excel、XML 等)导入数据到 Oracle 数据库,同时也可将数据导出到这些格式,为数据备份和迁移提供了便利。 **5. PL/SQL 开发** 对于 PL/SQL 开发者,SQL Developer 提供了...
(6) 能运行和调试PL/SQL语句,能精确定位到错误所在的行列位置; (7) 多线程多连接,会话在运行中可以中断,或编辑,或创建新会话; (8) 监控批量SQL语句的运行,在运行中可暂停、更正等; (9) 以缩进的...
5. **数据导出与导入**:提供数据迁移功能,能够将数据导出为多种格式(如CSV、XML、Excel等),也可以从这些格式导入数据到数据库。 6. **报表与图表**:用户可以生成各种报表和图表,以可视化方式展示数据库中的...
这个命令可以生成SQL脚本,包含创建数据库、表、视图等的语句,以及插入数据的语句,使得数据能在其他Mysql实例上重现。 DbSchema作为跨平台的数据库工具,支持多种数据库系统,并且提供图形化的界面来操作这些任务...
“查询”是SQL的核心功能,允许用户通过编写SQL语句来检索、筛选、聚合数据库中的信息。用户可以使用SELECT语句进行复杂的数据查询,包括联接多个表、使用WHERE子句过滤记录、GROUP BY进行分组以及HAVING和ORDER BY...
4. **数据导出和导入**:可以方便地将数据导出到文件或从文件导入数据,支持多种格式,如CSV、XML、Excel等。 5. **图表和报表**:能够生成各种图表和报表,帮助分析和理解数据分布、趋势等信息。 6. **PL/SQL调试...
6. **报表与导出**:可以创建自定义报表,展示数据库信息,支持将数据导出到多种格式,如Excel、CSV、XML等。 7. **连接管理**:支持多种Oracle数据库版本的连接,可以保存多个数据库连接信息,方便在不同项目间...
监控批量SQL语句的运行(在运行中可暂停、更正);不需要安装 Oracle 客户端;占用系统资 源极少;能运行于所有的主流平台包括 Windows、Linux、Unix 及 Mac OS;多线程多连接。所有这些 功能特性在同类工具中表现...
压缩包中的"SQL语句生成2.0正式版"可能是HEIDISQL的一个扩展插件或工具,用于自动化生成SQL语句,提高开发效率。它可能包含以下特性: 1. **自动生成SQL**:根据数据库模型自动生成INSERT、UPDATE、DELETE等语句,...
在这里,你可以输入任何合法的SQL语句,比如`SELECT`、`INSERT`、`UPDATE`或`DELETE`等。按下回车键,查询结果将显示在下方的网格中。 **5. 用户权限管理** HeidiSQL允许你管理数据库用户的权限。通过右键点击用户...
标题中的“sql代码生成工具”指的是一个专门用于自动化生成SQL语句的软件工具。这类工具在IT行业中扮演着重要角色,特别是在数据库管理和开发过程中,能够极大地提高效率并减少人为错误。SQL(Structured Query ...
监控批量SQL语句的运行(在运行中可暂停、更正);不需要安装 Oracle 客户端 ;占用系统资源极少;能运行于所有的主流平台包括 Windows、Linux 、Unix 及 Mac OS; 多线程多连接。所有这些功能特性在同类工具中表现...
### ORACLE SQL Reference 10g 知识点解析 #### 一、Oracle数据库SQL参考手册10g版本概述 《Oracle Database SQL Reference》10g版本是Oracle公司为Oracle数据库10g版本提供的官方SQL语言参考文档。该文档详细介绍...
2. **查询执行**:编写SQL语句,执行查询、更新、插入和删除操作,结果可以以网格或文本形式显示。 3. **结构管理**:创建、修改和删除数据库、表、视图、存储过程等对象,还可以进行索引管理和权限设置。 4. **备份...
SQL Developer 是一款由甲骨文公司(Oracle Corporation)开发的免费、全面的集成开发环境(IDE),主要用于管理和操作 Oracle 数据库。此软件以其强大的功能、直观的用户界面和易用性而受到广大数据库管理员和...
关键词提示是SqlDbx的一个核心特性,它能够自动补全SQL语句中的关键字和对象名,大大减少了编写SQL语句的时间。这个功能对于初学者来说非常友好,可以帮助他们更快地熟悉SQL语法,同时也提升了专业开发者的编写效率...
在菜单栏选择`Tools` -> `Export User Objects`,这将导出所有用户对象的创建脚本,包括表、视图、存储过程等,生成的.sql文件可以用于重建数据库对象的结构。 2. **导出.dmp文件** 如果需要导出包含数据的完整...