jdbc的鏈接

1.jdbc 概念

2.核心類(lèi)

DriverManager

管理JDBC驅(qū)動(dòng)

Connection

負(fù)責(zé)連接數(shù)據(jù)庫(kù)并擔(dān)任傳送數(shù)據(jù)的任務(wù)

Statement

由 Connection 產(chǎn)生、負(fù)責(zé)執(zhí)行SQL語(yǔ)句

PreparedStatement

預(yù)編譯sql,由 Connection 產(chǎn)生、負(fù)責(zé)執(zhí)行SQL語(yǔ)句

CallableStatement

由 Connection 產(chǎn)生、負(fù)責(zé)執(zhí)行SQL語(yǔ)句,執(zhí)行存儲(chǔ)過(guò)程

ResultSet

負(fù)責(zé)保存Statement執(zhí)行后所產(chǎn)生的查詢結(jié)果

3.Statement與PreparedStatement區(qū)別

Statement執(zhí)行順序

1.進(jìn)行sql語(yǔ)法校驗(yàn),語(yǔ)法錯(cuò)誤就報(bào)錯(cuò)了

2.校驗(yàn)權(quán)限,權(quán)限不夠報(bào)錯(cuò)

3.會(huì)從sql緩存區(qū)去找有沒(méi)有這條sql

有就直接執(zhí)行

沒(méi)有就添加到緩存區(qū),再執(zhí)行

PreparedStatement

3.會(huì)減少添加緩存區(qū)sql的次數(shù),條數(shù)。

區(qū)別:

1)Statement 執(zhí)行相對(duì)于PreparedStatement來(lái)說(shuō)會(huì)不安全

Statement 會(huì)有sql注入

PreparedStatement 可以預(yù)防sql注入

2)PreparedStatement效率高

推薦以后使用PreparedStatement。

4.把數(shù)據(jù)庫(kù)的信息放到配置文件中 db.properties

5.批處理

addBatch 添加一條sql到Statement中。

executeBatch() 統(tǒng)一執(zhí)行一組sql。

步驟:

1,獲取對(duì)象

Statement

PreparedStatement : 創(chuàng)建這個(gè)對(duì)象的時(shí)候,傳入的sql是可以為""空字符串的

2.添加一些sql的集合

addBatch

3.執(zhí)行這些sql

executeBatch

6.獲取自增長(zhǎng)的值

connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);

注意:Statement.RETURN_GENERATED_KEYS

獲取返回的自增長(zhǎng)id

ResultSet resultSet = prepareStatement.getGeneratedKeys();

7.大文本處理

1.txt.html,xml

mysql : text(64K),meduimtext(16M),longtext(4G)

oracle : clob

代碼

寫(xiě)入:

FileReader reader = new FileReader(file);

prepareStatement.setClob(2, reader);

讀出:

Clob clob = resultSet.getClob("description");

Reader reader = clob.getCharacterStream();

2.二進(jìn)制,圖片

mysql: blob,meduimblob,longblob

oracle:blob

代碼

寫(xiě)入:

File file = new File("f:\\one.jpg");

FileInputStream inputStream = new FileInputStream(file);

prepareStatement.setBlob(2, inputStream);

讀出:

Blob blob = resultSet.getBlob("img");

InputStream inputStream = blob.getBinaryStream();

8.時(shí)間處理

date 只存儲(chǔ)年月日

time 只存儲(chǔ)時(shí)分秒

timestamp 存儲(chǔ)年月日時(shí)分秒

代碼

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

java.util.Date date = format.parse("1982-07-29 12:00:00");

prepareStatement.setTimestamp(2, new Timestamp(date.getTime()));

9.事務(wù)

概括

把一組sql放到一起去執(zhí)行,要么都成功,要么都失敗。

操作

提交

回滾

事務(wù)的特點(diǎn)

原子性

要么都成功,要么都失敗

隔離性

事務(wù)與事務(wù)之間互不干擾

問(wèn)題:

臟讀

一個(gè)事務(wù)讀取了另外一個(gè)事務(wù)未提交的數(shù)據(jù)

不可重復(fù)讀

一個(gè)事務(wù)讀取了另外一個(gè)事務(wù)已經(jīng)更新的數(shù)據(jù)

幻讀

一個(gè)事務(wù)讀到了另外一個(gè)事務(wù)已經(jīng)提交的插入數(shù)據(jù)

解決這些問(wèn)題,就有事務(wù)的隔離級(jí)別

serializable 最高級(jí)別? 不支持臟讀,不支持不可重復(fù)讀,不支持幻讀(默認(rèn))

repeatable read 不支持臟讀,不支持不可重復(fù)讀,支持幻讀

read committed 不支持臟讀,支持不可重復(fù)讀,支持幻讀

read uncommitted 支持臟讀,支持不可重復(fù)讀,支持幻讀

一致性

執(zhí)行前和執(zhí)行后結(jié)果應(yīng)該一致

持久性

事務(wù)提交,保存到數(shù)據(jù)庫(kù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • JDBC概述 在Java中,數(shù)據(jù)庫(kù)存取技術(shù)可分為如下幾類(lèi):JDBC直接訪問(wèn)數(shù)據(jù)庫(kù)、JDO技術(shù)、第三方O/R工具,如...
    usopp閱讀 3,630評(píng)論 3 75
  • 本節(jié)介紹Statement接口及其子類(lèi)PreparedStatement和CallableStatement。 它...
    zlb閱讀 1,233評(píng)論 0 0
  • 1 引言# 本文主要講解JDBC怎么演變到Mybatis的漸變過(guò)程,重點(diǎn)講解了為什么要將JDBC封裝成Mybait...
    七寸知架構(gòu)閱讀 77,473評(píng)論 36 979
  • JDBC簡(jiǎn)介 SUN公司為了簡(jiǎn)化、統(tǒng)一對(duì)數(shù)據(jù)庫(kù)的操作,定義了一套Java操作數(shù)據(jù)庫(kù)的規(guī)范,稱之為JDBC。JDBC...
    奮斗的老王閱讀 1,628評(píng)論 0 51
  • 現(xiàn)在是2017年9月6日的下午六點(diǎn)十八分,明天就要開(kāi)學(xué)了。 這一次回加拿大(我也不清楚這里應(yīng)該用“回”嗎),心里揣...
    Sylvia_尚閱讀 165評(píng)論 0 0

友情鏈接更多精彩內(nèi)容