Webservice往oracle插入数据.docx
《Webservice往oracle插入数据.docx》由会员分享,可在线阅读,更多相关《Webservice往oracle插入数据.docx(9页珍藏版)》请在冰点文库上搜索。
Webservice往oracle插入数据
在成功发布webservice后,可以通过WSDL找到http地址,里面有自己写的接口方法。
那么如何调用这些接口方法呢?
我们通过soap可以测试查询到的数据,但是无法执行插入方法或者删除方法,这时候我们就要想到java里面的main方法,通过main方法可以实现new一个对象来调用接口方法,既然查询已经成功,就先做一个测试查询的main方法。
在网上查询到如下方法可以进行测试(直接在相应包里创建java文件)
packagecom.zblstockmkg;
import.MalformedURLException;
importorg.codehaus.xfire.XFireFactory;
importorg.codehaus.xfire.client.XFireProxyFactory;
importorg.codehaus.xfire.service.Service;
importorg.codehaus.xfire.service.binding.ObjectServiceFactory;
//webservice接口测试方法from
publicclassTest{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
ServicesrvcModel=newObjectServiceFactory()
.create(IService.class);
XFireProxyFactoryfactory=newXFireProxyFactory(XFireFactory
.newInstance().getXFire());
StringhelloWorldURL="http:
//localhost:
8080/WebService/services/ZblStockMKg";
try{
IServicesrvc=(IService)factory.create(
srvcModel,helloWorldURL);
System.out.print(srvc.findLoad(0,6).get(4).getCategNo());
//srvc.findLoad(0,3).get(0).getCategNo();
}catch(MalformedURLExceptione){
e.printStackTrace();
}
}
}
第二种测试方法就是通过自己建立一个javaweb(WebProject)工程,在里面生成WebserviceClient。
具体方法如下:
首先,你要先把你的WS服务启动起来,就是http:
//localhost:
8080/Example/services/HelloWorldService?
wsdl然后在你的另一个项目中建一个WebserviceClient客户端,用来访问你的WS服务。
建立WebserviceClient方法如下,在Eclipses中建立一个java工程,然后在src上右键--NEW---Other---WebServiceClient--Xfire--在WsdLurl中写上http:
//localhost:
8080/Example/services/HelloWorldService?
wsdl-----下一步结束。
在src里的会出现一些java文件,你找一个以Client结束的java文件,在里面的main方法中会有个service对象,现在你就可以直接用这个对象了,service.hello(参数)这样写就行了。
要实现通过Hibernate将数据插入oracle数据库,需要一个hibernate.cfg.xml文件,在src文件下右键可以new出来。
并且往里面配置相应的mapping即事物管理类。
如:
Hibernate通过此方法知道了我们映射完成了,并且知道了我们如何映射的。
ZblStockMKg.hbm.xml中主键的id配置也是关键点(generratorclass=“”)
主要内容如下我们用的是assigned。
“assigned”
主键由外部程序负责生成,在save()之前指定一个。
“hilo”
通过hi/lo算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。
“seqhilo”
与hilo类似,通过hi/lo算法实现的主键生成机制,需要数据库中的Sequence,适用于支持Sequence的数据库,如Oracle。
“increment”
主键按数值顺序递增。
此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。
这种方式可能产生的问题是:
不能在集群下使用。
“identity”
采用数据库提供的主键生成机制。
如DB2、SQLServer、MySQL中的主键生成机制。
“sequence”
采用数据库提供的sequence机制生成主键。
如Oralce中的Sequence。
“native”
由Hibernate根据使用的数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。
“uuid.hex”
由Hibernate基于128位UUID算法生成16进制数值(编码后以长度32的字符串表示)作为主键。
“uuid.string”
与uuid.hex类似,只是生成的主键未进行编码(长度16),不能应用在PostgreSQL数据库中。
“foreign”
使用另外一个相关联的对象的标识符作为主键。
元素中的用来为该持久化类的实例生成唯一的标识,hibernate提供了很多内置的实现。
Increment:
由hibernate自动递增生成标识符,用于为long,short或者int类型生成唯一标识。
identity:
由底层数据库生成标识符(自动增长),返回的标识符是long,short或者int类型的。
sequence:
hibernate根据底层数据库序列生成标识符,返回的标识符是long,short或者int类型的。
hilo:
使用一个高/低位算法来高效的生成long,short或者int类型的标识符。
uuid.hex:
用一个128-bit的UUID算法生成32位字符串类型的标识符。
native:
根据底层数据库的能力选择identity,sequence或者hilo中的一个。
assigned:
让应用程序在save()之前为对象分配一个标示符。
foreign:
使用另外一个相关联的对象的标识符。
和联合一起使用。
一、id生成方式
1,序列sequence只适用于Oracle
person_seq--指定sequence名-->
2,自增列,适用于SQLServer、MySql
3,取最大值加一
4,根据底层数据库指定生成方法
使用缺省策略
针对Oracle数据库的生成方式还是sequence,只不过需要一个特定名字的sequence,"hibernate_sequence"。
5,高低位算法
high_value
--设置高位值取值的表-->
next_value
--设置高位值取值的字段-->
50
--指定低位最大值,当取道最大值是会再取一个高位值再运算-->
以上是hilo算法的普通形式,不适合用于squenece
在一个会话中保存多个对象
二、Hibernate中对类关系的处理:
one―to―one关系在数据库中如何体现,在JavaBean中如何体现,在
Hibernate中如何映射one-to-one关系。
1、数据库中:
一个表的外健对应另一个表的主健,外健要加上Unique约束(外健关联)。
或者是两个表共享一个主健,表现为子表中的pk同时引用了父表的pk作外健而存在(主健关联,子表中的pk和fk为一个字段)。
2、javaBean中:
在JavaBean中增加一个属性,即另外一个对象的引用,可以单向也可以双向。
3、在hibernate中:
A、主健映射:
都是one-to-one要用foreign生成策略。
以汽车car和发动机Engine(一对一关系)为例:
a、主表Car.hbm.xml的写法
注:
cascade="all"表示增删改查Car对象时都会级联增加、删除和修改Engine对象。
级联一定是在主对象的映射文件中
b、附表Engine.hbm.xml的写法
car
注:
c表示Engine应用了Car的主健作为外健。
foregin表明id的生成方式是引用表car的主键
B、外健映射:
主表中用one-to-one,通过property-refmany-to-one
a、主表Car.hbm.xml的写法
property-ref="car"cascade="save-update"/>
注:
name="engine"property-ref="car"表示engine表引用了car表的主健作为他的外健。
cascade="save-update"表示增改Car对象时都会级联增加和修改Engine对象。
b、附表Engine.hbm.xml的写法
unique="ture"column="carid"/>
注:
unique="ture"column="carid"表示为engine表中的外健carid加上唯一约束,使之一对多关系强制转化为一对一关系。
最后通过自己建立的Client类测试插入。
packagecom.zblstockmkg;
importjava.math.BigDecimal;
importorg.hibernate.Session;
importorg.hibernate.SessionFactory;
importorg.hibernate.cfg.Configuration;
publicclassClient{
publicstaticvoidmain(String[]args){
//读取hibernate.cfg.xml文件
Configurationcfg=newConfiguration().configure();
//建立SessionFactory
SessionFactoryfactory=cfg.buildSessionFactory();
//取得session
Sessionsession=null;
try{
session=factory.openSession();
//开启事务
session.beginTransaction();
ZblStockMKguser=newZblStockMKg();
inta=111;
user.setBatchNo(a);
user.setCategNo("102");
//保存User对象
session.save(user);
//提交事务
session.getTransaction().commit();
session.flush();
System.out.println("保存成功");
}catch(Exceptione){
e.printStackTrace();
//回滚事务
session.getTransaction().rollback();
}finally{
if(session!
=null){
if(session.isOpen()){
//关闭session
session.close();
}
}
}
}
}