• 金仓数据库KingbaseES客户端编程接口指南-JDBC(12. 在应用服务器中配置JDBC)


    12. 在应用服务器中配置JDBC

    12.1. WebSphere5.1

    使用 IBM 的 WebSphere5.1 应用服务器,需要配置其 JNDI 和连接池,可通过其产品提供的"管理控制台"工具,先配置 KingbaseES ClassPath 环境,然后配置 JDBC 提供程序环境 JNDI,最后定制连接池定制属性,由于与其他服务器不同之处,WebSphere5.1 需要 JDBC 提供 javax.sql.ConnectionPoolDataSource 的实现,而不是 javax.sql.DataSource 的实现,KingbaseES JDBC 对 javax.sql.ConnectionPoolDataSource 的实现的完整类路径名称为 com.kingbase8.jdbc3.Jdbc3ConnectionPool,故只需把该实现提供给 WebSphere 即可,另外在定制 com.kingbase8.jdbc3.Jdbc3ConnectionPool 的连接属性时,连接属性的名字大小写敏感(连接属性包括 serverName 、user 、password 、databaseName、portNumber ,其中 serverName 表示数据库服务器的 IP 地址,user 表示登陆名,password 表示登陆密码,databaseName 表示数据库实例名,portNumber 表示数据库服务器监听的端口号),具体配置详细信息如下:

    第一步:配置 WebSphere 变量,可通过"管理控制台"管理界面中的 〈环境->管理 WebSphere 变量〉路径配置 KingbaseES JDBC 的 ClassPath 环境变量。

    第二步:配置 JDBC 提供程序,可通过"管理控制台"管理界面中的〈资源->JDBC 提供程序〉配置KingbaseES 数据库连接 JNDI。

    第三步:配置 JDBC 提供程序,可通过"管理控制台"管理界面中的<资源->JDBC 提供程序->数据源->定制属性>配置 KingbaseES 数据库连接属性。

    配置完成且测试数据库连接成功以后,可在 WebSphere 的安装目录下可找到 resources.xml,在其中可发现如下的配置文字字段:

    
    ${KingBaseJDBCClassPath}/kingbase8jdbc.jar
    
    
    
    
    
    
    
    
    
    
    
    
    

    第四步:应用程序中引用,编程方法如下:

    例 12-1. 使用 WebSphere 建立连接

    DataSource ds = (DataSource)ctx.lookup("KingBaseDS");
    Connection con = ds.getConnection();
    Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT ID,NAME FROM T_USERNAME");
    while (rs.next())
    {
       out.println(rs.getInt(1) + "    " + rs.getString(2) + "
    "); } rs.close(); stmt.close(); con.close();

    12.2. Weblogic7.0

    使用第三方的应用服务器,需要配置其连接池和 JNDI ,在 Weblogic 中,可通过 Weblogic 提供的控制台先配置连接池,然后配置数据源。配好后,其 config.xml 文件中的相应内容如下:

    …………
    
    
    …………
    

    在配置结束后,就可以写程序来获取数据源了,其步骤如下:

    1. 通过 JNDI 查找数据源。

    Context  ctx = new InitialContext();
    DataSource ds = (DataSource)ctx.lookup("kingbase_Data_Source");
    
    1. 使用数据源以获得数据库连接,并处理 SQL语句操作。

    Connection  conn = ds.getConnection();
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT name,nick FROM tu9 ");
    while (rs.next())
    {
       out.println(rs.getString("name") + "     " + rs.getString("nick"));
    }
    

    例 12-2. 使用Weblogic建立连接

    此程序的格式是 JAVA 的 Servlet 格式的程序,注意使用时要在相应的 web.xml 文件中添加相应的配置。

    import java.io.*;
    import java.sql.*;
    import javax.servlet.http.*;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import java.util.*;
    import com.kingbase8.jdbc3.*;
    
    public class example3 extends HttpServlet
    {
        /* 初始化 */
        public void init()
        {
            try
            {
                ctx = new InitialContext();
            }
            catch (Exception E)
            {
                E.printStackTrace() ;;
            }
        }
    
        /* 执行service */
        public void service(HttpServletRequest requ, HttpServletResponse
            resp) throws IOException
        {
            Connection conn = null;
            try
            {
                /* response获取writer对象 */
                PrintWriter out = resp.getWriter();
                out.println("");
                out.println("use DataSource from JNDI" +
                    "");
                out.println("");
                out.println("

    use DataSource from JNDI

    "); try { /* 获取数据源 */ DataSource ds = (DataSource)ctx.lookup( "weblogic.jdbc.pool.commercePool"); /* 获取连接 */ conn = ds.getConnection(); /* 创建Statement */ stmt = conn.createStatement(); /* 执行查询 */ rs = stmt.executeQuery("SELECT name,nick FROM tu9 "); while (rs.next()) { /* 输出到writer */ out.println(rs.getString("name") + "- " + rs.getString("nick") + "- " + "

    "); } } catch(SQLException e) { e.printStackTrace() ; } catch(NamingException e) { e.printStackTrace() ; } } catch (Exception E) { E.printStackTrace() ; } finally { if (rs != null) { try { rs.close(); } catch (Exception ignore) {}; } if (stmt != null) { try { stmt.close(); } catch (Exception ignore) {}; } if (conn != null) { try { conn.close(); } catch (Exception ignore) {}; } } } static Context ctx; javax.sql.DataSource ds; Statement stmt; ResultSet rs; }

    第四步:应用程序中引用,编程方法如下:

    
    
    
    …………
    
    example3
    example3/servlet-class>
    
    
    example3
    /
    
    …………
    
    

    12.3. Tomcat

    Tomcat 在启动之前,需要配置其 server.xml 文件 和 web.xml 文件,以便 Tomcat 可以加载 KingbaseES JDBC 驱动。

    在 Tomcat 的 webapps 目录下建立文件夹 DBTest (tomcatwebappsDBTest).

    把 kingbase8jdbc.jar 驱动程序拷贝到 \tomcatcommonlib\ 目录下。

    server.xml 文件配置格式如下:(位于路径"$CATALINA_HOME/conf/server.xml.")

    ……………………
    ……………………
    
    
        
    
    

    web.xml 文件配置格式如下:(位于工作路径"tomcatwebappsDBTestWEB-INFweb.xml")

    
    
    
        Kingbase Test App
        
            DB Connection
            jdbc/TestDB
            javax.sql.DataSource
            Container
        
    
    

    在配置结束后,就可以写程序来获取数据源了,其步骤如下:(可参考 Tomcat 自带的文件说明--《JNDI Datasource HOW-TO》)

    1. Database Connection Pool (DBCP) Configurations

    DBCP 包括如下 jar 文件:

    commons-dbcp/commons-dbcp2
    commons-pool/commons-pool2
    

    这些 jar 文件应该位于 "$CATALINA_HOME/common/lib" 路径下。

    1. 测试代码:

    1. 先编写一个jsp 文件,放置于 \tomcatwebappsDBTest\ 目录下: test.jsp

      
      
          DB Test
      
      
      <%
          kb.DBTest tst = new kb.DBTest();
          tst.init();
      %>
      
      

      Results

      Name <%= tst.getName() %>
      Age <%= tst.getAge() %>
    2. 使用数据源和连接池建立一个 java 文件,放置于 \tomcatwebappsDBTestweb-infclasseskb\ 目录下:

      例 12-3. 使用 Tomcat 建立连接

      在 linux 中 kingbase 安装在 /opt/Kingbase/ES/V8 下,需要对数据库test作一次完全备份, 备份到 /home/kingbase/backup 目录下,

      package kb;
      import javax.naming.*;
      import javax.sql.*;
      import java.sql.*;
      
      public class DBTest
      {
          String name = "Not Connected";
          int age = -1;
          public void init()
          {
              try
              {
                  /* 实例化InitialContext */
                  Context ctx = new InitialContext();
                  if(ctx == null )
                      throw new Exception("Exception message:No Context");
                  /* 获取数据源 */
                  DataSource ds = (DataSource)ctx.lookup(
                      "java:comp/env/jdbc/TestDB");
                  if (ds != null)
                  {
                      /* 获取连接 */
                      Connection conn = ds.getConnection();
                      if(conn != null)
                      {
                          name = "Got Connection "+conn.toString();
                          /* 创建Statement */
                          Statement stmt = conn.createStatement();
                          /* 执行查询 */
                          ResultSet rst = stmt.executeQuery(
                              "select name, age from testdata");
                          if(rst.next())
                          {
                              /* 获取数据 */
                              name=rst.getString(1);
                              age=rst.getInt(2);
                          }
                          /* 关闭连接 */
                          conn.close();
                      }
                  }
              }
              catch(Exception e)
              {
                  e.printStackTrace();
              }
          }
          public String getName() { return name; }
          public int getAge() { return age;}
      }
  • 相关阅读:
    Go面试题——log.fatal和panic的区别
    从 iOS 设备恢复数据的 20 个iOS 数据恢复工具
    【2022年11月15日提高A组】路径计数【DP】
    【UCB操作系统CS162项目】Pintos Lab2:用户程序 User Programs(上)
    JS -正则表达式
    2066. 账户余额
    《Mybatis 手撸专栏》第7章:SQL执行器的定义和实现
    日志打印的碎碎念总结
    JDBC 实现批量插入-任意表名
    opencv学习笔记二——图像基本操作
  • 原文地址:https://blog.csdn.net/arthemis_14/article/details/126171863