zoukankan      html  css  js  c++  java
  • jdbc连接数据库

    前段时间做数据库课程设计,多数人都是用java,在连接数据库这步时不少人遇到问题。

    问题一: <ERROR> Listener refused the connection with the following error:
    ORA-12514, TNS:listener does not currently know of service requested in connect descriptor
    The Connection descriptor used by the client was:
    //localhost:1521/ecmis

    原来是由于ip地址改变引起的“ORA-12541:TNS:无监听程序”错误

    解决方法:

    查看listener.ora的内容:
    # listener.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
    # Generated by Oracle configuration tools.

    SID_LIST_LISTENER =
    (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
          (PROGRAM = extproc)
        )
    )
    LISTENER =
    (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
          (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
        )
    )

    原来本机的ip发生改变后,就出现了上述问题,改变数据库的监听ip地址:
    把(ADDRESS = (PROTOCOL = TCP)(HOST =localhost)(PORT = 1521))
    改成
    (ADDRESS = (PROTOCOL = TCP)(HOST = 计算机名)(PORT = 1521))

    在重启下监听器就可以了

    问题二:JDBC连接ORACLE 

      一、本地通过JDBC获得Oracle数据库连接

           通过JDBC获得Oracle数据库连接,有三种方式:OCI方式、thin方式和JdbcOdbc桥方式。OCI方式依赖于本地的动态链接库,如果在本 地安装了Oracle数据库客户端可以采用该方式;而thin方式为纯java的数据库连接方式;JdbcOdbc桥方式依赖于本地ODBC数据库源的配 置,这种方式一般不太被采用。

      1、OCI方式

      先在本地安装Oracle客户端,安装完之后,在安装的路径中可以找到…/jdbc/lib/classes12.zip文件,我们在环境变量classpath中设置classes12.zip所在的路径。

      然后通过以下的数据库连接类,在本地通过OCI方式获得Oracle数据库连接。

    /**
    * 在本地获得数据库连接
    */

    package com.j2ee.db;

    import java.util.*;
    import java.sql.*;
    import javax.sql.*;
    import java.io.*;
    import oracle.jdbc.driver.*;
    import javax.naming.*;

    /**
    * 通过OCI方式获得Oracle数据库连接
    */
    public class DbConnection
    {
     final static String sDBDriver = "oracle.jdbc.driver.OracleDriver";
     final static String sConnStr = "jdbc:oracle:oci8:sr/sr@ora199";

     /**
     *
     */
     public DbConnection()
     {
     }

     /**
     * 获得Oracle数据库连接
     */
     public java.sql.Connection connectDbByOci()
     {
      java.sql.Connection conn=null;
      try
      {
       Class.forName(sDBDriver);
       conn = DriverManager.getConnection(sConnStr);
      }
      catch (Exception e)
      {
       System.out.println("ERROR:"+e.getMessage());
      }
      return conn;
     }
    }


      在连接字符串 "jdbc:oracle:oci8:sr/sr@ora199" 中,"sr/sr"为Oracle用户的用户名和口令,"ora199"为数据库服务名。
      2、thin方式

      先到Oracle技术网(http://otn.oracle.com/global/cn/software/tech/java /sqlj_jdbc/index.html)下载Oracle JDBC Drivers,同样地将下载后的zip文件的路径设置在环境变量classpath。

      然后通过以下的数据库连接类,在本地通过thin方式获得Oracle数据库连接。

    /**
    * 在本地获得数据库连接
    */

    package com.j2ee.db;

    import java.util.*;
    import java.sql.*;
    import javax.sql.*;
    import java.io.*;
    import oracle.jdbc.driver.*;
    import javax.naming.*;

    /**
    * 通过thin方式获得Oracle数据库连接
    */
    public class DbConnection
    {
     private String sConnStr = "";

     /**
     * 缺省构造器
     */
     public DbConnection()
     {
      sConnStr = "jdbc:oracle:thin:@10.1.4.199:1521:ora199";
     }

     /**
     * @param ip,serviceName
     */
     public DbConnection(String ip,String serviceName)
     {
      sConnStr = "jdbc:oracle:thin:@"+ip+":1521:"+serviceName;
     }

     /**
     * 通过thin方式获得Oracle数据库的连接.
     */
     public java.sql.Connection connectDbByThin()
     {
      java.sql.Connection conn=null;
      try
      {
       Class.forName(sDBDriver);
       conn = DriverManager.getConnection(sConnStr,"sr","sr");
      }
      catch (Exception e)
      {
       System.out.println("ERROR:"+e.getMessage());
      }
      return conn;
     }

     /**
      * 通过thin方式获得Oracle数据库的连接.
      * @param userId,password
     */
     public java.sql.Connection connectByJdbc(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;
     }
    }


      这种方式运用起来比较灵活,简单,具有较强的移植性和适用性。只要注意连接字符串"jdbc:oracle:thin:@10.1.4.199:1521:ora199"中具体参数的设置即可。
      3、JdbcOdbc桥方式

      先通过管理工具中的数据源来添加本地对Oracle数据库的连接,然后通过以下的数据库连接类,在本地通过JdbcOdbc桥方式获得Oracle数据库连接。

    /**
    * 在本地获得数据库连接
    */

    package com.j2ee.db;

    import java.util.*;
    import java.sql.*;
    import javax.sql.*;
    import java.io.*;
    import oracle.jdbc.driver.*;
    import javax.naming.*;

    /**
    * 通过JdbcOdbc桥方式获得Oracle数据库连接
    */
    public class DbConnection
    {
     /**
      *
     */
     public DbConnection()
     {
     }

     /**
      * 获得Oracle数据库连接
     */
     public java.sql.Connection connectDbByJdbcOdbcBridge()
     {
      java.sql.Connection conn=null;
      try
      {
       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
       con=DriverManager.getConnection("jdbc:odbc:ora199","sr","sr");
      }
      catch (Exception e)
      {
       System.out.println("ERROR:"+e.getMessage());
      }
      return conn;
     }
    }


      在getConnection方法中第一个参数"jdbc:odbc:ora199" 中的"ora199"为本地ODBC数据源的数据源名称,第二个参数和第三个参数分别为Oracle的用户名和口令。

  • 相关阅读:
    jquery Combo Select 下拉框可选可输入插件
    EF 二级缓存 EFSecondLevelCache
    ASP.NET web.config中的连接字符串
    C# Aspose word 替换指定键值数据
    vs2015提示中文
    c# String.Join 和 Distinct 方法 去除字符串中重复字符
    How do I learn mathematics for machine learning?
    Machine Learning Books Suggested by Michael I. Jordan from Berkeley
    PCA,SVD
    【机器学习Machine Learning】资料大全
  • 原文地址:https://www.cnblogs.com/wusthjp/p/2398246.html
Copyright © 2011-2022 走看看