zoukankan      html  css  js  c++  java
  • MySql踩坑总结

    衣带渐宽终不悔,为伊消得人憔悴,众里寻他千百度,蓦然回首,那人却在灯火阑珊处好通顺的句子哈哈

    转了那么多弯,才明白问题就在一个地方。睡觉之前想明白了问题,还是经验太少。王国维的治学三境界:

    昨夜西风凋碧树,独上高楼,望尽天涯路

    衣带渐宽终不悔,为伊消得人憔悴

    众里寻他千百度,蓦然回首,那人却在灯火阑珊处

    数据源配置的问题

    具体可以看 这里

    本地连接可以,连接到服务器就是不行,愣是不行。我刚开始以为是“APPARENT DEADLOCK!!!”的问题,各种google方法,试了一遍还是不行。都快绝望了,晚上图书馆也在试还是没有解决。晚上睡觉的时候突然想起来,我MyEclipse好像屏蔽掉了所有往外的连接,( ̄▽ ̄;),真是搬起石头砸自己的脚,给自己设置障碍。早上一来,将连接放开,好问题解决。贴一下DBCP数据源的配置

    #数据库驱动
    driverClassName=com.mysql.jdbc.Driver
    #数据库连接地址
    url=jdbc:mysql://服务器地址:3306/dbWaterColInfo
    #用户名
    username=root
    #密码
    password=root
     
    #连接池的最大数据库连接数。设为0表示无限制
    maxActive=30
    #最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连
    #接将被标记为不可用,然后被释放。设为0表示无限制
    maxIdle=10
    #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制
    maxWait=1000
     
    #超过removeAbandonedTimeout时间后,是否进 行没用连接(废弃)的回收(默认为false,调整为true) 
    removeAbandoned=true
    #超过时间限制,回收没有用(废弃)的连接(默认为 300秒,调整为180)
    removeAbandonedTimeout=180
    
    //DBCP管理类,也是从网上找的
    package com.kuiblog.utils;
    
    import java.sql.Connection;
    import java.sql.DatabaseMetaData;
    import java.sql.SQLException;
    import java.util.Properties;
     
    import javax.sql.DataSource;
    
    import org.apache.commons.dbcp.BasicDataSourceFactory;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    public class DBCPManager {
        private static final Log log = LogFactory.getLog(DBCPManager.class);
        private static final String configFile = "这里替换成你的实际配置文件";
     
        private static DataSource dataSource;
     
        static {
            Properties dbProperties = new Properties();
            try {
                dbProperties.load(DBCPManager.class.getClassLoader()
                        .getResourceAsStream(configFile));
                dataSource = BasicDataSourceFactory.createDataSource(dbProperties);
     
                Connection conn = getConn();
                DatabaseMetaData mdm = conn.getMetaData();
                log.info("Connected to " + mdm.getDatabaseProductName() + " "
                        + mdm.getDatabaseProductVersion());
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e) {
                log.error("初始化连接池失败:" + e);
            }
        }
     
        private DBCPManager(){
        	
        }
        /**
         * 获取链接,用完后记得关闭
         * 
         * @see {@link DBManager#closeConn(Connection)}
         * @return
         */
        public static final Connection getConn() {
            Connection conn = null;
            try {
                conn = dataSource.getConnection();
            } catch (SQLException e) {
                log.error("获取数据库连接失败:" + e);
            }
            return conn;
        }
     
        /**
         * 关闭连接
         * 
         * @param conn
         *            需要关闭的连接
         */
        public static void closeConn(Connection conn) {
            try {
                if (conn != null && !conn.isClosed()) {
                    conn.setAutoCommit(true);
                    conn.close();
                }
            } catch (SQLException e) {
                log.error("关闭数据库连接失败:" + e);
            }
        }
    }
    

    使用DBCP需要导入两个包加一个log包。commons-dbcpcommons-poolcommons-logging

    然后就可以放心大胆的使用了

    数据库编码问题

    在出现数据库编码问题之前我还遇到了一个小问题,那就是我通过DBUtils操作数据库,执行SELECT * FROM userInfos_t可以查询到所有的内容,然后参数化查询就不行,比如SELECT * FROM userInfos_t WHERE name='张三',但是SELECT * FROM userInfos_t WHERE id =2却可以,也是百思不得解,好吧。也是数据库编码的问题。虽然我在Navicat for mysql中看到的是'张三',但数据库编码方式并不是UTF8,所以我搜索是搜索不出来的。


    1. 首先查看数据库的字符集
    show variables like 'collation_%';
    

    这是我修改之后的,原先的都是latin1

    1. 网上提到了很多解决方法,一定要仔细看。

      我的Mysql版本是5.7,做了如下修改成功了

      修改/etc/mysql/my.cnf

      [client]
      default-character-set=utf8
      [mysqld]
      default-storage-engine=INNODB
      character-set-server=utf8
      collation-server=utf8_general_ci
      

      怎么找my.cnf

      locate my.cnf
      //如果找不到的话
      updatedb,//然后在查找
      

      重启Mysql服务

      service mysqld restart
      

      也可以查看这篇文章

      来解决

      总结

      暂时的问题就这样多,用了DBUtil,没有用Hibernate,等以后学习学习再用。


    ### 文章首发于kuiblog.com。加油
  • 相关阅读:
    nginx能访问html静态文件但无法访问php文件
    LeetCode "498. Diagonal Traverse"
    LeetCode "Teemo Attacking"
    LeetCode "501. Find Mode in Binary Search Tree"
    LeetCode "483. Smallest Good Base" !!
    LeetCode "467. Unique Substrings in Wraparound String" !!
    LeetCode "437. Path Sum III"
    LeetCode "454. 4Sum II"
    LeetCode "445. Add Two Numbers II"
    LeetCode "486. Predict the Winner" !!
  • 原文地址:https://www.cnblogs.com/kui0621/p/mysql.html
Copyright © 2011-2022 走看看