`衣帶漸寬終不悔,為伊消得人憔悴,眾里尋他千百度,驀然迴首,那人卻在燈火闌珊處`好通順的句子哈哈 轉了那麼多彎,才明白問題就在一個地方。睡覺之前想明白了問題,還是經驗太少。王國維的治學三境界: 昨夜西風凋碧樹,獨上高樓,望盡天涯路 衣帶漸寬終不悔,為伊消得人憔悴 眾里尋他千百度,驀然迴首,那人卻在燈 ...
衣帶漸寬終不悔,為伊消得人憔悴,眾里尋他千百度,驀然迴首,那人卻在燈火闌珊處
好通順的句子哈哈
轉了那麼多彎,才明白問題就在一個地方。睡覺之前想明白了問題,還是經驗太少。王國維的治學三境界:
昨夜西風凋碧樹,獨上高樓,望盡天涯路
衣帶漸寬終不悔,為伊消得人憔悴
眾里尋他千百度,驀然迴首,那人卻在燈火闌珊處
[TOC]
數據源配置的問題
具體可以看 這裡
本地連接可以,連接到伺服器就是不行,愣是不行。我剛開始以為是“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-dbcp
、commons-pool
和commons-logging
包
然後就可以放心大膽的使用了
資料庫編碼問題
在出現資料庫編碼問題之前我還遇到了一個小問題,那就是我通過DBUtils
操作資料庫,執行SELECT * FROM userInfos_t
可以查詢到所有的內容,然後參數化查詢就不行,比如SELECT * FROM userInfos_t WHERE name='張三'
,但是SELECT * FROM userInfos_t WHERE id =2
卻可以,也是百思不得解,好吧。也是資料庫編碼的問題。雖然我在Navicat for mysql
中看到的是'張三',但資料庫編碼方式並不是UTF8
,所以我搜索是搜索不出來的。
- 首先查看資料庫的字元集
show variables like 'collation_%';
這是我修改之後的,原先的都是latin1
網上提到了很多解決方法,一定要仔細看。
我的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。加油