在网上找了好多教程 走好好多弯路 现在从头总结下
oralce11g 可以直接用xmltype节点存储xml文件
简单来说就是直接存一个文件进去
首先安装oracle11g 网上教程非常多 然后进Net manage进行服务调试和监听
然后下载PL/SQL Developer (一个图形化管理oracle的方便绿色软件吧)http://pan.baidu.com/s/1gdgkNOB 我自己传到网盘了这个是汉化版的
然后就创建一个xml数据库:
CREATE TABLE case (
case_id NUMBER(6) PRIMARY KEY,
case XMLType)
XMLType COLUMN case
STORE AS CLOB;
CREATE DIRECTORY CASEDIR AS 'E:\Eclipse_Project\oracle_jdbc';
这是我的表 名字是case case_id是主键 case XMLType就是存储xml的地方
CREATE DIRECTORY CASEDIR AS 'E:\Eclipse_Project\oracle_jdbc';
这句话是说给存储xml创建一个目录:CASEDIR 地址是'E:\Eclipse_Project\oracle_jdbc' 后面会用到
然后
1:
创建xml文档
方法非常多
这里用了第三方的jar包 请自行下载jdom.jar ————>http://files.cnblogs.com/sweetculiji/jdom.zip
build path到工程中
1 import java.io.*; 2 import java.util.List; 3 import org.jdom.*; 4 import org.jdom.input.*; 5 import org.jdom.output.*; 6 import org.jdom.xpath.*; 7 public class WriteXML { 8 public void BuildXML() throws Exception { 9 Element root, student, number, name, age; 10 root = new Element("student-info"); //生成根元素:student-info 11 // 生成元素:student(number,name,age) 12 student = new Element("student"); 13 number = new Element("number"); 14 name = new Element("name"); 15 age = new Element("age"); 16 Document doc = new Document(root); //将根元素植入文档doc中 17 18 // 给元素赋值 19 number.setText("001"); 20 name.setText("lnman"); 21 age.setText("24"); 22 23 // 形成树 24 student.addContent(number); 25 student.addContent(name); 26 student.addContent(age); 27 root.addContent(student); 28 29 // 设置格式并生成xml文件 30 Format format = Format.getCompactFormat(); 31 format.setEncoding("gb2312"); //设置xml文件的字符为gb2312 32 format.setIndent(" "); //设置xml文件的缩进为4个空格 33 XMLOutputter XMLOut = new XMLOutputter(format);//元素后换行一层元素缩四格 34 XMLOut.output(doc, new FileOutputStream("E:\\Eclipse_Project\\oracle_jdbc\\case.xml"));
//"E:\\Eclipse_Project\\oracle_jdbc\\case.xml"是指定输出的地方还有输出文件的名字 最好直接设置成前面CREATE DIRECTORY CASEDIR AS 'E:\Eclipse_Project\oracle_jdbc'; 这个地方 到时候直接从这把xml文档直接读入数据库 35 } 36 public static void main(String[] args) throws Exception { // 测试main函数 37 WriteXML w = new WriteXML(); 38 System.out.println(" building an XML document ....."); 39 w.BuildXML(); 40 System.out.println("finished!"); 41 } 42 }
输出的结果查看:
2把创建的xml文档插入到数据库中:
首先你得有oracle连接数据库的jar包
这个oralce安装后就自带 找到自己的安装路径
我的是D:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib
选择6或者6_g添加到工程中即可
用Myeclipse添加的时候可能会出现无法连接的情况
可以参考
http://wenku.baidu.com/view/4dbcd5700722192e4436f606.html来解决
插入的代码
1 package com.steel.src; 2 3 4 import java.sql.Connection; 5 import java.sql.DriverManager; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 import java.sql.Statement; 9 10 public class MD 11 { 12 13 ResultSet rs = null; 14 Statement st = null; 15 Connection con = null; 16 17 //参数 18 String username = "默认用户名 我用的是scott"; 19 String password = "改成你的密码"; 20 String url = "jdbc:oracle:thin:@127.0.0.1:1522:tst";//默认端口是1521 我改成1522了注意下 在Oracle net Manage中可以修改 tst是数据库名字 21 22 public Connection getConnection() 23 { 24 25 //连接 26 try { 27 Class.forName("oracle.jdbc.driver.OracleDriver"); //用Myeclipse连接时候容易出现问题的地方 改各种jar包都不行 参照后面链接 28 con = DriverManager.getConnection(url, username,password); 29 System.out.print("连接成功!\n"); 30 } catch (Exception ex) 31 { 32 ex.printStackTrace(); 33 System.out.print("加载失败!"); 34 } 35 return con; 36 37 } 38 //关闭连接方法 39 public void closeConnection() 40 { 41 42 try { 43 if(rs != null) { 44 rs.close(); 45 rs = null; 46 } 47 if(st != null) { 48 st.close(); 49 st = null; 50 } 51 if(con != null) { 52 con.close(); 53 con = null; 54 } 55 } catch (SQLException e) 56 { 57 e.printStackTrace(); 58 } 59 } 60 61 //插入xml文档 62 public boolean insert() throws SQLException 63 { 64 con=getConnection(); 65 if(con!=null) 66 { 67 st = con.createStatement(); 68 // 插入xml文件 69 String SQL2="Insert into case values('',XMLType(bfilename('CASEDIR','case.xml'),nls_charset_id('AL16UTF8')))"; 70 st.executeUpdate(SQL2); 71 System.out.println("insert success!"); 72 closeConnection(); 73 return true; 74 } 75 return false; 76 77 78 79 } 80 public static void main(String[] args) throws SQLException { 81 MD md = new MD(); 82 boolean result=md.insert(); 83 if(result) 84 System.out.println("insert success!"); 85 } 86 87 88 }
解释下这个sql语句:
String SQL2="Insert into case values('1',XMLType(bfilename('CASEDIR','case.xml'),nls_charset_id('AL16UTF8')))";
case 表名字 前面创建的表只有2列 一列case_id 一列是xmltype
case_id 对应'1'
xmltype列对应 XMLType(bfilename('CASEDIR','case.xml'),nls_charset_id('AL16UTF8')))";
CASEDIR就是前面我们创建的xml目录:
CREATE DIRECTORY CASEDIR AS 'E:\Eclipse_Project\oracle_jdbc';
的名字 必须要对应'case.xml必须在'E:\Eclipse_Project\oracle_jdbc'这个地方 所以刚才写xml文档的时候输出到这里 直接就可以读取了 第二次插入数据库的时候直接覆盖
另外mysql主键有自增的功能oracle不用这个实现 如果想要让case_id 也就是主键自增的话
可以进入数据库设置
首先
创建一个序列 名字叫case_id_sql 然后把这个case_id_sql 通过触发器赋值给主键就可以每次自增了
create sequence case_id_sql
increment by 1
start with 1
nomaxvalue
nominvalue
nocache;
用触发器赋值
create or replace trigger case_trigger
before insert on case
for each row
begin
select case_id_sql.nextval into :new.case_id from dual;
end;
case_trigger 随便取
before insert on case case是表名 case_id_sql.nextval是刚才你创建的那个序列名 new.主键
输入完end;以后没反应
是因为要用再输入个/来触发!坑死我了
这样以后主键就自增了
插入语句就可以改成
String SQL2="Insert into case values('',XMLType(bfilename('CASEDIR','case.xml'),nls_charset_id('AL16UTF8')))";
到底插入结束 可以到PL/SQL Developer 数据库table中查询
(我删了一些)
参考资料:http://blog.sina.com.cn/s/blog_5f240fc40100dvzb.html