2017 Java開發面試題-資料庫篇(1)
阿新 • • 發佈:2019-02-07
1、儲存過程
--建立CREATE PROCEDURE pro_name(IN inputName inputType, OUT outputName outputType)
BEGIN
--sql statement...
SELECT ** INTO outputName FROM ** WHERE **
SET outputName = newValue;
END
--呼叫
set @inputName=value1;
set @outputName=value2;
CALL pro_name(@inputName,@outputName);
--刪除
DROP PROCEDURE pro_name;
引數型別:
IN:輸入引數
OUT:輸出引數
INOUT:既可以輸入/輸出
2、觸發器
INSERT INTO tables(...) VALUES(...);
3、資料庫三正規化
1NF:欄位原子性,不可再分
所有關係型資料庫都滿足1NF
2NF:
1NF+資料庫表中每個例項or行必須可以唯一的被區分
一般通過加上主鍵實現
3NF:
1NF+2NF+資料庫表不包含已在其他表中已包含的非主關鍵字資訊
4、資料庫優化經驗
1、PrepareStatement效能一般比Statement高一個sql發給伺服器執行,涉及步驟:
語法檢查-》語義分析-》編譯-》快取
或:sql-》發給oracle伺服器-》語法檢查和編譯成內部指令-》快取和執行指令
2、有外來鍵約束會影響
如果能夠保證資料的完整性,那在設計資料庫時需要去掉外來鍵
3、sql語句優化
4、建立索引
索引一般用B-Tree實現
http://blog.csdn.net/weiliangliang111/article/details/51333169
如果沒有索引的話,查詢內容一般需要全表遍歷,效率低
5、UNION vs UNION ALL
union all保留重複結果
union連結好結果集後,會排序,刪除出重複記錄
所以union all比union快
6、JDBC註冊驅動程式的三種方式
Class.forName("com.mysql.jdbc.Driver");//載入資料庫驅動
String url="jdbc:mysql://localhost:3306/databasename";//資料庫連線子協議Connection conn=DriverManager.getConnection(url,"username","password");
能夠在編譯時不依賴於特定的JDBC Driver庫
也易於改造成從配置檔案讀取JDBC配置,可以在執行時動態更換資料庫連線驅動
System.setProperty("jdbc.driver", "com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/databasename";//資料庫連線子協議
Connection conn=DriverManager.getConnection(url,"username","password");
可以同時匯入多個驅動:
System.setProperty("jdbc.drivers","XXXDriver:XXXDriver:XXXDriver");
new com.mysql.jdbc.Driver();//建立driver物件,載入資料庫驅動
String url="jdbc:mysql://localhost:3306/databasename";//資料庫連線子協議
Connection conn=DriverManager.getConnection(url,"username","password");
它必須要有jdbc驅動才可以通過編譯
7、Class.forName 的作用
若其位元組碼已經載入,則返回代表該位元組碼的Class物件
否則,按照類載入器的委託機制去搜索和載入
若無法載入,丟擲異常ClassNotFoundException
載入完位元組碼後,就可以用Class位元組碼的newInstance建立例項
有時,程式使用的具體類名設計時無法確定,只能在執行時確定,則就需Class.forName動態載入
此類名多為配置檔案中配置的eg:
1、spring ioc每次依賴注入的具體類
2、jdbc驅動類名,以便產品交付後不用改源程式就可以改驅動類
8、資料連線池的工作機制
http://www.cnblogs.com/newpanderking/p/3875749.html對於共享資源的著名設計模式:資源池
是為了解決資源頻繁分配、釋放造成的問題
J2EE伺服器啟動時會建立一定數量的池連線,並一直維持不少於次樹木的連線
當有新的連線請求,池池驅動程式返回空閒連線
若無空閒連線,根據配置的引數,新建一定數量的連線
Connection是原始COnnection的代理,代理Connection的close不是真的關連線
而是把他代理的Connection物件還給連線池
通過連線池的管理機制可以監控連線使用情況,為系統開發、測試、效能調整提供參考
優點:
1、資源複用
2、減少連線時間,響應快
3、簡化的程式設計模式