JDBC學(xué)習(xí)過(guò)程中的問(wèn)題與數(shù)據(jù)庫(kù)連接池-創(chuàng)新互聯(lián)

首先,在獲取數(shù)據(jù)庫(kù)連接中,有可能會(huì)遇見(jiàn)許許多許多的問(wèn)題,比如在主要的三個(gè)要素中出現(xiàn)了錯(cuò)誤就會(huì)導(dǎo)致,連接不上數(shù)據(jù)庫(kù)的問(wèn)題。

創(chuàng)新互聯(lián)主要從事網(wǎng)頁(yè)設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、成都響應(yīng)式網(wǎng)站建設(shè)公司、程序開(kāi)發(fā)、網(wǎng)站優(yōu)化、微網(wǎng)站、微信小程序定制開(kāi)發(fā)等,憑借多年來(lái)在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷(xiāo)經(jīng)驗(yàn),集策劃、開(kāi)發(fā)、設(shè)計(jì)、營(yíng)銷(xiāo)、管理等多方位專(zhuān)業(yè)化運(yùn)作于一體。
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ě)的,寫(xiě)了大寫(xiě)開(kāi)頭就會(huì)出現(xiàn)錯(cuò)誤
        //還有像url也很容易因?yàn)橐恍┦韬鰧?dǎo)致出現(xiàn)問(wèn)題,一旦寫(xiě)錯(cuò),就會(huì)連不上
        Connection conn = driver.connect(url,info);

        System.out.println(conn);

    }
}

這種方法不是很好,應(yīng)為它出現(xiàn)了第三方的API,這樣不好。應(yīng)該采用下面的方法來(lái)獲取連接。

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ū)動(dòng)
    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和“=”中間不能有空格,會(huì)引發(fā)歧義。

還有的時(shí)候會(huì)出現(xiàn)連接了數(shù)據(jù)庫(kù),進(jìn)行了操作,然后發(fā)現(xiàn)插入數(shù)據(jù)庫(kù)的數(shù)據(jù)有問(wèn)題,顯示“?”或者亂碼,這可能是JDBC程序與服務(wù)器端的字符集不一致,那么可以通過(guò)參數(shù)指定服務(wù)器端的字符集
,在庫(kù)名后面加上?useUnicode=true&characterEncoding=utf8設(shè)定字符集為utf8

jdbc:mysql://localhost:3306/庫(kù)名?useUnicode=true&characterEncoding=utf8

這樣獲取數(shù)據(jù)庫(kù)連接各方面都比較的好。

推薦使用PreparedStatement實(shí)現(xiàn)CRUD(增刪改查)操作。

因?yàn)镾tatement存在拼串操作,繁瑣,而且會(huì)出現(xiàn)sql注入的問(wèn)題。

而想要解決sql注入問(wèn)題呢,就要用到PreparedStatement 接口,

PreparedStatement 接口是 Statement 的子接口,它表示一條預(yù)編譯過(guò)的 SQL 語(yǔ)句。

PreparedStatement 代碼的可讀性和可維護(hù)性比Statement要好,PreparedStatement 能大可能提高性能,

數(shù)據(jù)庫(kù)連接池

JDBC數(shù)據(jù)庫(kù)連接池的必要性:

使用開(kāi)發(fā)基于數(shù)據(jù)庫(kù)的web程序時(shí),傳統(tǒng)的模式基本是按以下步驟

1.在主程序(如servlet、beans)中建立數(shù)據(jù)庫(kù)連接

2.進(jìn)行sql操作

3.斷開(kāi)數(shù)據(jù)庫(kù)連接

這種模式會(huì)存在下面的問(wèn)題:

1.普通的JDBC數(shù)據(jù)庫(kù)連接使用 DriverManager 來(lái)獲取,每次向數(shù)據(jù)庫(kù)建立連接的時(shí)候都要將 Connection 加載到內(nèi)存中,然后驗(yàn)證用戶(hù)名和密碼(這一過(guò)程需要花費(fèi)0.05s~1s的時(shí)間)。需要連接的時(shí)候,就向數(shù)據(jù)庫(kù)要求一個(gè),執(zhí)行完成后,再斷開(kāi)連接。

這樣的方式會(huì)消耗大量的資源和時(shí)間。數(shù)據(jù)庫(kù)的連接資源沒(méi)有得到很好的重復(fù)利用。如果同時(shí)有幾百人甚至幾千人在線(xiàn),頻繁的進(jìn)行數(shù)據(jù)庫(kù)連接操作將占用很多的系統(tǒng)資源,嚴(yán)重的甚至?xí)斐煞?wù)器的崩潰。

2.對(duì)于每一次數(shù)據(jù)庫(kù)連接,使用完后都得斷開(kāi)。否則,程序出現(xiàn)異常,使得未能關(guān)閉,將會(huì)導(dǎo)致數(shù)據(jù)庫(kù)系統(tǒng)中的內(nèi)存泄漏,最終將導(dǎo)致重啟數(shù)據(jù)庫(kù)。

3.這種開(kāi)發(fā)不能控制被創(chuàng)建的連接對(duì)象數(shù),系統(tǒng)資源會(huì)被毫無(wú)顧及的分配出去,如過(guò)連接過(guò)多,也可能導(dǎo)致內(nèi)存泄漏,服務(wù)器崩潰。

數(shù)據(jù)庫(kù)連接池就可以一定程度上解決上面的問(wèn)題。

數(shù)據(jù)庫(kù)連接池的基本思想:就是為數(shù)據(jù)庫(kù)連接建立一個(gè)“緩沖池”。預(yù)先在緩沖池中放入一定數(shù)量的連接,當(dāng)需要建立數(shù)據(jù)庫(kù)連接時(shí),只需從“緩沖池”中取出一個(gè),使用完畢之后再放回去。

數(shù)據(jù)庫(kù)連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫(kù)連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接,而不是重新建立一個(gè)。

數(shù)據(jù)庫(kù)連接池在初始化時(shí)將創(chuàng)建一定數(shù)量的數(shù)據(jù)庫(kù)連接放到連接池中,這些數(shù)據(jù)庫(kù)連接的數(shù)量是由最小數(shù)據(jù)庫(kù)連接數(shù)來(lái)設(shè)定的。無(wú)論這些數(shù)據(jù)庫(kù)連接是否被使用,連接池都將一直保證至少擁有這么多的連接數(shù)量。連接池的大數(shù)據(jù)庫(kù)連接數(shù)量限定了這個(gè)連接池能占有的大連接數(shù),當(dāng)應(yīng)用程序向連接池請(qǐng)求的連接數(shù)超過(guò)大連接數(shù)量時(shí),這些請(qǐng)求將被加入到等待隊(duì)列中。

這樣做的優(yōu)點(diǎn)是:
1.資源重用
2.更快的系統(tǒng)反應(yīng)速度
3.新的資源分配手段
4.統(tǒng)一的連接管理,避免數(shù)據(jù)庫(kù)連接泄漏

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站欄目:JDBC學(xué)習(xí)過(guò)程中的問(wèn)題與數(shù)據(jù)庫(kù)連接池-創(chuàng)新互聯(lián)
URL標(biāo)題:http://bm7419.com/article42/ipgec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站網(wǎng)站改版、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)網(wǎng)站排名、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)