A. JDBC連接資料庫問題
當前資料庫連接工具類沒有問題,你現在需要通過如下步驟進行排查找出原因:
第一,ping資料庫所在的地址IP,如果是本機可以ping127.0.0.1。這是為了確認網路無故障,很多人都忽略了防火牆等等的問題導致資料庫無法正常訪問。
第二,使用MySql可視化工具連接資料庫並且試圖查詢數據,看看是否可以正常訪問資料庫並且獲取數據,該步驟為了確認資料庫服務以及資料庫是否成功開啟。
第三,檢查是否引入了驅動包,你引入的驅動類沒有問題不代表程序就可以根據你的引入找到所對應的資源,資源來自於MySql驅動jar包。
第四,資料庫連接字元串後面的轉碼等等東西去掉然後連接試試 。
B. 為什麼傳統的JDBC連接方式在連接過於頻繁的情況下會造成資料庫的不穩定
資料庫有個連接緩沖池,是為了降低每次建立/釋放連接時的開銷,每次JDBC連接都會產生一個連接在池中,關閉連接後並不會馬上釋放,如果頻繁連接,池裡的連接數會達到最大連接數,從而導致資料庫連接不穩定~
C. jdbc連接mysql資料庫失敗的原因
package com.extranauts.shixun2.m.db.tools;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
public class DBUtils {
private static Properties p = new Properties();
private static DBUtils d = new DBUtils();
static{
try {
p.load(d.getClass().getResourceAsStream("init.properties"));
} catch (IOException e) {
System.out.println("配置文件不存在" + e.getMessage());
}
}
public static Connection getConnection() {
Connection con = null;
// 載入配置文件
// 提取配置文件中的項
// 讀取配置文件中的資料庫連接項
String ip = p.getProperty("ip").trim();
String dbtype = p.getProperty("dbtype").trim();
String dbname = p.getProperty("dbname").trim();
String port = p.getProperty("port").trim();
String username = p.getProperty("username").trim();
String password = p.getProperty("password").trim();
// 判斷鏈接資料庫的種類
if (dbtype.equalsIgnoreCase("mysql")) {
// 創建鏈接
try {
Class.forName("org.gjt.mm.mysql.Driver");
} catch (ClassNotFoundException e) {
System.out.println("mysql驅動未找到" + e.getMessage());
}
StringBuffer s = new StringBuffer();
s.append("jdbc:mysql://");
s.append(ip);
s.append(":");
s.append(port);
s.append("/");
s.append(dbname);
s.append("?user=");
s.append(username);
s.append("&password=");
s.append(password);
s.append("&useUnicode=true&characterEncoding=gb2312");
// myDB為資料庫名
try {
con= DriverManager.getConnection(s.toString());
} catch (SQLException e) {
System.out.println("資料庫連接項不正確" + e.getMessage());
}
}
if (dbtype.equalsIgnoreCase("sqlserver")) {
// 創建鏈接
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
} catch (ClassNotFoundException e) {
System.out.println("sqlserver驅動未找到" + e.getMessage());
}
StringBuffer s = new StringBuffer();
s.append("jdbc:microsoft:sqlserver://");
s.append(ip);
s.append(":");
s.append(port);
s.append(";DatabaseName=");
s.append(dbname);
// mydb為資料庫
try {
con= DriverManager.getConnection(s.toString(),username,password);
} catch (SQLException e) {
System.out.println("資料庫連接項不正確" + e.getMessage());
}
}
// if (dbtype.equals("oracle")) {
//// 創建鏈接
// try {
// Class.forName("oracle.jdbc.driver.OracleDriver");
// } catch (ClassNotFoundException e) {
// System.out.println("oracle資料庫驅動未找到" + e.getMessage());
// }
// String url="jdbc:oracle:thin:@"+ip+":"+port+":"+dbname;
//// orcl為資料庫的SID
// try {
// con= DriverManager.getConnection(url,username,password);
// } catch (SQLException e) {
// System.out.println("資料庫連接項不正確" + e.getMessage());
// }
// }
return con;
}
public static void close(Connection con,PreparedStatement pstam , ResultSet rs){
if(con != null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pstam != null){
try {
pstam.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
沒顧上看你的 這是我以前用過的
D. JDBC連接池的問題。 請問在什麼情況下,會出現這種問題啊 找了好久,找不到原因......
你指的是JDBC連接池連接超時失效問題的問題吧?
這是因為mysql默認保持連接的時間是8小時,如果這個連接在8小時內無人訪問的話,就會關閉這個連接。但是連接池設計的時候沒有考慮到這個問題,還把失效的連接拿出去就會導致出現異常。
解決方法:
1、創建一個線程每隔一段時間就測試一下連接,保持連接時最新的,永遠達不到8小時無人訪問。
2、連接池取連接的時候判定是否這個連接有效。
[java]view plain
if(conn.isValid(1000)){
returnconn;
}
else{
returnthis.CreateConnection();
}
3、不使用連接池,直接拿了就用,用了就還。
E. jdbc c3p0連接mysql 失敗 原因匯總,求助
1,驅動配置有誤:driver=com.mysql.jdbc.Driver
2,資料庫連接地址有誤:url=jdbc:mysql://localhost:3306/test?3useUnicode=true&characterEncoding=utf8
3,密碼或帳號有誤:username=root
password=root
4,資料庫未啟動或無權訪問
5,項目未引入對應的驅動jar包mysql-connector-java-5.1.6-bin.jar
6,mysql root沒有遠程訪問的許可權,需要增加許可權,增加許可權的步驟如下:
進入mysql資料庫:
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
7.jdbc驅動要放到jre裡面。
F. jdbc連接MySQL總是出錯,請問是什麼原因,有沒有解決辦法
可能是以下的其中一種情況:
一:連接URL格式出現了問題(Connection conn=DriverManager.
getConnection("jdbc:mysql://localhost:3306/XX","root","XXXX")
二:驅動字元串出錯(com.mysql.jdbc.Driver)
三:Classpath中沒有加入合適的mysql_jdbc驅動(驅動要和你的資料庫版本一致)
四:驅動jar包放的位置不對
G. JAVA中,連接資料庫JDBC總是連接不上
解決方案:
1 首先要做的是在sql新建查詢里輸入
exec sys.sp_readerrorlog 0, 1, 'listening'
運行後 會顯示你的sql 正在運行的tcp/ip介面
看看是否和你java代碼中指定的url中的介面不一致
2 你看一下伺服器的TCP/IP是否被禁用了,sqlserver2005默認情況下是禁用了TCP/IP連接。啟動TCP/IP連接的方法:開始\程序\Microsoft SQL Server 2005\配置工具\目錄下的SQL Server Configuration Manager,選擇mssqlserver協議, 然後右邊窗口有個tcp/ip協議,然後啟動它,把sqlserver服務停了再啟動。
3 設置 「開始\程序\Microsoft SQL Server 2005\配置工具\SQL Server 外圍應用配置器」 在「SQL Server 2005 外圍應用配置器」頁, 單擊「服務和連接的外圍應用配置器」 ,然後單擊展開「資料庫引擎」, 選中「遠程連接」,在右邊選中「本地連接和遠程連接」, 再選擇要使用的協議,( 這個地方應當啟用TCP/IP 和命名管道服務!)單擊「應用」,您會看到消息: 「直到重新啟動資料庫引擎服務後,對連接設置所做的更改才會生效。」單擊「確定」按鈕返回 。
4 或是防火牆的問題:你把1433的埠加到例外去就可以了。
H. jdbc連接資料庫 載入成功卻連不上
這個可能是你的數據源沒連接,打開控制面板—管理工具—數據源(ODBC)裡面做一個與資料庫連接就可能可以了
希望對你有用
I. 關於用JDBC連接資料庫伺服器,非活動超時的問題,請教高手
聽說默認的不使用超時是30分鍾,失效超時是0,就是無效。那麼默認就是30分鍾會降低到連接池的最小值。如果設置了失效超時,那麼連接達到失效超時那麼久的未活動的時候,就會強行從資料庫斷開,無論目前是空閑還是被應用拿著,甚至連接池會降低到連接最小數一下,有時在監控中看到free
pool為負數可能就是和這個有關。好處是防止連接泄露,和資料庫網路故障導致的連接不可用。
J. java jdbc 連接資料庫斷開 有時候能連接上有時候連接不上 什麼原因
func
ReadFrom(){
//test.txt
內容是
"未來"
file,
_
:=
os.Open("learngo/bytes/text.txt")
buf
:=
bytes.NewBufferString("Learning
swift.")
buf.ReadFrom(file)
//將text.txt內容追加到緩沖器的尾部
fmt.Println(buf.String())
}一般都用連接池來管理。實際應用中不會這樣用,一般用C3P0或是DBCP連接池,還有WEB伺服器的連接池.