JDBC使用類路徑讀取jdbc配置文件

JDBC使用類路徑讀取jdbc配置文件

時(shí)間:20180314


優(yōu)化jdbc的JdbcUtil類

代碼實(shí)現(xiàn)在JdbcUtil類中使用類路徑讀取jdbc配置文件

//jdbc配置文件--jdbc.properties
url=jdbc:mysql://localhost:3306/day16
user=root
password=root
driverClass=com.mysql.jdbc.Driver
jdbc.properties文件結(jié)構(gòu)目錄
//JdbcUtil.java
/**
 * jdbc通用方法
 * @author mengjie
 *
 */
public class JdbcUtil {
    //url
    //private static String url = "null";錯(cuò)誤寫法,讀取jdbc.properties文件中數(shù)據(jù)無法覆蓋
    private static String url = null;
    //user 
    //private static String user  = "null"; static靜態(tài)寫法,只初始化一次
    private static String user  = null;
    //password
    //private static String password = "null";static靜態(tài)寫法梦裂,只初始化一次
    private static String password = null;
    //driveClass驅(qū)動(dòng)程序類 
    //private static String driverClass = "null";static靜態(tài)寫法痒蓬,只初始化一次
    private static String driverClass = null;
    /**
     *z只注冊(cè)一次驅(qū)動(dòng)撮奏,靜態(tài)代碼塊 
     */
    static {
        //注冊(cè)驅(qū)動(dòng)程序
        try {
            /**
             * 讀取jdbc.properties文件
             */
            //1) 創(chuàng)建Properties
            Properties prop = new Properties();
            
            //構(gòu)造輸入流
            /**
             * 相對(duì)路徑: . 這個(gè)代表當(dāng)前目錄升敲。當(dāng)前目錄本質(zhì)上是java命令運(yùn)行的目錄
             * java項(xiàng)目中:eclipse中,當(dāng)前目錄指向項(xiàng)目的跟目錄
             * web項(xiàng)目中:當(dāng)前目錄只想%tomcat%/bin目錄
             * 結(jié)論:
             * 1).在web項(xiàng)目中不能使用相對(duì)路徑
             * 2).不能使用ServletContext讀取文件(Java項(xiàng)目中無法使用昧识,web項(xiàng)目可行)
             * 3).使用類路徑的方式讀取配置文件
             *      3.1獲取類的對(duì)象
             *          Class clazz = 當(dāng)前項(xiàng)目的類.class
             *      
             *      3.2調(diào)用類的路徑方法
             *          clazz.getResourceAsStream("/配置文件")
             *          這個(gè)斜杠代表類路徑的根目錄
             */
            //1)獲取類的對(duì)象(使用當(dāng)前類)
            Class clazz = JdbcUtil.class;
            //2)使用類路徑的讀取方法去讀取文件
            /**
             * 這個(gè)斜杠:代表項(xiàng)目類路徑的根目錄攻臀。
             * 什么是類路徑:查找類的目錄/路徑
             *      java項(xiàng)目下:類路徑的根目錄焕数,指向項(xiàng)目的bin目錄
             *      Web項(xiàng)目下:類路徑的跟目錄,指向WEB-INF/classes目錄下
             * 只要把配置文件放在src目錄的根目錄下刨啸,那么這些文件就自動(dòng)拷貝到項(xiàng)目的類路徑跟目錄下
             */
            InputStream in = clazz.getResourceAsStream("/jdbc.properties");
            
            //InputStream in = new FileInputStream("./src/jdbc.properties");
            //2) 加載文件
            prop.load(in);
            //3) 讀取文件內(nèi)容
            url = prop.getProperty("url");
            user = prop.getProperty("user");
            password = prop.getProperty("password");
            driverClass = prop.getProperty("driverClass");
            
            System.out.println("url: "+url+" user: "+user+" password: "+password+" driverClass: "+driverClass);
            
            Class.forName(driverClass);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 獲取連接的方法
     * @throws SQLException 
     */
    public static Connection getConnection() {
        try {
            Connection conn = DriverManager.getConnection(url, user, password);
            return conn;
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    /**
     * 釋放資源的方法
     */
    public static void close(Statement stmt, Connection conn) {
        if(stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
        
        if(conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
    }
    
    /**
     * 釋放資源的方法
     */
    public static void close(ResultSet rs, Statement stmt, Connection conn) {
        if(rs!=null) {
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        if(stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
        
        if(conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
    }
}
//測(cè)試demo
public class Demo2 {
    private static Connection conn = null;
    private static Statement stmt = null;
    private static ResultSet res = null;
    public static void main(String[] args) throws Exception {
                String username = "rose";
                String password = "123456";
        conn = JdbcUtil.getConnection();
        stmt = conn.createStatement();
        String sql = "SELECT * FROM user_list WHERE NAME =' "+username+" ' AND PASSWORD=' "+password+" '";
        res = stmt.executeQuery(sql);
        if(res.next()) {
            System.out.println("登陸成功");
        }else {
            System.out.println("登陸失敗");
        }
    }
}

總結(jié)

  1. jdbc是什么堡赔?
    ??使用java程序操作數(shù)據(jù)庫的技術(shù)。(就是一套接口)
  2. jdbc操作數(shù)據(jù)庫步驟:
    ??2.1注冊(cè)驅(qū)動(dòng)
    ???Class.forName(驅(qū)動(dòng)名稱)
    ??2.2獲取連接
    ???Connection conn = DriverManager.getConnection(url,user,password);
    ??2.3創(chuàng)建Statement/PreparedeStatement/CallableStatement
    ???Statement stmt = conn.getStatement();
    ???PreparedStatement stmt = conn.PreparedStatement(sql);
    2.4如果使用PreparedeStatement/CallableStatement设联,設(shè)置參數(shù)
    ??stmt.setXXX(參數(shù)位置, 參數(shù)值)善已;
    2.5執(zhí)行sql/發(fā)送參數(shù)
    ??stmt.executeUpdate() DDL+DML
    ??ResultSet res = stmt.executeQuery() ; DQL
    2.6處理結(jié)果集
    ??res.next()
    ??res.get()
    2.7關(guān)閉資源
    ??res.close();
    ??stmt.close();
    ??conn.close();
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市离例,隨后出現(xiàn)的幾起案子换团,更是在濱河造成了極大的恐慌,老刑警劉巖宫蛆,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件艘包,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡耀盗,警方通過查閱死者的電腦和手機(jī)想虎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叛拷,“玉大人舌厨,你說我怎么就攤上這事『” “怎么了邓线?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵淌友,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我骇陈,道長(zhǎng)震庭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任你雌,我火速辦了婚禮器联,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘婿崭。我一直安慰自己拨拓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布氓栈。 她就那樣靜靜地躺著渣磷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪授瘦。 梳的紋絲不亂的頭發(fā)上醋界,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音提完,去河邊找鬼形纺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛徒欣,可吹牛的內(nèi)容都是我干的逐样。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼打肝,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼脂新!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起粗梭,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤戏羽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后楼吃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妄讯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年孩锡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亥贸。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡躬窜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出炕置,到底是詐尸還是另有隱情荣挨,我是刑警寧澤男韧,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站默垄,受9級(jí)特大地震影響此虑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜口锭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一朦前、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鹃操,春花似錦韭寸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至椰拒,卻和暖如春晶渠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背耸三。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工乱陡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仪壮。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓憨颠,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親积锅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子爽彤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容

  • JDBC簡(jiǎn)介 SUN公司為了簡(jiǎn)化、統(tǒng)一對(duì)數(shù)據(jù)庫的操作缚陷,定義了一套Java操作數(shù)據(jù)庫的規(guī)范适篙,稱之為JDBC。JDBC...
    奮斗的老王閱讀 1,520評(píng)論 0 51
  • 本節(jié)介紹Statement接口及其子類PreparedStatement和CallableStatement箫爷。 它...
    zlb閱讀 1,165評(píng)論 0 0
  • 本文內(nèi)容 1.什么是JDBC以及為什么要使用JDBC 2.JDBC核心API的講解 3.使用JDBC核心API進(jìn)行...
    Vincilovfang閱讀 1,223評(píng)論 0 11
  • 本人的環(huán)境為Myeclipse10嚷节、MySQL5.7.15 本文包括:簡(jiǎn)介JDBC編程步驟打通數(shù)據(jù)庫程序詳解—Dr...
    廖少少閱讀 3,950評(píng)論 7 39
  • 離開的時(shí)候,泥土綿軟 布谷的喉頭灌滿春天的酒 聽笛的時(shí)候虎锚,梅花未開硫痰,梨花先落 風(fēng)吹簾動(dòng),老牛的睫毛跟著閃動(dòng) 抬頭的...
    四夕山人閱讀 206評(píng)論 0 1