开发Axis2服务访问oracle数据库(远程) 关于错误Class Not found : oracle.jdbc.driver.OracleDriver

简介:
    之前的一篇文章是关于开发和部署axis2服务的一个简单例子,由于有的开发者需要在服务中访问数据库,所以我在这里开发一个访问oracle数据库的axis2服务。
    具体的axis2服务开发和部署步骤见前面的文章:[url]http://panpan.blog.51cto.com/489034/119204 [/url] 这里不再详述。

    新建工程:TestJDBCAxis,在src目录下新建包org.company,在包下新建DB类,这个类就是我要包装成服务的代码。
    工程需要加入ojdbc14.jar到build path下。
    DB.java代码如下:
package org.company;

import java.sql.*;

public  class DB {
   private String sConnStr = "";
   final  static String sDBDriver =  "oracle.jdbc.driver.OracleDriver";

         public DB()
        {
          sConnStr =  "jdbc:oracle:thin:@202.117.118.45:1521:repace";
        }
        
         public DB(String ip,String serviceName)
        {
          sConnStr =  "jdbc:oracle:thin:@"+ip+ ":1521:"+serviceName;
        }
        
         public DB(String ip,String port,String serviceName)
        {          
          sConnStr =  "jdbc:oracle:thin:@"+ip+ ":"+port+ ":"+serviceName;
        }
        
         public java.sql.Connection connectDbByThin()
        {
          java.sql.Connection conn= null;
           try
          {
            Class.forName(sDBDriver);
            conn = DriverManager.getConnection(sConnStr, "RCRegistry", "repace");
              }
           catch(Exception e)
          {
            System.out.println( "ERROR:"+e.getMessage());
          }
           return conn;
        }
        
         public java.sql.Connection connectDbByThin(String userId,String password)
        {
          java.sql.Connection conn= null;
           try
          {
            Class.forName(sDBDriver);
            conn = DriverManager.getConnection(sConnStr,userId,password);
          }
           catch(Exception e)
          {
            System.out.println( "ERROR:"+e.getMessage());
          }
           return conn;
        }
        
         public  boolean save(String serviceid) {
          DB myDB =  new DB();
          java.sql.Connection conn = myDB.connectDbByThin();
          System.out.println(conn);
           //创建statement对象
          Statement stmt;
     try {
      stmt = conn.createStatement();
            String sql =  "insert into SERVICE(\"SERVICEID\") VALUES('" + serviceid +  "')";
            stmt.executeQuery(sql);
             return  true;
    }  catch (SQLException e) {
       // TODO Auto-generated catch block
      e.printStackTrace();
       return  false;
    } 
        }
        
         /*
        public static void main(String[] args) throws SQLException {
          DB myDB = new DB();
          java.sql.Connection conn = myDB.connectDbByThin();
          System.out.println(conn);
          //创建statement对象
          Statement stmt = conn.createStatement(); 
          String sql = "insert into SERVICE(\"SERVICEID\") VALUES('kkkkkkk1')";
          stmt.executeQuery(sql);          
          //调用并执行SQL语句
          //rs.next();
          //rs.next();
          //System.out.println(rs.getString(2));
             }
             */

}

    连接字符串sConnStr =  "jdbc:oracle:thin:@202.117.118.45:1521:repace" ;中, 202.117.118.45 是oracle数据库服务器的地址,可以是远程或者本地,repace是一个数据库名。
getConnection(sConnStr, "RCRegistry" , "repace" )中, RCRegistry 是数据库名, repace 是数据库密码。
    发布该工程到axis2服务,服务名为TestJDBCAxis_service.aar,在axis2的WEB-INF\services下,在网址中输入:[url]http://localhost:8080/axis2/services/listServices[/url] 可以看到刚部署好的服务。
    编写客户端访问代码,同上一篇文章,TestDB.java代码如下:
package org.company;

import javax.xml.namespace.QName;

import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

public  class TestDB {

     private RPCServiceClient serviceClient;
     private Options options;
     private EndpointReference targetEPR;
    
     public TestDB(String endpoint)  throws AxisFault {
        serviceClient =  new RPCServiceClient();
        options = serviceClient.getOptions();
        targetEPR =  new EndpointReference(endpoint);
        options.setTo(targetEPR);
    }
     public Object[] invokeOp(String targetNamespace, String opName,
            Object[] opArgs, Class<?>[] opReturnType)  throws AxisFault,
            ClassNotFoundException {
         // 设定操作的名称
        QName opQName =  new QName(targetNamespace, opName);
         // 设定返回值
        
         //Class<?>[] opReturn = new Class[] { opReturnType };

         // 操作需要传入的参数已经在参数中给定,这里直接传入方法中调用
         return serviceClient.invokeBlocking(opQName, opArgs, opReturnType);
    }
     /**
        * @param args
        * @throws AxisFault
        * @throws ClassNotFoundException
        */

     public  static  void main(String[] args)  throws AxisFault, ClassNotFoundException {
         // TODO Auto-generated method stub
         final String endPointReference =  "http://localhost:8080/axis2/services/TestJDBCAxisService";
        final String targetNamespace = "http://company.org";
        TestDB client = new TestDB(endPointReference);
        
        String opName = "save";
        Object[] opArgs = new Object[]{"kkkkkkkk11"};
        Class<?>[] opReturnType = new Class[]{boolean[].class};
        
        Object[] response = client.invokeOp(targetNamespace, opName, opArgs, opReturnType);
        System.out.println(((boolean[])response[0])[0]);
    }
}

    运行该代码,可以发现出现错误,在tomcat后台打印出:
    ERROR:Class Not found : oracle.jdbc.driver.OracleDriver
    这个错误应该引起我们的注意,因为很多程序开发人员写web service访问数据库经常遇到这样的错误,然后花费很长时间也找不到错误的原因。出现这个错误是因为我们没有把ojdbc14.jar放入到axis2下的WEB-INF\lib下导致的。

    把ojdbc14.jar放入到到axis2下的WEB-INF\lib下,再次运行这个代码,发现运行成功。




     本文转自panpan3210 51CTO博客,原文链接:http://blog.51cto.com/panpan/142476,如需转载请自行联系原作者



相关文章
|
23天前
|
存储 自然语言处理 Oracle
Oracle数据库字符集概述及修改方式
【8月更文挑战第15天】Oracle 数据库字符集定义了数据的编码方案,决定可存储的字符类型及其表示方式。主要作用包括数据存储、检索及跨系统传输时的正确表示。常见字符集如 AL32UTF8 支持多语言,而 WE8MSWIN1252 主用于西欧语言。修改字符集风险高,可能导致数据问题,需事先备份并评估兼容性。可通过 ALTER DATABASE 语句直接修改或采用导出-导入数据的方式进行。完成后应验证数据完整性。此操作复杂,须谨慎处理。
|
20天前
|
数据采集 Oracle 关系型数据库
实时计算 Flink版产品使用问题之怎么实现从Oracle数据库读取多个表并将数据写入到Iceberg表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
7天前
|
存储 Oracle 关系型数据库
Oracle同一台服务器创建多个数据库
【8月更文挑战第30天】在 Oracle 中,可在同一服务器上创建多个数据库。首先确保已安装 Oracle 软件并具有足够资源,然后使用 DBCA 工具按步骤创建,包括选择模板、配置存储及字符集等。重复此过程可创建多个数据库,需确保名称、SID 和存储位置唯一。创建后,可通过 Oracle Enterprise Manager 进行管理,注意服务器资源分配与规划。
20 10
|
5天前
|
SQL 存储 关系型数据库
C#一分钟浅谈:使用 ADO.NET 进行数据库访问
【9月更文挑战第3天】在.NET开发中,与数据库交互至关重要。ADO.NET是Microsoft提供的用于访问关系型数据库的类库,包含连接数据库、执行SQL命令等功能。本文从基础入手,介绍如何使用ADO.NET进行数据库访问,并提供示例代码,同时讨论常见问题及其解决方案,如连接字符串错误、SQL注入风险和资源泄露等,帮助开发者更好地利用ADO.NET提升应用的安全性和稳定性。
27 6
|
2天前
|
SQL 关系型数据库 分布式数据库
PolarDB Proxy配置与优化:提升数据库访问效率
【9月更文挑战第6天】PolarDB是阿里云推出的高性能分布式关系型数据库,PolarDB Proxy作为其关键组件,位于客户端与PolarDB集群间,负责SQL请求的解析与转发,并支持连接池管理、SQL过滤及路由规则等功能。本文详细介绍了PolarDB Proxy的配置方法,包括连接池、负载均衡和SQL过滤设置,并探讨了监控调优、缓存及网络优化策略,以帮助提升数据库访问效率。
8 1
|
8天前
|
SQL 关系型数据库 数据库连接
探索研究Ruby 数据库访问
【8月更文挑战第31天】
20 1
|
15天前
|
运维 安全 Cloud Native
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
|
16天前
|
存储 Oracle 关系型数据库
分享几个Oracle数据库日常维护中常见的问题
分享几个Oracle数据库日常维护中常见的问题
56 1
|
23天前
|
C# 数据库
C# 使用 DbDataReader 来访问数据库
C# 使用 DbDataReader 来访问数据库
50 2
|
8天前
|
SQL 数据管理 关系型数据库
SQL与云计算:利用云数据库服务实现高效数据管理——探索云端SQL应用、性能优化、安全性与成本效益,为企业数字化转型提供全方位支持
【8月更文挑战第31天】在数字化转型中,企业对高效数据管理的需求日益增长。传统本地数据库存在局限,而云数据库服务凭借自动扩展、高可用性和按需付费等优势,成为现代数据管理的新选择。本文探讨如何利用SQL和云数据库服务(如Amazon RDS、Google Cloud SQL和Azure SQL Database)实现高效的数据管理。通过示例和最佳实践,展示SQL在云端的应用、性能优化、安全性及成本效益,助力企业提升竞争力。
22 0

推荐镜像

更多
下一篇
DDNS