首先,在獲取數(shù)據(jù)庫連接中,有可能會遇見許許多許多的問題,比如在主要的三個要素中出現(xiàn)了錯誤就會導致,連接不上數(shù)據(jù)庫的問題。
package com.jdbc;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.SQLException;
import java.util.Properties;
public class JDBCDemo {public static void main(String[] args) throws SQLException {Driver driver = new com.mysql.jdbc.Driver();
String url = "jdbc:mysql://localhost:3306/";
Properties info = new Properties();
info.setProperty("user","root");
info.setProperty("Password","root");
//明顯password是需要全小寫的,寫了大寫開頭就會出現(xiàn)錯誤
//還有像url也很容易因為一些疏忽導致出現(xiàn)問題,一旦寫錯,就會連不上
Connection conn = driver.connect(url,info);
System.out.println(conn);
}
}
這種方法不是很好,應(yīng)為它出現(xiàn)了第三方的API,這樣不好。應(yīng)該采用下面的方法來獲取連接。
public void testConnection5() throws Exception {//1.加載配置文件
InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties();
pros.load(is);
//2.讀取配置信息
String user = pros.getProperty("user");
String password = pros.getProperty("password");
String url = pros.getProperty("url");
String driverClass = pros.getProperty("driverClass");
//3.加載驅(qū)動
Class.forName(driverClass);
//4.獲取連接
Connection conn = DriverManager.getConnection(url,user,password);
System.out.println(conn);
}
一般的,配置文件聲明在工程的src目錄下,起名為:jdbc.properties
user=root
password=root
url=jdbc:mysql://localhost:3306/test
driverClass=com.mysql.jdbc.Driver
需要注意的是,user和“=”中間不能有空格,會引發(fā)歧義。
還有的時候會出現(xiàn)連接了數(shù)據(jù)庫,進行了操作,然后發(fā)現(xiàn)插入數(shù)據(jù)庫的數(shù)據(jù)有問題,顯示“?”或者亂碼,這可能是JDBC程序與服務(wù)器端的字符集不一致,那么可以通過參數(shù)指定服務(wù)器端的字符集
,在庫名后面加上?useUnicode=true&characterEncoding=utf8設(shè)定字符集為utf8
jdbc:mysql://localhost:3306/庫名?useUnicode=true&characterEncoding=utf8
這樣獲取數(shù)據(jù)庫連接各方面都比較的好。
推薦使用PreparedStatement實現(xiàn)CRUD(增刪改查)操作。
因為Statement存在拼串操作,繁瑣,而且會出現(xiàn)sql注入的問題。
而想要解決sql注入問題呢,就要用到PreparedStatement 接口,
PreparedStatement 接口是 Statement 的子接口,它表示一條預編譯過的 SQL 語句。
PreparedStatement 代碼的可讀性和可維護性比Statement要好,PreparedStatement 能大可能提高性能,
數(shù)據(jù)庫連接池
JDBC數(shù)據(jù)庫連接池的必要性:
使用開發(fā)基于數(shù)據(jù)庫的web程序時,傳統(tǒng)的模式基本是按以下步驟
1.在主程序(如servlet、beans)中建立數(shù)據(jù)庫連接
2.進行sql操作
3.斷開數(shù)據(jù)庫連接
這種模式會存在下面的問題:
1.普通的JDBC數(shù)據(jù)庫連接使用 DriverManager 來獲取,每次向數(shù)據(jù)庫建立連接的時候都要將 Connection 加載到內(nèi)存中,然后驗證用戶名和密碼(這一過程需要花費0.05s~1s的時間)。需要連接的時候,就向數(shù)據(jù)庫要求一個,執(zhí)行完成后,再斷開連接。
這樣的方式會消耗大量的資源和時間。數(shù)據(jù)庫的連接資源沒有得到很好的重復利用。如果同時有幾百人甚至幾千人在線,頻繁的進行數(shù)據(jù)庫連接操作將占用很多的系統(tǒng)資源,嚴重的甚至會造成服務(wù)器的崩潰。
2.對于每一次數(shù)據(jù)庫連接,使用完后都得斷開。否則,程序出現(xiàn)異常,使得未能關(guān)閉,將會導致數(shù)據(jù)庫系統(tǒng)中的內(nèi)存泄漏,最終將導致重啟數(shù)據(jù)庫。
3.這種開發(fā)不能控制被創(chuàng)建的連接對象數(shù),系統(tǒng)資源會被毫無顧及的分配出去,如過連接過多,也可能導致內(nèi)存泄漏,服務(wù)器崩潰。
數(shù)據(jù)庫連接池就可以一定程度上解決上面的問題。
數(shù)據(jù)庫連接池的基本思想:就是為數(shù)據(jù)庫連接建立一個“緩沖池”。預先在緩沖池中放入一定數(shù)量的連接,當需要建立數(shù)據(jù)庫連接時,只需從“緩沖池”中取出一個,使用完畢之后再放回去。
數(shù)據(jù)庫連接池負責分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復使用一個現(xiàn)有的數(shù)據(jù)庫連接,而不是重新建立一個。
數(shù)據(jù)庫連接池在初始化時將創(chuàng)建一定數(shù)量的數(shù)據(jù)庫連接放到連接池中,這些數(shù)據(jù)庫連接的數(shù)量是由最小數(shù)據(jù)庫連接數(shù)來設(shè)定的。無論這些數(shù)據(jù)庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數(shù)量。連接池的大數(shù)據(jù)庫連接數(shù)量限定了這個連接池能占有的大連接數(shù),當應(yīng)用程序向連接池請求的連接數(shù)超過大連接數(shù)量時,這些請求將被加入到等待隊列中。
這樣做的優(yōu)點是:
1.資源重用
2.更快的系統(tǒng)反應(yīng)速度
3.新的資源分配手段
4.統(tǒng)一的連接管理,避免數(shù)據(jù)庫連接泄漏
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站欄目:JDBC學習過程中的問題與數(shù)據(jù)庫連接池-創(chuàng)新互聯(lián)
URL標題:http://aaarwkj.com/article42/ipgec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、網(wǎng)站改版、營銷型網(wǎng)站建設(shè)、網(wǎng)站排名、品牌網(wǎng)站設(shè)計、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容