Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (980.84 KB, 50 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
<b><small>Giảng viên: Tạ Việt Phương</small></b>
<small>2</small>
</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">nhau (Access, SQL Server, MySQL, Oracle, …)
</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">o <b>Loại 2</b>: Native API
o <b>Loại 3</b>: Network Protocol
o <b>Loại 4</b>: Native Protocol
➢
<small>oCác trình điều khiển cầu nốiJDBC- ODBC.</small>
<small>oỦy nhiệm công việc truy xuất dữ liệu cho ODBC API</small>
<small>oSUN cung cấp một phần mềm trình điều khiển JDBC/ODBC.</small>
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">o Chuyển lệnh gọi JDBC thành lệnh gọi API trên máy client của CSDL
o <b>Java chuyển lệnh JDBC thànhlệnh chuẩn của DBMS</b>
o Phụ thuộc nền tảng sử dụng
o Nâng cao hiệu quả thực hiện kết nối
o <b>Ưu điểm: tốt hơn </b>
o <b>Hạn chế: Driver Type-2 và thư </b>
viện Client-side của database cần cài đặt trên máy client.
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">o Được viết thuần bằng Java và sử dụng giao thức Net độc lập nhà sản xuất để tru y cập đến trình theo dõi
o Hỗ trợ việc kết nối nhiều ứng dụng với nhiều CSDL khác nhau
o <b>Ưu điểm</b>: có thể kết nối đến nhiều hệ quản trị CSDL khác nhau mà
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">o Được viết thuần túy bằng Java, là loại hiệu quả nhất.
o Kết nối trực tiếp vào CSDL o Các drivers được hỗ trợ
bởi các provider DBMS o <b>Ưu điểm:</b>
• Nâng cao hiệu quả khi thực thi
• Độc lập platform
o <b>Nhược điểm : </b> đòi hỏi có driver cho từng loại CSDL
</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">➢ Class và Interface của JDBC API thuộc gói java.sql
➢ <b>DriverManager:</b> dùng để nạp các driver và tạo Connection đến cơ sở dữ liệu.
➢ <b>Driver</b>: Driver của cơ sở dữ liệu, mỗi JDBC Driver đều cài đặt lại Interface này.
➢ <b>Connection</b> : thiết lập một Connection đến cơ sở dữ liệu và cho phép tạo các Statement .
➢ <b>Statement</b>: gắn kết với một connection đến cơ sở dữ liệu và cho phép thực thi các câu lệnh SQL.
➢ <b>PreparedStatement</b>: tương tự như Statement nhưng thực thi câu lệnh SQL được biên dịch trước (Precompiled SQL) và có truyền tham số
</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">➢ <b>ResultSet</b>: Cung cấp thông tin rút trích từ cơ sở dữ liệu, cho phép truy x́t các dịng dữ liệu.
➢ <b>ResultSetMetaData</b>: Cung cấp các thơng tin như kiểu dữ liệu và các thuộc tính trong Resultset.
➢ <b>DatabaseMetaData</b>: Cung cấp các thông tin của cơ sở dữ liệu kết nối.
➢ <b>SQLException</b>: Cung cấp thông tin các ngoại lệ xảy ra khi tương tác với cơ sở dữ liệu.
</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">➢ Driver là phần mềm hỗ trợ giao tiếp.
➢ JDBC driver là Java class thực hiện chuyển đổi các lệnh Java thành câu lệnh SQL tương ứng.
➢ Load driver là tạo các instance hỗ trợ liên kết và đăng ký
</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">DriverManager dung để thiết lập kết nối với database
</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25"><small>conn = DriverManager.getConnection(url); </small>
<small>System.out.println("Connected to the database"); return true;</small>
</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26"><small>StringuserName = "hung";Stringpassword = "12345";</small>
➢ Tạo kết nối trong SQL Server
<small>Class.forName("com.microsoft.sqlserver.jdbc</small>
</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">o Statement statement = connection.createStatement() ;
o ResultSet executeQuery (String sql) o int executeUpdate (String sql)
o boolean execute (String sql)
</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">String SQL = "SELECT * FROM hocsinh"; Statement stat = con.createStatement(); o Có 03 loại Statement
</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">o executeQuery() đối với câu lệnh truy vấn
<small>String strSQL = “Select * From Registration”; ResultSet rs = stat.executeQuery(strSQL);</small>
o executeUpdate():đối câu lệnh <b>Insert</b>, <b>Update </b>và <b>Delete</b>
<small>String strSQL = “Insert into RegistrationValues(“Aptech”, “Aptech”);</small>
<small>int nRow = stat .executeUpdate(strSQL);</small>
o execute() dùng để tạo và xóa đối tượng như table
</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">➢<b>Xử lý kết quả</b>
<small>o</small><b>Sử dụng ResultSet nhận kết quả trả về</b>
<small>o</small><b>Sử dụng phương thức getXxx (số thứ tự/ hay tên field) của ResultSet để lấy giá trị của field</b>
<b><small>Số thứ tự bắt đầu từ 1</small></b>
<small>Xxx tương ứng với loại dữ liệu của field•</small> <i><b><small>getInt(): lấy về giá trị int từ dịng hiện hành.</small></b></i>
<small>•</small> <i><b><small>getString(): lấy về giá trị String từ dịng hiện hành.</small></b></i>
<small>•</small> <i><b><small>getDate(): lấy về giá trị Date từ dịng hiện hành.</small></b></i>
<small>•</small> <i><b><small>getFloat(): lấy về giá trị float từ dịng hiện hành.</small></b></i>
<small>•</small> <i><b><small>getObject(): lấy về giá trị từ dòng hiện hành và xem giá trị </small></b></i>
<b><small>này như là 1 object.</small></b>
o <b>Sử dụng phương thức next() của ResultSet để duyệt lần</b>
lượt các record
</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">o <b>Resultset 2 chiều hỗ trợ các phương thức truy cập như: </b>
first, isFirst, last, ..
</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32"><i><b><small>ResultSet </small></b></i><small>sẽ tự động đóng</small>
<small>DriverManager.getConnection(...); </small>
<small>/* use the database */ </small>
<small>... /* done using database */ </small>
<small>public void close( ) { </small>
<small>if ( connection == null ) return; try { connection.close(); } </small>
<small>catch ( SQLException sqle ) { /* ignore it */ }finally { connection = null; }}</small>
</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33"><b>đối tượng dạng bảng trong RAM, có gắn với Cursor.</b>
trên xuống dưới hoặc từ dưới lên (theo cả 2 hướng) hoặc đi đến 1 dòng chỉ định nào đó.
</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34"><b><small>String query = "SELECT * FROM Country WHERE ...";ResultSet rs = statement.executeQuery( query );</small></b>
<b><small>// go to first row of results</small></b>
</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35"><small>getInt( name: String ) getInt( index: int ) ...</small>
<small>go to next row of results. "false" if no more. go to previous row. "false" if 1st result. go to first row of results.</small>
<small>go to last row of results.go to k-th row of results.get int value of field "name"</small>
<small>get int value of k-th column in a record </small>
</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36"><small>getLong(3): get by column index (most efficient) </small>
<small>getLong("population"): get by field name (safest)</small>
<small>getInt( ), getLong( ) - get Integer field valuegetFloat( ), getDouble()</small> <sup>- get floating pt. value</sup>
<small>getString( ) getDate( ) </small> <sup>- get Char or Varchar field value- get </sup> <small>Date or Timestamp field value</small>
<small>getBoolean( )</small> <sup>- get a Bit field value</sup> <small>getBytes( ) - get Binary data</small>
<small>getBigDecimal( )</small> <sup>- get Decimal field as BigDecimal</sup>
<small>getBlob( ) getObject( ) </small> <sup>- get Binary Large Object- get any field </sup> <small>value</small>
</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37"><i><b>dung PreparedStatement.</b></i>
được biên dịch trước khi gởi đến DBMS, khác với
</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38"><small>String sql = "INSERT INTO user_info (name, address) VALUES (?, ?);";</small>
<small>List<User> listUser = new ArrayList<User>();listUser.add(new User("Harry", "England"));listUser.add(new User("Batman", "USA"));</small>
</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39"><small>String SQL = "SELECT * FROM hocsinh"; Statement stat = conn.createStatement(); ResultSet rs = stat.executeQuery(SQL); </small>
</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40"><small>String SQL1="INSERT hocsinh VALUES(‘Nguyen Van A')";</small>
<small>Statement stat1 = conn.createStatement(); stat1.executeUpdate(SQL1);</small>
</div><span class="text_page_counter">Trang 41</span><div class="page_container" data-page="41">➢ <b>Xóa một dòng thỏa mãn điều kiện trong bảng</b>
<small>Statement st = con.createStatement();</small>
<small>String sql = "DELETE FROM hocsinh WHERE ten = </small>
</div><span class="text_page_counter">Trang 42</span><div class="page_container" data-page="42"><small>Statement st = con.createStatement(); String sql = "DELETE FROM hocsinh"; int delete = st.executeUpdate(sql); if(delete == 0){</small>
<small>System.out.println("All rows are completel ly deleted!");</small>
<small>}</small>
</div><span class="text_page_counter">Trang 43</span><div class="page_container" data-page="43"><small>Statement st = con.createStatement(); st.execute("DROP TABLE Employee1"); </small>
<small>System.out.println ("Table Deletion process iscompletly successfully!");</small>
</div><span class="text_page_counter">Trang 44</span><div class="page_container" data-page="44">➢ <b>Cập nhật dòng thỏa điều kiện dùng PrepareStatement</b>
<small>String sql = "UPDATE movies SET title = ? WHERE </small>
</div><span class="text_page_counter">Trang 45</span><div class="page_container" data-page="45"><small>System.out.println("Enter table name:"); String table = bf.readLine();</small>
<small>ResultSet res = st.executeQuery("SELECT COUNT(*)FROM "+table); </small>
<small>int count=0;</small>
<small>while (res.next()){ </small>
</div><span class="text_page_counter">Trang 46</span><div class="page_container" data-page="46"><i><small>(Trong đó tương ứng với mỗi dấu ? là 1 tham số của store procedure </small></i>
<i><small>đã tạo trong Database )</small></i>
<small>oTạo 1 thể hiện của interface CallableStatement thông qua phương</small>
<b><small>thức prepareCall() dựa trên đối tượng Connection</small></b>
<small>o</small> <b><small>Gọi phương thức executeQuery() để trả về kết quả là 1 ResultSet.</small></b>
<b><small>String strCall = "{call </small></b>
</div><span class="text_page_counter">Trang 47</span><div class="page_container" data-page="47"><b><small>String strCall = "{call deleteAccount(?)}"; </small></b>
<b><small>CallableStatement caSt = con.prepareCall(strCall); caSt.setString(1, user);</small></b>
</div><span class="text_page_counter">Trang 48</span><div class="page_container" data-page="48"><small>Statement statement1= con.createStatement(); Statement statement2= con.createStatement(); </small>
</div><span class="text_page_counter">Trang 49</span><div class="page_container" data-page="49"><small>Statement statement1= con.createStatement();Statement statement2= con.createStatement();</small>
</div><span class="text_page_counter">Trang 50</span><div class="page_container" data-page="50"><b><small>Giảng viên: Tạ Việt PhươngE-mail: </small></b>
</div>