Java_(jdbc dbutile c3p0)

JDBC

  • 首先我們要了解什么是JBDC:
    在我們建立了數(shù)據(jù)庫之后,需要與java代碼關(guān)聯(lián),可以通過java代碼執(zhí)行數(shù)據(jù)庫的增刪改查.但由于數(shù)據(jù)庫的種類有多種多樣的,所有給我們提供了這么一種可以統(tǒng)一訪問的java類和接口.jdbc是一種基準(zhǔn),我們可以根據(jù)JDBC構(gòu)建更高級的工作和接口.

  • 如何使用?

    • 首先我們需要導(dǎo)入jdbc的jar包 ->add build path
    • 加載驅(qū)動.
    • 獲取數(shù)據(jù)庫連接.
    • 獲取操作數(shù)據(jù)的對象.
    • 執(zhí)行sql語句.
    • 釋放對象.

首先聲明 我的數(shù)據(jù)庫叫student 表名stu 具體:

數(shù)據(jù)庫表.PNG

具體代碼如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Test1 {
        public static void main(String[] args) throws SQLException  {
            //如果是查找接受結(jié)果  如果插入 刪除 更新不用管(ResultSet)
            
            try {
                Class.forName("com.mysql.jdbc.Driver");//加載驅(qū)動
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //獲取數(shù)據(jù)連接(con)
            Connection con =DriverManager.getConnection("jdbc:mysql://localhost:3306/student", "root", "root");
            PreparedStatement stmt = con.prepareStatement("select *from stu");//獲取操作數(shù)據(jù)的對象(stmt)//執(zhí)行sql語句
           // int row = stmt.executeUpdate();//增刪改
            ResultSet set = stmt.executeQuery();//查找
            while (set.next()) {//讀取數(shù)據(jù)
                //id name age gender
//              int id =set.getInt(1);//通過下標(biāo)獲取
//              String name = set.getString(2);
//              int age = set.getInt(3);
//              String gender = set.getString(4);
                int id = set.getInt("id");//通過字段獲取
                String name = set.getString("name");
                int age = set.getInt("age");
                String gender = set.getString("gender");
                System.out.println(id+name+age+gender);
                
            }
          //釋放對象 (ResultSet) ->stmt ->con
            set.close();
            stmt.close();
            con.close();
            
        }
}

這是最基本的執(zhí)行,還有簡化版的

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Test3 {
    //
    final static    String userName = "root";
    final static    String pass = "root";
    final static    String url = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf-8";
    
    public static Connection getConnect() {
        Connection connectuin = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connectuin =DriverManager.getConnection(url, userName, pass);
       } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch(SQLException e){
            e.printStackTrace();
        }
        return connectuin;
    }
        
    public static void main(String[] args)  {
    
      Connection connection = Test3.getConnect();
      PreparedStatement stmt = null;
      ResultSet set = null;
      
     try {
        stmt = connection.prepareStatement("select name from stu where age < ?");
        stmt.setInt(1, 25);
        set =stmt.executeQuery();
        while (set.next()) {
            String name = set.getString("name");
            System.out.println(name);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }  finally{
        try {
            set.close();
            stmt.close();
            connection.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
}

上面這個完整的代碼中,我們使用?是為了防止SQL注入.使用?會更明了.
這兩段代碼都是執(zhí)行的查詢語句,如果要執(zhí)行增加 刪除 修改 我們就使用
int row = stmt.executeUpdate();//增刪改 就可以了.

DBUtile

  • 什么是DBUtile?
    我們在知道JDBC的基礎(chǔ)上就可以很好的了解DBUtile,在 我們使用JDBC的時候會發(fā)現(xiàn)我們要重復(fù)寫很多代碼(加載驅(qū)動 獲取數(shù)據(jù)庫的連接 獲取數(shù)據(jù)庫的連接對象) 并且需要重復(fù)釋放對象,所有就有了一個封裝了JDBC代碼的一個工具類庫.
  • 需要導(dǎo)入相應(yīng)的jar包.
    具體代碼如下:
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import jdbc.Test3;

//默認(rèn)訪問權(quán)限  只能在自己包內(nèi)  
//public  全部都可以
//protected  只能在自己的子類中
//private  只能在自己類中用

public class Test1 {
    
      public static void main(String[] args) throws SQLException {
     //獲取連接
         Connection con = Test3.getConnect(); // 這是調(diào)用上面封裝的方面 (本人比較懶 望諒解)
         //執(zhí)行sql
         QueryRunner runner = new QueryRunner();
         //1.連接  2sql  3.要存儲的類型
        List<Student> list = runner.query(con, "select * from stu",new BeanListHandler<Student>(Student.class));
         //con.close();//關(guān)閉數(shù)據(jù)庫
         DbUtils.close(con);//關(guān)閉數(shù)據(jù)庫
         //打印結(jié)果
         System.out.println(list);
    }
}

這就是一個student類

public class Student {
    private Integer id;
      private String name;
      private String gender;
      private Integer age;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", gender=" + gender
                + ", age=" + age + "]";
    }
}

c3p0

  • c3p0是一種連接池,概念與線程池類似.通俗點說;就是有一個池子 里面有好幾個連接,需要用連接的時候 取走,不用 就放回.這樣就可以節(jié)省創(chuàng)建連接的時間.
  • 導(dǎo)入jar包.
import java.sql.Connection;
import java.sql.SQLException;

import com.mchange.v2.c3p0.ComboPooledDataSource;
public class Test1 {
    //線程池   
    //c3p0設(shè)置配置文件
     // 1.代碼配置
     // 2. Property文件
     // xml
    public static void main(String[] args) throws SQLException {
        //作用:讀xml 建立線程池       初始化連接   放入線程池
         ComboPooledDataSource dataSource = new ComboPooledDataSource();
         //獲取連接
         Connection con = dataSource.getConnection();
         //正常jdbc  不需要關(guān)閉連接 c3p0回自動回收連接
PreparedStatement stmt = con.prepareStatement("select *from stu");//獲取操作數(shù)據(jù)的對象(stmt)//執(zhí)行sql語句
           // int row = stmt.executeUpdate();//增刪改
            ResultSet set = stmt.executeQuery();//查找
            while (set.next()) {//讀取數(shù)據(jù)
                int id = set.getInt("id");//通過字段獲取
                String name = set.getString("name");
                int age = set.getInt("age");
                String gender = set.getString("gender");
                System.out.println(id+name+age+gender);
                
            }
          //釋放對象 (ResultSet) ->stmt ->con
            set.close();
            stmt.close();
            con.close();
        }

}

下面是c3p0 與DBUtile結(jié)合的使用的代碼

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import dbutiles.Student;

//c3p0 與 Dbutile一起用
public class Test2 {
    public static void main(String[] args) throws SQLException {
        //獲取數(shù)據(jù)庫連接池
         ComboPooledDataSource dataSource = new ComboPooledDataSource();
         //創(chuàng)建dbutile操作對象
        QueryRunner query = new QueryRunner(dataSource);
        //執(zhí)行語句
        List<Student> list = query.query("select * from stu",new BeanListHandler<Student>(Student.class));
        System.out.println(list);
    }

}

以上純屬是一名碼農(nóng)小白的理解,如果有錯誤的地方望各位大神指正.
如果有需要jar包的本媛也可以提供哦!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伙窃,一起剝皮案震驚了整個濱河市狈谊,隨后出現(xiàn)的幾起案子该抒,更是在濱河造成了極大的恐慌蜜宪,老刑警劉巖噪裕,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丹莲,死亡現(xiàn)場離奇詭異肯腕,居然都是意外死亡罗捎,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來靴患,“玉大人仍侥,你說我怎么就攤上這事≡Ь” “怎么了农渊?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長或颊。 經(jīng)常有香客問我砸紊,道長,這世上最難降的妖魔是什么饭宾? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任批糟,我火速辦了婚禮,結(jié)果婚禮上看铆,老公的妹妹穿的比我還像新娘徽鼎。我一直安慰自己,他們只是感情好弹惦,可當(dāng)我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布否淤。 她就那樣靜靜地躺著,像睡著了一般棠隐。 火紅的嫁衣襯著肌膚如雪石抡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天助泽,我揣著相機與錄音啰扛,去河邊找鬼。 笑死嗡贺,一個胖子當(dāng)著我的面吹牛隐解,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诫睬,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼煞茫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了摄凡?” 一聲冷哼從身側(cè)響起续徽,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎亲澡,沒想到半個月后钦扭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡床绪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年土全,在試婚紗的時候發(fā)現(xiàn)自己被綠了捎琐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡裹匙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出末秃,到底是詐尸還是另有隱情概页,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布练慕,位于F島的核電站惰匙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏铃将。R本人自食惡果不足惜项鬼,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望劲阎。 院中可真熱鬧绘盟,春花似錦、人聲如沸悯仙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锡垄。三九已至沦零,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間货岭,已是汗流浹背路操。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留千贯,地道東北人屯仗。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像丈牢,于是被迫代替她去往敵國和親祭钉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,585評論 2 359

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理己沛,服務(wù)發(fā)現(xiàn)慌核,斷路器,智...
    卡卡羅2017閱讀 134,702評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,859評論 6 342
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,300評論 25 707
  • 眾所周知申尼,家用新風(fēng)系統(tǒng)屬于系統(tǒng)安裝工程垮卓,除了在選材和設(shè)計上消費者需嚴(yán)格把關(guān),安裝質(zhì)量更是重中之重师幕,所謂三分靠機器粟按,...
    再見貳哥哥閱讀 344評論 0 0
  • 2007.7 我很早就起床了诬滩,起床后花了很長時間來梳洗,因為今天我將去一家很大的科技公司進(jìn)行復(fù)試灭将,在之前的兩輪面試...
    叨叨小少閱讀 215評論 0 0