您好,登錄后才能下訂單哦!
本篇文章為大家展示了Java的技術知識點有哪些,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
數據庫篇
JDBC連接數據庫步驟(以MYSQL為例)
1、加載JDBC驅動程序:
通過Class類的forName方法實現,并將驅動地址放進去
成功加載后,會將Driver類的實例注冊到DriverManager類中。
2、提供JDBC連接的URL 、創建數據庫的連接
?要連接數據庫,需要向java.sql.DriverManager請求并獲得Connection對象,
該對象就代表一個數據庫的連接。
?使用DriverManager的getConnectin()方法傳入指定的欲連接的數據庫的路徑、數 據庫的用戶名和密碼。
Connection con=DriverManager.getConnection(url , username , password);
&&&:"jdbc:mysql://localhost/test?user=root&password=123&useUnicode=true&characterEncoding=utf-8”;
3、創建一個Statement
?要執行SQL語句,必須獲得java.sql.Statement實例
?執行靜態SQL語句。通常通過Statement實例實現。
?執行動態SQL語句。通常通過PreparedStatement實例實現。
String sql = “”;
Statement st = con.createStatement() ;
PreparedStatement pst = con.prepareStatement(sql) ;
4、執行SQL語句
Statement接口提供了executeQuery、executeUpdate、execute三種方法
executeQuery:執行select語句,返回ResultSet結果集
ResultSet rst = pst.executeQuery();
? executeUpdate:執行insert、update、delete語句
pst.executeUpdate();
5、關閉JDBC對象
操作完成以后要把所有使用的JDBC對象全都關閉,以釋放JDBC資源。
數據庫連接池
數據庫連接池的優點運行原理:
在我們不使用數據庫連接池的時候,每次訪問數據庫都需要創建連接,使用完成之后需要釋放關閉連接,而這樣是很耗費資源的。當我們使用數據庫連接池的時候,在tomcat啟動的時候就創建了指定數量的連接,之后當我們程序使用的時候就直接從連接池里面取,而不需要創建,同理,當我們使用完的時候也不需要關閉連接,而是將連接返回到連接池中,供其他請求繼續使用。
DBCP:比較穩定。
C3P0:性能比較高。
mysql的數據庫導入導出
配置:
首先找到mysql的安裝目錄,進入bin目錄下復制路徑、將mysql的bin目錄粘貼在計算機環境變量的path中、授權:、登錄mysq、將某張表的某個權限賦給某個用戶。
grant [select,insert,update,delete,create,drop] on [databaseName].[tableName] to [userName]@[userIP] identified by [‘連接口令’]
grant select,insert,update,delete,create,drop on oa_ssh.user to root@[IP] identified by 'root';
將所有庫的所有權限賦給某個用戶
grant all privileges on *.* to [userName]@[userIp] identified by [‘連接口令’]
grant all privileges on *.* to root@[IP] identified by ‘root';
將所有庫的所有權限賦給所有用戶
grant all privileges on *.* to root@'%' identified by ‘root’;
導出本地數據庫:
mysqldump -u用戶名 -p 數據庫名 > 磁盤:導出的文件名(加后綴)
遠程導出數據庫:
mysqldump -h IP -u用戶名 -p 數據庫名稱 >導出的文件名(加后綴)
遠程導出數據表:
mysqldump -u root -p -d --add-drop-table數據庫名稱 > 導出文件名(加后綴)
導入數據:
mysql -u root -p登錄成功后 ==》 source 磁盤:導入的文件名(加后綴)
jdbc分段批量提交的時候出現異常怎么處理?
通過Map來解決性能問題。首先在分段批量提交的時候,我們不采用事務,這樣就保證了合法的數據就自動提交,不合法的數據就自己自動進行回滾,為了避免不合法數據影響后續合法數據的提交,采用定義業務規則字典表,實現對數據的驗證,將不合法的數據記錄下來,供用戶進行后續處理,而合法的數據就全部提交。
jdbc批量處理數據
批量處理數據:(代碼優化:提高程序執行性能)降低了java程序代碼(客戶端)和數據庫之間的 網絡通信的次數。在jdbc中進行批量插入的核心API為 addBatch,executeBatch大數據量的插入問題:(jdbc,hibernate,ibatis)
1.每次只插入一條和數據庫交互多次(很耗時間)
2.批量插入和數據庫只交互一次(內存溢出)
3.分段批量插入(推薦)
jdbc批量處理數據是通過PreparedStatement對象的 addbatch(), executebatch() clearbatch()進行和數據庫的交互。通常我們使用分段批量處理的方式 這樣可以提高程序的性能 ,防止內存溢出。
1.每個sql語句都和數據庫交互一次(非批量操作)
2.只和數據庫交互一次(批量操作)(內存溢出)
當數據達到一定額度的時候就和數據庫進行交互,分多次進行(分段批量操作)
(500或者1000)
pst.addBatch();
if (i > 0 && i%1000 == 0) {
pst.executeBatch();
pst.clearBatch();
}
Oracle分頁
select * from (select * from (select s.*,rownum rn from student s ) where rn<=5) where rn>0
如果你依然覺得有些茫然,不如加入我的Java架構師之路:766529531 跟有多年Java開發經驗的資深工程師聊一聊。也可獲取免費的視頻學習資料以及電子書學習資料喔!
Oracle的基本數據類型
Oracle的基本數據類型(常用):
1、字符型
Char固定長度字符串 占2000個字節
Varchar2可變長度字符串 占4000個字節
Nvarchar2占2000個字符(最多能存2000個字母/中文)
2、大對象型(lob)
Blob:二進制數據 最大長度4G
Blob用于存一些圖片,視頻,文件。
比如:當我們在進行文件上傳時,我們一般把上傳的文件存在硬盤上,可以不占用 數據庫,下載時,如果項目遷移時,文件也要跟著遷移。因此我們可以把用blob把它存在數據庫中。但這樣也增加了數據庫的負擔。
Clob:字符數據 最大長度4G,可以存大字符串 varchar2和nvarchar2都具有一定的局限性,它們長度有限,但數據庫中無論用varchar2或nvarchar2類型,還是用clob,在java端都使用String接收。
3、數值型
Integer整數類型,小的整數。
Float浮點數類型。
Real實數類型。
Number(p,s)包含小數位的數值類型。P表示精度,s表示小數后的位數。
Eg: number(10,2)表示小數點之前可有8位數字,小數點后有2位。
4、日期類型
Date日期(日-月-年) DD-MM-YY(HH-MI-SS)
Timestamp跟date比 它可以精確到微秒。精確范圍0~9 默認為6.
id、rowid、rownum的區別
rowid物理位置的唯一標識。
而id是邏輯上的唯一標識,所以rowid查找速度要快于id,是目前最快的
定位一條記錄的方式
rowid和rownum都是"偽數列"
所謂“偽數列”也就是默認隱藏的一個數列。
rownum用于標記結果集中結果順序的一個字段,
它的特點是按順序標記,而且是連續的,
換句話說就是只有有rownum=1的記錄,才可能有rownum=2的記錄。
rownum關鍵字只能和<或者<=直接關聯
如果是>或者=則需要給他起個別名
主鍵和唯一索引的區別?
在創建主鍵的同時會生成對應的唯一索引,主鍵在保證數據唯一性的同時不允許為空,而唯一可以有一個為空數據項,一個表中只能有一個主鍵,但是一個主鍵可以有多個字段,一個表中可以有多個唯一索引。
Preparedstatement和statement的區別
用Prepared statement進行開發。Prepared statement是預編譯的,而statement不是,在每次執行sql語句的增刪改時,如果是一條數據兩者沒差距,但如果數據量大于1,那么每次執行sql語句statement都要重新編譯一次,而Prepared statement不用,Prepared statement的運行效率大于statement;從代碼的可維護性和可讀性來說,雖然用Prepared statement來代替statement會使代碼多出幾行,但這樣的代碼無論從可讀性還是可維護性來說,都比直接使用statement的代碼高很多檔次;最重要的一點,從安全角度來說,使用Prepared statement可以大大提高程序的安全性,因為Prepared statement是用‘?’傳參,可以防止sql注入,具有安全性,而statement用的是‘+’字符串拼接,安全性較低。
數據庫三范式
第一范式:數據庫表中的所有字段值都是不可分解的原子值。
第二范式:需要確保數據庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)
第三范式:需要確保數據表中的每一列數據都和主鍵直接相關,而不能間接相關
如果你依然覺得有些茫然,不如加入我的Java架構師之路:766529531 跟有多年Java開發經驗的資深工程師聊一聊。也可獲取免費的視頻學習資料以及電子書學習資料喔!
視圖概述
視圖可以視為“虛擬表”或“存儲的查詢”
創建視圖所依據的表稱為“基表”
視圖的優點:
提供了另外一種級別的表安全性:隱藏了一些關鍵的字段
簡化的用戶的SQL命令
隔離基表結構的改變
存儲過程概述
存儲過程(Stored Procedure)
可以包含邏輯判斷的sql語句集合。
是經過預編譯,存在于數據庫中。
通過調用指定存儲過程的名字(可有參,可無參)來執行。
優點:
簡化了復雜的業務邏輯,根據需要可重復使用
屏蔽了底層細節,不暴露表信息即可完成操作
降低網絡的通信量,多條語句可以封裝成一個存儲過程來執行
設置訪問權限來提高安全性
提高執行效率,因為它是預編譯以及存儲在數據庫中
缺點:
可移植性差,相同的存儲過程并不能跨多個數據庫進行操作
大量使用存儲過程后,首先會使服務器壓力增大,而且維護難度逐漸增加
存儲過程的語法:
--下面是在oracle數據庫下最基本的語法
--僅創建一個名為testProcedure 的無參的存儲過程
--IS也可以是AS
--如果已經存在名為 testProcedure 的存儲過程,下面的語法會出現 名稱已被使用的錯誤
--解決辦法:
--第一句可以寫成 create or replace procedure testProcedure
--這樣會替換原有的存儲過程
--NULL表示任何可以正確執行的sql 語句,但至少一句
create procedure testProcedure
IS
BEGIN
NULL
END;
存儲過程的參數的分類:
IN
OUT
INOUT
注意:
存儲過程之間可相互調用
存儲過程一般修改后,立即生效。
索引概述
1、索引的概念
索引就是為了提高數據的檢索速度。
數據庫的索引類似于書籍的索引。
在書籍中,索引允許用戶不必翻閱完整個書就能迅速地找到所需要的信息。
在數據庫中,索引也允許數據庫程序迅速地找到表中的數據,
而不必掃描整個數據庫.
2、索引的優點
1.創建唯一性索引,保證數據庫表中每一行數據的唯一性
2.大大加快數據的檢索速度,這也是創建索引的最主要的原因
3.減少磁盤IO(向字典一樣可以直接定位)
3、索引的缺點
1.創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加
2.索引需要占用額外的物理空間
3.當對表中的數據進行增加、刪除和修改的時候,
索引也要動態的維護,降低了數據的維護速度
4、索引的分類
1.普通索引和唯一性索引
普通索引:CREATE INDEX mycolumn_index ON mytable (myclumn)
唯一性索引:保證在索引列中的全部數據是唯一的
CREATE unique INDEX mycolumn_index ON mytable (myclumn)
2.單個索引和復合索引
單個索引:對單個字段建立索引
復合索引:又叫組合索引,在索引建立語句中同時包含多個字段名,
最多16個字段
CREATE INDEX name_index ON userInfo(firstname,lastname)
3.順序索引,散列索引,位圖索引
必背的sql語句
1:oracle分頁
select * from (select t.*, rownum rn from (select * from menu order by id desc) t where rownum < 10) where rn >=5
2: mysql分頁
select * from music where id limit 5,5
3:oracle中如何快速將一張表的數據復制到另外一張表中(另外一張表不存在,另外一張 表存在,但數據為空)
[if !supportLists]1、[endif].不存在另一張表時:
create table新表 as select * from 將要復制的表
[if !supportLists]2、[endif]存在另一張表時:
insert into新表名 select 字段 from 將要復制的表名
4:音樂專輯
查詢出special 表中的id 專輯名 并下面有多少首歌曲
Select s.id , min(s.sname),count(m.mid) from special s inner
join ms m on s.id=m.id group by s.id
5:快速刪除一張表(不可事物回滾,也就是沒有日志記錄)
TRUNCATE from表名
6:inner join
select查找信息 from 表名 1 inner join 表名2 on 表名1.列名 = 表名2.列名
7:left join
左外連接select查找信息 from 表名1 left join 表名2 on 表名1.列名 = 表名2.列名
8:right join
右外連接select查找信息 from 表名1 right join 表名2 on 表名1.列名 = 表名2.列名
9:oracle中查詢遍歷樹形結構(start with)
select * from extmenu
start with pid=1
connect by prior id = pid
快速刪除父節點以及父節點下的所有節點:
Delete from extmenu where id in (
elect * from extmenu
start with pid=1
connect by prior id = pid
)
10:查詢出來60-70,80-90,95-100學生的信息
select * from stu where chengji between 60 and 70 or between 80 and 90 or between 95 and 100
select * from stu where chengji > 60 and chengji < 70 or chengji > 80 and chengji < 90 or chengji > 95 and chengji < 100
11:用exists替換in------進行聯表查詢
select * from dept where exists(select * from emp where emp.deptno=dept.deptno);或select * from dept d inner join emp e on d.deptno = e.deptno(只查詢出兩表共同擁有的字段數據)
如果你依然覺得有些茫然,不如加入我的Java架構師之路:766529531 跟有多年Java開發經驗的資深工程師聊一聊。也可獲取免費的視頻學習資料以及電子書學習資料喔!
12:刪除表中的重復數據:
delete from xin a where a.rowid != (
select max(b.rowid) from xin b
where a.name = b.name
);
13:row_number(),rank() over ,dense_rank() over 按工資排序
select sal,
row_number() over(order by sal desc) rank1,
rank() over(order by sal desc) rank,
dense_rank() over(order by sal desc) drank
from emp
14:select * from (select emp.* from(
dense_rank() over(partition by departNo order by sal desc)
rk from emp )
Where rk=4
ibatis批量
this.getSqlMapClientTemplate().execute(
new SqlMapClientCallback() {
public Object doInSqlMapClient(
SqlMapExecutor executor)
throws SQLException {
executor.startBatch();
for (int i = 0, n = list.size(); i < n; i++) {
executor.insert(
"productAttach.insertProductAttach",
list.get(i));
}
executor.executeBatch();
return null;
}
});
ibatis,jdbc,hibernate的分段的實現:
都應該在組裝list的時候進行拆分(如:action層加入)
if(list.size() % 1000 == 0)
{
productAttachService.addBatch(list);
list.clear();
}
if (list.size() > 0)
productAttachService.addBatch(list);
上述內容就是Java的技術知識點有哪些,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。