2023年9月10日 星期日

在 Vscode 中使用 Java Maven 範例

在 Vscode 中使用 Java Maven 範例

Maven 可以用來建構和管理專案,包含對於庫的管理可以自動從支援的清單內自動下載,算是非常方便的省去不少建構上的麻煩。

這邊為了快速測試搭配 Vscode 做範例說明。




安裝 Maven

官方下載頁面:https://maven.apache.org/download.cgi
下載第二行的 Binary zip archive 這是我們要的檔案


載完之後找個合適的地方解壓縮,這邊用 C:\app 當範例,當前版本是 3.9.4 解出來後需要加到環境變數的位置會在

C:\app\apache-maven-3.9.4\bin


這邊用 PowerShell 加入環境變數 (需要使用管理員模式開啟)

[Environment]::SetEnvironmentVariable("PATH", "$($env:Path);C:\app\apache-maven-3.9.4\bin;", "Machine")


加完之後就能用了,用這個指令測試能不能用

mvn -v

如上圖那樣就是正確安裝好了


如果出現找不到 JAVA_HOME 的話表示電腦沒安裝 JAVA,這邊懶人包補裝一下就好
https://www.oracle.com/java/technologies/downloads/#jdk20-windows





從 vscode 執行 java 範例程式

先從套件區下載 Maven for Java 安裝



然後建立一個空資料 Demo 用 vscode 開啟


vscode 中按下 Ctrl+Shift+P 叫出命令列安裝
輸入 Maven後選擇 建立 Maven 專案



選擇快速建立



選擇1.4



網址預設狀態直接 Enter 即可



專案名稱預設 Demo 即可



選擇建立的位置,因為剛剛已經先建立好了直接Enter就好



選取資料夾之後注意看底下有對話要回復,版本輸入1.0按 Enter



然後會讓你確認是否正確,輸入Y之後就會自動建立好範例專案了



再來就建立好了



按下F5可以看到程式跑的結果



到此範例程式就生成完畢並成功執行了




添加 Lib 庫

套件查詢網頁: https://mvnrepository.com/


Maven的Lib庫管理是寫在 pom.xml 這個裡面裡面的,打開之後可以看到預設他有一個 junit 要追加的話,就在這個區塊前後添加即可



這邊舉個例子添加 sqlserver 的套件,需要的代碼可以從網站中查到,其中我選擇 12.4.0.jre8



版本點進來就有 Maven 用的代碼了



貼到剛剛 juint 附近,存檔之後右下角選是 Yes,按了會自動檢查有沒有貼錯




正確無誤之後再來在底下終端機輸 cd demo 進入 pom.xml 所在位置,然後再輸入 mvn clean install 清除已經編譯的檔案然後再重新編譯(會順便下載缺失的lib套件)



就此就完成了下載lib庫了,可以直接在代碼使用該庫的函式了




2023年9月3日 星期日

SQL Server 如何加密連接 Server/Client 端解說

[SQL Server] sqlcmd命令 如何加密連接 Server/Client 端解說

加密連接可以只單獨改一邊即可,當然伺服器端能直接強制加密是最好,就不用每一台客戶端都還要去更動。



測試是否正在加密中

在開始之前先說明這個指令可以用來測試是否加密中,請把它保存到 encrypt.sql 之中待會會用到。

SET NOCOUNT ON
SELECT
    c.session_id,
    c.encrypt_option,
    s.login_name,
    c.client_net_address,
    s.program_name
FROM
    sys.dm_exec_connections c
JOIN
    sys.dm_exec_sessions s ON c.session_id = s.session_id

保存好之後可以打開 SSMS 或 AzureDataStudio 測試一下這個 Querry 的結果。而這兩個軟體可以直接在圖形介面中選擇加密與信任伺服器就可以加密了。

下圖以 AzureDataStudio 為例子選中這兩個就能實現加密了



然後這是執行結果



其中的 SQLServerCEIP 這個東西是表示此連接與客戶體驗改進計劃 (CEIP) 有關,該計劃會定期從安裝的SQL Server中收集基本信息以幫助Microsoft改進其產品。

可以看到傳輸的信息已經是加密狀態了,這個可以一次看到全部所有的人加密狀態。如過要限縮範圍到當次連線的會話可以在 sql 中追加下面這段。

WHERE
    c.session_id = @@SPID



伺服器端的設定

打開 SQL Server 設定管理員從這裡強制打開



打開之後再從這裡重新啟動一下服務才會生效



再來絕大多數客戶端就算沒有特別改什麼也會生效被強制加密的



客戶 sqlcmd 端設定

如果伺服器端無法強制啟用只能從客戶端下手,這邊需要在命令加上 -N -C 這樣可以由客戶端強制加密連線

sqlcmd -S '192.168.3.123,1433' -U 'sa' -P '12345678' -i '.\encrypt.sql' -W -N -C

執行結果



可以看到已經是加密狀態了




快速測試

如果不希望外置SQL檔案想直接整合寫在命令列,以便快速測試可以用這條命令
sqlcmd -S '192.168.3.123,1433' -U 'sa' -P '12345678' -Q 'SET NOCOUNT ON SELECT c.session_id, c.encrypt_option, s.login_name, c.client_net_address, s.program_name FROM sys.dm_exec_connections c JOIN sys.dm_exec_sessions s ON c.session_id = s.session_id WHERE c.session_id = @@SPID' -W -N -C


對於該命令

  • 測試伺服啟有沒有啟用加密,要消除結尾的 -N -C 解除強制加密
  • 顯示包含其他連線,要消除 WHERE c.session_id = @@SPID


加密的選項

  • -N:由客戶端強制加密
  • -C:無條件信任證書

信任證書主要是用在如果證書不是買來的而是自己生成的,那麼預設情況下會被檔下來,以避免你連到別人假冒的服務器上

作為企業內部的網站並不公開可能不是那麼有必要買證書,不想花錢的話可以把自簽署證書加入信任清單,這樣即使不使用 -C 也可以正常連接




2023年8月22日 星期二

PowerShell 讀取檔案各種寫法利弊

PowerShell 讀取檔案各種寫法利弊

讀檔的方式其實蠻多的這邊大致介紹一下區別與效能影響



Get-Content

這是最常見的最快速的方法讀取出來是一個陣列物件,依照每行分配。

在絕大多數情況下是最方便快速的。

使用範例

Get-Content $Path

唯一的問題大概就是 Encoding 有限,只能用萬國碼或當前電腦編碼。還有性能沒有使用C#函式來得好。



[System.IO.File]::ReadAllLines()

遇到Encoding問題的時候首選的方案是這個,可以自由的設定編碼,而且有著較好的效能。

編碼問題大概比較容易遇到的狀況是

  1. 在舊版的 5.1 需要輸出不帶BOM的UTF8
  2. 非電腦編碼的其他語言

這兩種狀況都不是 Get-Content 能解決得,只能使用C#的函式

使用範例

$Enc = [Text.Encoding]::GetEncoding('UTF-8')
[System.IO.File]::ReadAllLines($Path, $Enc)

如果希望讀進來的不是陣列,使用 ReadAllText() 讀進來會是有換行的字串

要說缺點大概就是這東西不支持流,不支持流有個大問題是對於記憶體消耗比較重,假設今天要搬一個100G大小的文件,記憶體就得有100G才行,如果支持流可以讀一行寫一行自然對記憶體的負擔比較小了。



System.IO.StreamReader

這個大概是最好使的利器了,性能跟 ReadAllLines 一樣,而且支持流讀取與自訂 Encoding。檔案的指標移動也有支持,跟其他語言的讀取檔案差不多意思。

相比於前面這個函式是唯一可以解決缺少結尾空行的辦法了,前兩個其實都有個問題是會吃到一行結尾空行,因為for迴圈是在內部運行的,無權干預,這個可以自己寫能有效避開缺行的問題。

使用範例

$StreamReader = New-Object System.IO.StreamReader($Path, $Enc)
while ($null -ne ($line = $StreamReader.ReadLine())) {
    $line
}
if ($null -ne $StreamReader) { $StreamReader.Dispose() }

缺點也是一目了然,前後要開檔關檔還要寫 While 迴圈,對於快速測試來說這東西絕對不是首選。



Encoding編碼表查詢

最後附上各種常見編碼的查詢方法

# 日文::Shift-JIS (932)
[Text.Encoding]::GetEncoding('Shift-JIS')
# 簡體中文::GB2312 (936)
[Text.Encoding]::GetEncoding('GB2312')
# 繁體中文::BIG5 (950)
[Text.Encoding]::GetEncoding('BIG5')
# 萬國碼::UTF8 (65001)
[Text.Encoding]::GetEncoding('UTF-8')

# 萬國碼::UTF8-BOM (65001)
(New-Object System.Text.UTF8Encoding $True)
# 萬國碼::UTF8-NonBOM (65001)
(New-Object System.Text.UTF8Encoding $False)

# 當前系統編碼
PowerShell -Nop "& {return [Text.Encoding]::Default}"
# 當前 PowerShell 編碼
[Text.Encoding]::Default




2023年5月23日 星期二

如何關閉 edge 桌面搜索條

如何關閉 edge 桌面搜索條

近期新增的煩人功能,可以從設定關掉也可以從登錄檔直接禁止

方法1

第一個方法是從桌面點擊設定,有個自動啟動取消打勾就可以了。如果沒有看到選項,從edge右上角的設定進去 -> 更多工具 -> 啟動搜索欄。從這裡啟動一次選項就會出現了。

-

方法2

從登錄檔下手

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge" /v "WebWidgetAllowed" /t REG_DWORD /d 0 /f

執行之後就可以關掉了,不過有個缺點是,在設定裡面,選單最下方會出現由組織設定的字樣。

-


2023年5月21日 星期日

如何修改 edge 的緩存位置 避免長時間播放 Youtebe 對硬碟消耗過大

如何修改 edge 的緩存位置 避免長時間播放 Youtebe 對硬碟消耗過大

會想更換是因為偶爾喵一眼發現瀏覽器對於硬碟的消耗其實是有一定量的



就我每個月使用的平均流量來說瀏覽器是有超過100G的,這樣換算下來一年就有 1.2TB 了,從平均壽命來看目前的 1T 硬碟大概在 300TB 左右,其實還好換不換快取位置自己決定就可以了。

更換快取位置

先按下 Win+X 然後再按下 A ➔ 打開終端機,接著再輸入以下的代碼

Edge

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge" /v "DiskCacheDir" /t REG_SZ /d "D:\EdgeCache" /f

Chrome

reg add "HKEY_LOCAL_MACHINE\Software\Policies\Google\Chrome" /v "DiskCacheDir" /t REG_SZ /d "D:\ChromeCache" /f

輸入完畢之後就改好了,這行指令預設是改到 “D:\EdgeCache” 這裡位置可以自動,從指令後方修改即可。

執行完畢之後記得在相對應的位置自己新增一個資料夾,然後必須完整關閉 edge 在重啟才會生效。

完整關閉再重啟的方法是點擊右上角的 “三個點” 然後最底下選擇關閉在手動重開。這樣就生效了,可以去快取資料夾看會自動新增東西。


2023年5月7日 星期日

MSSQL 2022 如何利用 PowerShell 從 SQLServer 下載 CSV 檔案到本地

MSSQL 2022 如何利用 PowerShell 從 SQLServer 下載 CSV 檔案到本地



這邊有寫好的函式已經打通下載的路線了,採用的是 sqlcmd 的指令下載,屬於流下載不會消耗過大的記憶體可以安心下載百G以上的表格。




事前安裝

1. 這邊會利用到的軟體是 sqlcmd
SQL Server 的 Microsoft 命令列公用程式 15 (x64)


2. 又該軟體的相依於 (講白話就這個要先裝再裝1)
Microsoft ODBC Driver 17 for SQL Server (x64)

注意要求的是17版,目前下載頁面最上方的是18版,滾下去一點就可以看到17版了


 

通用下載函式

$ServerName = "192.168.3.123,1433"
$UserName = "kaede"
$Passwd = "1230"
$Table = "[CHG].[CHG].[TEST]"

irm bit.ly/ExpMssql|iex; Export-MssqlCsv $ServerName $UserName $Passwd $Table


該開源函式託管於 Github 上
https://github.com/hunandy14/MssqlCsvTransfer


2023年5月6日 星期六

MSSQL 2022 如何設定建立使用者、資料庫與表格

MSSQL 2022 如何設定建立使用者、資料庫與表格

前一篇MSSQL 2022 如何設定防火牆讓其他電腦連接
已經完全部屬完SQLSERVER的環境了,接下來則是部屬SQLSERVER內的環境




建立新的使用者

打開SSMS並登入然後在【安全性→登入】的地方按右鍵新增登入



進來之後新增一個使用者名稱並改成 SQLServer驗證,因為只是練習用的建議是取消執行密碼原則,別搞得自己太麻煩了



第二個伺服器腳色是該使用者的權限設置,預設權限啥都沒有只能讀寫DB,如果要給一般基礎最小管理權限可以參考這兩個

  • dbcreator:這個角色允許使用者建立、修改和刪除資料庫,但不允許他們進行伺服器級的設定或管理。
  • processadmin:這個角色允許使用者查看和終止執行中的進程,對於一般管理來說可能是有用的,特別是當需要管理執行中的查詢或終止阻塞的查詢時。


然後是權限比較大的

  • securityadmin:這個角色允許使用者管理伺服器的登入和連接,這也意味著他們可以修改其他使用者的密碼或權限。
  • setupadmin:這個角色允許使用者管理 SQL Server 的設定選項和執行安裝腳本。它也授予了許多組態設定的權限。
  • sysadmin:這是 SQL Server 中的最高權限角色,它賦予使用者對伺服器的完全和不受限制的控制。




建立資料庫

在資料庫的地方按右鍵新增資料庫



然後填入資料庫名稱以及擁有者,剩下的先預設不要動就行,再來直接按確定



然後回到剛剛使用者的地方,對著新增的使用者按右鍵屬性
(沒看到的話,對"登入"點過一次右鍵重新整理)



進來之後把預設資料庫改成剛剛新建的


這個改了好處是輸入 sql 查詢語句的時候可以不用指定資料庫,如果使用完整名稱的話有沒有改都不會影響到執行結果。




建立模式名 SCHEMA

直譯”模式名”聽上去可能有點矇,比較準確的翻譯或許可以叫他命名空間,這跟 C++ 中的命名空間是一個意思,只不過對象是表格。

一個完整個表格名稱格式是這樣的 “[資料庫名].[模式名].[表格名]”,這就意味了可以透過不同的模式名建立兩個名稱一樣的表格。

在 Oracle 中也有模式名,但是跟 SQL 不同的是 Oracle 會自動依照使用者名稱建立模式名,不需要也不能手動建立。

建立模式名需要手動打SQL句建立,先按下 CTRL+N 建立一個空的檔案然後輸入底下的代碼

CREATE SCHEMA CHG;

這個代碼會建立一個叫 CHG 模式名,按下執行



仔細看一下上面這張圖”執行”的左邊有個 CHG 那個是資料庫名稱,剛剛有條預設登入後就自動切過來了,有時候資料庫如果不正確的話會導致出錯。

至此基本的環境就建立好了,如果你不知道”資料庫”跟”模式名”該取什麼的話,最無腦的辦法就是先照著使用者名稱設就是了。

練習的時候可以大坦的遵守一個簡單的規則,每個使用者都有一個跟他同名的資料庫與模式名。在很多時候會比較省事不用考慮沒必要的東西。


 

重新使用創建的使用者登入

再來關閉SSMS重新打開,並改成剛剛新增的使用者登入
然後會看到新增的資料庫,雙擊展開並對資料庫點右鍵新增資料庫



再來追加 ID, Name, Email 三個項目 (點最後一個就會自己多出一個)
其中ID的部分改成 int 之後在下方將 “(為識別子)” 設定成是
後面兩個 Name, Email 改 nvchar 長度的話夠用就好



  1. 識別子的意思是主鍵(PK),就是這個字段的唯一識別碼,所有資料中PK不能有重複的,可以用來確保能夠搜到你要的那一行。
  2. 識別職增量指的是你不用管他輸入多少,輸入的時候給他空直他會自動依照順序從1開始慢慢增長。
  3. 雖然SQL中沒有規定必須一定要有主鍵,但要是你不給主鍵的話出現兩行資料完全相等的時候會因為無法識別該刪除哪一行而導致錯誤,別採這個坑了建議一定要記得設主鍵。

然後從上方的檢視打開屬性視窗



打開之後名稱修改成 CHG_T01 結構描述(模式名)修改成 CHG



設定好之後按下 CTRL+S 儲存就可以建立了
儲存之後需要對著資料表按一下右鍵重新整理才能看到



然後對著那張表格按右鍵,選取前1000個可以查看表的資料,編輯前200個可以修改,這裡因為剛建立還是空的先選擇編輯

然後隨意填點資料上去 (ID字段留空保持NULL就好不用管他會自己填值)



注意這裡編輯後光標一離開馬上就會被更新了,不用存檔也沒得反悔
改好之後再按一下剛剛的選取前1000個看一下結果吧



至此基本的環境布置與測試都完成了


下一篇進階篇
CHG: MSSQL 2022 如何創建 自簽署SSL憑證證書 導入並啟用加密連接