JDBC

JDBC

Java連接步驟

// 1. 加載驅(qū)動

Class.forName("com.mysql.cj.jdbc.Driver");

// 2. 用戶信息和數(shù)據(jù)庫地址
// useUnicode=true&characterEncoding=utf8&useSSL=true

String url = "jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC";
String username = "root";
String password = "123456";

// 3. 獲取數(shù)據(jù)庫對象

Connection connection = DriverManager.getConnection(url,username,password);

// 4. 執(zhí)行SQL的對象

Statement statement = connection.createStatement();

// 5. 獲得結(jié)果

String sql = "SELECT * FROM account";
ResultSet resultSet = statement.executeQuery(
    sql
);
while (resultSet.next()) {
    System.out.println("id:" + resultSet.getObject("id"));
    System.out.println("name:" + resultSet.getObject("name"));
    System.out.println("cash:" + resultSet.getObject("cash"));
}
System.out.println(resultSet);
// 6. 釋放連接
resultSet.close();
statement.close();
connection.close();
  1. 加載驅(qū)動

    加載驅(qū)動方法:Class.forName("com.mysql.cj.jdbc.Driver");

    //Dirver類里面只有一個靜態(tài)代碼塊眯娱,在加載的時候自動通過DriverManager注冊了驅(qū)動
    public class Driver extends NonRegisteringDriver implements java.sql.Driver {
        public Driver() throws SQLException {
        }
    
        static {
            try {
                DriverManager.registerDriver(new Driver());
            } catch (SQLException var1) {
                throw new RuntimeException("Can't register driver!");
            }
        }
    }
    
  2. 用戶信息和數(shù)據(jù)庫地址

    連接URL

    MySQL jdbc:mysql://(數(shù)據(jù)庫地址):3306/(數(shù)據(jù)庫)參數(shù)=值&參數(shù)=值&...
    Oracle jdbc:oracle:thin@(數(shù)據(jù)庫地址):1521/(數(shù)據(jù)表)

    常用URL

    useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC

  3. 獲取數(shù)據(jù)庫對象

    Connection connection = DriverManager.getConnection(url,username,password);

    獲得連接對象,Connection代表數(shù)據(jù)庫

    connection.setAutoCommit();     // 設(shè)置自動提交
    connection.commit();            // 提交
    connection.rollback();          // 回滾
    
  4. 執(zhí)行SQL的對象

    Statement執(zhí)行SQL的對象

    • Statement statement = connection.createStatement();

    PrepareStatement執(zhí)行SQL的對象

    • PrepareStatement prepareStatement = connection.prepareStatement()
    // Statement的用法
    statement.executeQuery();   // 查詢操作绕沈,返回ResultSet
    statement.execute();        // 執(zhí)行任何SQL贱除,返回執(zhí)行的結(jié)果boolean
    statement.executeUpdate();  // 更新插入刪除雾鬼,返回一個受影響的行數(shù)
    statement.executeBatch()    // 執(zhí)行一系列的SQL
        
        
    // 使用executeQuery操作增刪改操作報錯:Can not issue data manipulation statements with executeQuery().
    
    PrepareStatement的用法(效率更高,可以防止SQL注入,轉(zhuǎn)義字符直接被轉(zhuǎn)義)
    String sql = "INSERT INTO ACCOUNT(`name`,`cash`) VALUES(?,?)"; // 使用問號占位符代替參數(shù)
    PrepareStatement prepareStatement = connection.prepareStatement(sql) // 預(yù)編譯SQL
    preparedStatement = conn.prepareStatement(sql);
    preparedStatement.setString(1,"yhq");
    preparedStatement.setBigDecimal(2,new BigDecimal(1000.00));
    preparedStatement.executeUpdate(); // 無需參數(shù)百炬,其它查詢同Statement
    
  5. 獲得結(jié)果

    ResultSet類              // 是查詢獲得的結(jié)果集合
    resultSet.getObject()   // 在不知道類型的情況下使用
    resultSet.afterLast()   // 移動到最后面
    resultSet.beforeFirst() // 移動到最前面
    resultSet.next()        // 移動到下一個
    resultSet.previous()    // 移動到上一個
    resultSet.absolute(row) // 移動到指定行
    
  6. 釋放連接

    resultSet.close();
    statement.close();
    connection.close();
    
  7. 操作事務(wù)

    connection.setAutoCommit(false); //關(guān)閉自動提交蚕脏,自動開啟事務(wù)
    connection.commit(); // 默認(rèn)不成功回滾侦副,也可以在catch里面顯式定義
    
    

try {
    conn = JdbcUtils.getConnection();
    conn.setAutoCommit(false); //關(guān)閉自動提交,自動開啟事務(wù)
    
    // 數(shù)據(jù)庫操作邏輯代碼
    
    conn.commit();
} catch (Exception e) {
    // 默認(rèn)回滾
    e.printStackTrace();
    try { //顯式定義回滾
        conn.rollback();
    } catch (Exception e2) {
        e2.printStackTrace();
    }
} finally {
    釋放資源;
}
```
  1. 數(shù)據(jù)庫連接池

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

    • 連接池實(shí)現(xiàn)了DataSource接口

    • 開源數(shù)據(jù)源實(shí)現(xiàn):DBCP译隘、 C3P0亲桥、Druid

    • 使用連接池之后,開發(fā)中就不需要寫連接服務(wù)代碼了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末固耘,一起剝皮案震驚了整個濱河市题篷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厅目,老刑警劉巖番枚,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異损敷,居然都是意外死亡葫笼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門嗤锉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渔欢,“玉大人,你說我怎么就攤上這事瘟忱“露睿” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵访诱,是天一觀的道長垫挨。 經(jīng)常有香客問我,道長触菜,這世上最難降的妖魔是什么九榔? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮涡相,結(jié)果婚禮上哲泊,老公的妹妹穿的比我還像新娘。我一直安慰自己催蝗,他們只是感情好切威,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丙号,像睡著了一般先朦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上犬缨,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天喳魏,我揣著相機(jī)與錄音,去河邊找鬼怀薛。 笑死刺彩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播迂苛,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼三热,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了三幻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤呐能,失蹤者是張志新(化名)和其女友劉穎念搬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摆出,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡朗徊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了偎漫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爷恳。...
    茶點(diǎn)故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖象踊,靈堂內(nèi)的尸體忽然破棺而出温亲,到底是詐尸還是另有隱情,我是刑警寧澤杯矩,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布栈虚,位于F島的核電站,受9級特大地震影響史隆,放射性物質(zhì)發(fā)生泄漏魂务。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一泌射、第九天 我趴在偏房一處隱蔽的房頂上張望粘姜。 院中可真熱鬧,春花似錦熔酷、人聲如沸孤紧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坛芽。三九已至,卻和暖如春翼抠,著一層夾襖步出監(jiān)牢的瞬間咙轩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工阴颖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留活喊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓量愧,卻偏偏與公主長得像钾菊,于是被迫代替她去往敵國和親帅矗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評論 2 355