JDBCjava
問題:實際開發中,不可能用工具或者命令行操做數據庫,數據庫表中的數據最終要使用Java程序來操做,那麼Java中如何操做數據庫中的數據呢?mysql
答 : 在Java語言中,有一個專門鏈接數據庫的規範(JDBC),專門負責鏈接數據庫進行數據操做的規範sql
JDBC只是SUN編寫的一堆接口(規範的體現),SUN公司本身並無實現數據庫
問題 : 爲何SUN只定義一個JDBC規範,而不實現呢?api
答 : 由於市面上的數據庫不少,每一個數據庫內部接口不會向外暴露,並且即使是暴露讓SUN去實現,市面上不少數據庫所有要SUN來實現不現實瀏覽器
實際中哪一個數據庫須要支持JAVA語言,就須要本身實現Java的JDBC規範,由於實現了JDBC不少接口,那麼就會有不少實現類,而不少實現類在java中會使用一個專門的包封裝起來,叫作jar包(在JDBC中叫作驅動包),各大數據庫產商實現JDBC規範之後都會把他們jar包放在官網上以供開發者下載使用架構
jdbc:dom
是一種用於執行SQL語句的Java API,能夠爲多種關係數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基工具
JDBC規範對應的api包性能
在其餘操做之間先要把數據庫表要建立出來
public static void main(String[] args) throws Exception {
String sql = "create table t_student (id int primary key auto_increment,name varchar(50),age int)";
//賈璉欲執事
//1,加載註冊驅動
Class.forName("com.mysql.jdbc.Driver");
//2,獲取數據庫鏈接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbcdemo", "root", "root");
//3,建立語句對象(用於執行SQL語句的對象)
Statement st = conn.createStatement();
//4, 執行SQL語句
//int rows = st.executeUpdate(String sql);執行DDL和DML語句,放回的是受影響的行數
//ResultSet res = st.executeQuery(String sql);執行DQL查詢語句,返回的結果集對象
st.executeUpdate(sql);
//5,釋放資源(先開後關)
st.close();
conn.close();
}
問題 : 咱們有了Statment對象能夠執行SQL,爲何還要使用PreparedStatment?
優點
Statement: 表示靜態SQL語句對象. PreparedStatement:Statement的子接口,表示預編譯SQL語句對象. 經過佔位符(?)來拼SQL. |
建立語句對象 Statment
在執行SQL語句的時候迴帶上SQL語句
在執行SQL語句的方法中不須要設置SQL語句
void setXxx(int parameterIndex,Xxx value):用於設置佔位符參數, parameterIndex:第幾個問號. 注意:從1開始. value:設置的真實值. Xxx:表示數據類型.String/int/long/Double/Date |
實際開發中,JavaWeb開發代碼通常分爲三層,分層結構是JavaWeb開發中的一種設計思想,這樣會讓咱們開發井井有條,每一層只要完成對應的功能便可,使得項目便於開發和維護
1 . Web層/表現層 : 主要接受前臺瀏覽器用戶的參數,給瀏覽器響應數據等等
DAO : Data Access Object 數據訪問對象
實際開發中 : 用戶請求到-Web層--->Service層-->DAO層
開發中若是使用的分層,編寫的包和類名接口名等等都是有固定規則,不能隨便瞎寫
公司域名倒寫+項目名稱/模塊名稱+dao 如 : cn.sxt.crm.dao |
公司域名倒寫+項目名稱/模塊名稱+dao+impl 如 : cn.sxt.crm.dao.impl |
對應表的名稱 + Dao/DAO
如 : StudentDao/DAO , TeacherDao/DAO |
對應表的名稱 + Dao/DAOImpl
如 : StudentDaoImpl/DAOImpl , TeacherDaoImpl/DAOImpl |
POJO(Plain Ordinary Java Object)簡單的Java對象
domian : 域對象
公司域名倒寫+項目名稱/模塊名稱+domain/pojo 如 : cn.sxt.crm.domain |
公司域名倒寫+項目名稱/模塊名稱+test 如 : cn.sxt.crm.test |
公司域名倒寫+項目名稱/模塊名稱+util/utils 如 : cn.sxt.crm.util/utils |