標籤:rate ann utf-8 sel 介面 block nbsp set 關閉
jdbc: java database connection,也就是java的資料庫連接。
作用: 完成資料庫資料和記憶體資料的互動。
為了屏蔽不同資料庫的差異,在記憶體和各種資料庫之間建立了一個介面標準。每個廠商按照介面的標準來實現介面類。
jdbc 是java串連資料庫的一套標準。該標準中定義了一系列的介面,由資料庫廠商根據自身資料庫的特點提供實作類別,由開發人員調用。開發人員根據介面調用方法,可以屏蔽不同資料庫廠商的差異。這樣,無論串連什麼資料庫都是一套API。
jdbc 操作步驟: 流操作步驟:
① 載入驅動,建立串連 1、建立流
② 執行SQL語句 2、操作流
③ 關閉串連 3、關閉
SQL注入: 在執行sql語句時,由於sql語句的值是由使用者輸入的,所以是以變數接收的,如果以拼接字串方式來執行SQL語句,一旦資料中有非法字元或者有關鍵字時,會導致語法錯誤,或者執行結果不正確的情況,這稱為SQL注入。
Statement和PreparedStatement的區別:
Statement是PreparedStatement 的父介面。在執行SQL語句時,只能以拼接字串方式,拼接值。會引起SQL注入。而且效率低。
PreparedStatement,是先行編譯SQL語句執行對象,支援預留位置方式,無論資料是什麼值,都當字串處理,不會引起SQL注入。而且效率高。
舉例說明:
package 資料庫連接;import java.sql.Date;/** * 公民實體類 * @author C * */public class ManBean { /**公民編號*/ private int id; /**姓名*/ private String name; /**性別*/ private String sex; /**生日*/ private Date briyhday; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Date getBriyhday() { return briyhday; } public void setBriyhday(Date briyhday) { this.briyhday = briyhday; } public ManBean(String name, String sex, Date briyhday) { super(); this.name = name; this.sex = sex; this.briyhday = briyhday; } public ManBean() { super(); // TODO Auto-generated constructor stub } @Override public String toString() { return "ManBean [id=" + id + ", name=" + name + ", sex=" + sex + ", briyhday=" + briyhday + "]\n"; } }
強調:如果在一個類中定義了代參構造那麼沒有預設的無慘構造,所以必須要加上無慘構造。
import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;/** * 所有Dao父類 * * @author C * */public class ManDao { /** 連線物件 */ protected Connection con = null; /** Sql語句執行對象 */ protected PreparedStatement pr = null; /** 結果集對象 */ protected ResultSet rs = null; /** * 建立連結 */ public void setCnnonection() { // 載入驅動 try { Class.forName("com.mysql.jdbc.Driver"); // 建立串連 // jdbc表示需要使用jdbc建立串連。mysql 表示串連資料庫類型,localhost表示串連伺服器的IP地址 // 其中localhost為原生ip // 3306表示mysql的連接埠號碼,mytest1為sql中的資料庫名稱,表示需要使用該類中的資料庫表 // characterEncoding=utf-8表示設定串連資料庫的編碼集 con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mytext1?characterEncoding=utf-8", "root", "123456"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 關閉流 */ public void closeConnecting() { try { if (rs != null) { this.rs.close(); } this.pr.close(); this.con.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { ManDao m = new ManDao(); m.setCnnonection(); }}
強調:把建立串連和關閉流放在一個類中分別定義二個方法是一種抽象的行為,方便需要用的時候直接調用其方法,而不寫重複的代碼。
package 資料庫連接;import java.sql.Connection;import java.sql.Date;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;/** * 公民持久話實現介面 * @author C * */public class ManDaoImpl extends ManDao implements IManDao { public void add(ManBean man) { //載入驅動 try { this.setCnnonection(); //執行sql語句,?表示預留位置,需要向預留位置填充資料 pr=con.prepareStatement( "insert into t_man (manName,sex,brithday) values(?,?,?)"); //將man對象中的name屬性取出,填充第一個預留位置 pr.setString(1,man.getName()); pr.setString(2, man.getSex()); pr.setDate(3, man.getBriyhday()); //更新資料庫 必須要寫 pr.executeUpdate(); } catch (Exception e) { e.printStackTrace(); }finally{ this.closeConnecting(); } } /** * 尋找所有公民對象集合 */ public List<ManBean> findall() { List<ManBean> list = new ArrayList<ManBean>(); try { this.setCnnonection(); pr = con.prepareStatement("select *from t_man"); // 執行查詢操作,將sql語句查詢的資料,封裝在結果集對象中 rs = pr.executeQuery(); // 將結果集的指標,不段指向下一條記錄,如果該方法返回false ,表示指標到底結果集末尾。 while (rs.next()) { ManBean man = new ManBean(); // 將資料庫中id列的值取出,填充實體物件的id屬性。""是列名名稱 man.setId(rs.getInt("id")); man.setName(rs.getString("manName")); man.setSex(rs.getString("sex")); man.setBriyhday(rs.getDate("brithday")); // 將封裝好的記錄實體物件加入集合 list.add(man); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { this.closeConnecting(); } return list; }
強調:1,添加、刪除、修改完後必須要用executeUpdate()方法更新資料庫。2,查詢都要用結果集來傳遞資料庫的資料。3,最後必須關閉串連,否則會導致資料的丟失。
java資料庫連接及注意事項