mysql 错误与异常

1 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

见名之意:超时,无法连接

所以解决办法也很好办:

  my.ini 中添加 wait_timeout=1814400,(21*3600*24)21 天,修改等待超时时间。


上述问题是由mysql5数据库的配置引起的。mysql5将其连接的等待时间(wait_timeout)缺省为8小时。在其客户程序中可以这样来查看其值:

   mysql﹥
  mysql﹥ show global variables like 'wait_timeout';

  +---------------+---------+

  | Variable_name | Value |

  +---------------+---------+

  | wait_timeout | 28800 |

  +---------------+---------+

  1 row in set (0.00 sec)

  28800 seconds,也就是8小时。

   如果在wait_timeout秒期间内,数据库连接(java.sql.Connection)一直处于等待状态,mysql5就将该连接关闭。这 时,你的Java应用的连接池仍然合法地持有该连接的引用。当用该连接来进行数据库操作时,就碰到上述错误。这解释了为什么我的程序第二天不能登录 的问题。

  你可能会想到在tomcat的数据源配置中有没有办法解决?的确,在jdbc连接url的配置中,你可以附上“autoReconnect=true”,但这仅对mysql5以前的版本起作用。增加“validation query”似乎也无济于事。

  本人觉得最简单的办法,就是对症下药:既然问题是由mysql5的全局变量wait_timeout的缺省值太小引起的,我们将其改大就好了。

   查看mysql5的手册,发现对wait_timeout的最大值分别是24天/365天(windows/linux)。以windows为 例,假设我们要将其设为21天,我们只要修改mysql5的配置文件“my.ini”(mysql5 installation dir),增加一行:wait_timeout=1814400

  需要重新启动mysql5。

  linux系统配置文件:/etc/my.cnf

  测试显示问题解决了。

 

2 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"

原因:因为你的 mysql 安装目录下的 my.ini 中设定的并发连接数太少或者系统繁忙导致连接数被占满。

解决方式:
打开 MYSQL 安装目录打开 MY.INI 找到 max_connections (在大约第 93 行)默认是 100 一般设到 500 1000 比较合适,重启 mysql, 这样 1040 错误就解决啦。
max_connections=1000

 

3 )一直听大家说 mysql 是不区分大小写的,确实,在 windows 平台确实不区分大小写,可是一旦将程序移植到 linux 下,就有问题啦。因为在 linux mysql 对大小写是敏感的。

  解决方法:找到 etc 文件夹下的 my.cnf 配置文件,找到 mysqld

    Lower_case_table_names=1 (让大小写不敏感)不同的数字表示不同的意思,大家如果想详细了解,可以自己上网查一下,在此不详述了。

 

4 )有一次往 表中插入数据时出现: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '£¬photo_url='photos/non.gif', phone='013901290001', id_type='?¨ª???¡è', id_num='' at line 1

  解决方法:因为我的sql 语句是insert into tb_process_form_attendance(runId,key),keymysql 中是关键字,所以无法插入,报错,在key 的头上加上两点( 反引号,它在键盘的~ 这个键上) 。即可搞定:`key` ,哎,真是不用不知道啊~

 

5 )今天在写sql 时遇到一个说在MySQL4.1 中子查询是不能使用LIMIT 的,手册中也明确指明 This version of MySQL doesn t yet support LIMIT & IN/ALL/ANY/SOME subquery

解决办法:这样的语句是不能正确执行的。
select * from table where id in (select id from table limit 10);

 

但是,只要你再来一层就行。如:

select * from table where id in (select t.id from (select * from table limit 10)as t)

 

6 not unique table/alias  

     SQL 语句中出现了非唯一的表或别名。

解决方法:

1 、请检查出现问题位置的 SQL 语句中是否使用了相同的表名,或是定义了相同的表别名。

      2 、检查 SELECT 语句中要查询的字段名是不是定义重复,或者没有定义。

猜你喜欢

转载自maoyifa100.iteye.com/blog/1748368