最近遇到這樣的問題會報at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1905)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2351)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:824)
at com.zycy.db.DbTrans.executeQuery(DbTrans.java:127)
這樣的錯誤,重啟Tomcat服務後就好了,但是過一晚就有這樣的問題
mysql JDBC URL格式如下:
jdbc:mysql://[host:port],[host:port].../[database][?參數名稱1][=參數值1][&參數名稱2][=參數值2].. .
常用的幾個較為重要的參數:
參數名稱參數說明預設值最低版本要求
user 資料庫使用者名稱(用於連接資料庫) 所有版本
password 使用者密碼(用於連接資料庫) 所有版本
useUnicode 是否使用Unicode字元集,如果參數characterEncoding設定為gb2312或gbk,本參數值必須設定為true false 1.1g
characterEncoding 當useUnicode設定為true時,指定字元編碼。例如可設定為gb2312或gbk false 1.1g
autoReconnect 當資料庫連線異常中斷時,是否自動重新連線? false 1.1
autoReconnectForPools 是否使用針對資料庫連線池的重連策略false 3.1.3
failOverReadOnly 自動重連成功後,連線是否設定為唯讀? true 3.0.12
maxReconnects autoReconnect設定為true時,重試連線的次數3 1.1
initialTimeout autoReconnect設定為true時,兩次重連之間的時間間隔,單位:秒2 1.1
connectTimeout 和資料庫伺服器建立socket連線時的逾時,單位:毫秒。 0表示永不逾時,適用於JDK 1.4及更高版本0 3.0.1
socketTimeout socket操作(讀寫)超時,單位:毫秒。 0表示永不逾時0 3.0.1
對應中文環境,通常mysql連接URL可以設定為:
jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false
在使用資料庫連線池的情況下,最好設定以下兩個參數:
autoReconnect=true&failOverReadOnly=false
要注意的是,在xml設定檔中,url中的&符號需要轉義成&。例如在tomcat的server.xml中設定資料庫連線池時,mysql jdbc url樣例如下:
jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=utf8&autoReconnect