Chinaunix首页 | 论坛 | 博客
  • 博客访问: 70340
  • 博文数量: 29
  • 博客积分: 98
  • 博客等级: 民兵
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-02 00:18
文章分类
文章存档

2012年(13)

2011年(16)

我的朋友

分类:

2011-12-02 00:20:57

原文地址:DBCP 连接 MySQL 作者:silverzhaojr

今天做数据库实验,使用 DBCP 数据库连接池连接 MySQL(Ver 14.14 Distrib 5.5.18)。测试代码很简单:


// ConnectingToMySQL.java

  1. import java.sql.*;
  2. import org.apache.commons.dbcp.BasicDataSource;

  3. public class ConnectingToMySQL {
  4.     public static void main(String[] args) {
  5.         BasicDataSource bds = new BasicDataSource();
  6.         bds.setDriverClassName("com.mysql.jdbc.Driver");
  7.         bds.setUrl("jdbc:mysql://localhost:3306/test");
  8.         bds.setUsername("root");
  9.         bds.setPassword("");
  10.         try {
  11.             System.out.println("Trying to connect!!");
  12.             Connection con = bds.getConnection();
  13.             System.out.println("Connected sucessfully !!");
  14.             con.close();
  15.         } catch (SQLException s) {
  16.             System.out.println("SQL code does not execute.");
  17.         }
  18.     }
  19. }

  1. commons-collections-3.2.1.jar,
  2. commons-dbcp-1.4.jar,
  3. commons-pool-1.5.6.jar,
  4. mysql-connector-java-5.1.18-bin.jar
几个文件复制到 /usr/lib/jvm/java-6-openjdk/jre/lib/ext/ 中。
编译代码:
  1. $ javac ConnectingToMySQL.java
运行程序:
  1. $ java ConnectingToMySQL
结果如下:

竟然是执行失败!
确认 mysql 服务已经运行,再查看端口,发现居然没有程序监听 3306 端口!
在 mysql 提示符下运行
  1. mysql> show variables like 'port';
结果却是 port 为 0!诡异!怎么回事?明明配置文件中设置监听端口为 3306 的。
于是开始了网上艰苦的搜寻,千山万水的跋涉之后,终于在


看到了一丝曙光,好象和什么 named_pipe 相关。
显然,这个对我来说,有点太深奥了,不懂。不过总算有了眉目,姑且一试。
查看 mysql 的配置文件 /etc/mysql/my.cnf,搜索 pipe 单词,终于发现了个中玄机:

  1. # Don't listen on a TCP/IP port at all. This can be a security enhancement,
  2. # if all processes that need to connect to mysqld run on the same host.
  3. # All interaction with mysqld must be made via Unix sockets or named pipes.
  4. # Note that using this option without enabling named pipes on Windows
  5. # (via the "enable-named-pipe" option) will render mysqld useless!
  6. #
  7. skip-networking
可见,为了安全,mysql 默认关闭了 TCP/IP 监听。
将 skip-networking 这一行注释掉,即打开 mysql 的端口监听,然后重启 mysql 服务。
此时使用 lsof 命令查看 3306 端口,可以看到 mysql 进程。
再运行测试程序:

成功!搞定!

后记:
我在网上搜索端口号这个问题时,看到有人说使用 mysql 的 root 用户时,不可以在外部连接数据库,于是我连忙新建了个用户。又说,mysql 的 root 用户密码不能为空,于是我又赶紧给设了个密码。可惜却都未能解决问题。
我很奇怪为什么其他人使用 DBCP 连接 mysql 时没有遇到这个问题呢,因为我搜索『mysql 端口号为 0』,返回的搜索结果很少。或许,他们的默认配置文件不同吧。
阅读(835) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~