Oracle 11g XML java连接

在网上找了好多教程 走好好多弯路 现在从头总结下

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 }

输出的结果查看:

Oracle 11g XML java连接

 

2把创建的xml文档插入到数据库中:

首先你得有oracle连接数据库的jar包

这个oralce安装后就自带 找到自己的安装路径

我的是D:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib

 

Oracle 11g XML java连接

 

选择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中查询

(我删了一些)

Oracle 11g XML java连接

 

参考资料:http://blog.sina.com.cn/s/blog_5f240fc40100dvzb.html

 

你可能感兴趣的:(oracle 11g)