国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

記錄一下Java JDBC連接微軟SQL Server遇到的那些坑

這篇具有很好參考價(jià)值的文章主要介紹了記錄一下Java JDBC連接微軟SQL Server遇到的那些坑。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

最近忙實(shí)習(xí),宅在國(guó)內(nèi)遠(yuǎn)程辦公,然后呢我的西班牙老板又要求我用Java做某個(gè)管理系統(tǒng)。由于我的電腦和公司的遠(yuǎn)程電腦上都裝的是SQL Server 2019,為了圖方便,我就沒有換數(shù)據(jù)庫(kù)系統(tǒng)軟件,順便隨手建了個(gè)庫(kù)建了個(gè)表來測(cè)試一下。

表大概長(zhǎng)這么一個(gè)樣子:

記錄一下Java JDBC連接微軟SQL Server遇到的那些坑

?插入了一些數(shù)據(jù):

記錄一下Java JDBC連接微軟SQL Server遇到的那些坑

用戶建好了,也授予了對(duì)應(yīng)權(quán)限,于是就開始編寫Java代碼連接和簡(jiǎn)單的查詢了:

package com.ernesto;

import java.sql.*;

public class Main {
    public static void main(String[] args) {
        String drvName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
        String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=StudentManagement";
        String userName = "JavaExp";
        String userPwd = "123";
        Connection dbc;
        try {
            Class.forName(drvName); // load microsoft's jdbc driver
            DriverManager.setLoginTimeout(2);
            dbc = DriverManager.getConnection(dbURL, userName, userPwd);
            System.out.println("Connection successfully!");
            Statement stm = dbc.createStatement();
            ResultSet rs = stm.executeQuery("SELECT Sno, Sname FROM t_Student ORDER BY Sno DESC");
            while(rs.next()) {
                System.out.println("Student Number: " + rs.getString("Sno")
                    + "\tStudent Name: " + rs.getString("Sname"));
            }
            stm.close();
            dbc.close(); // Should disconnect
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

順便提一下,JDBC驅(qū)動(dòng)我用的是微軟最新的11.2.1版本,適用于JRE 11的。這個(gè)可以直接在項(xiàng)目的build.gradle里面配置,省得去微軟官網(wǎng)下載JAR再導(dǎo)入Eclipse,很麻煩。示例:

dependencies {
    implementation 'com.microsoft.sqlserver:mssql-jdbc:11.2.1.jre11'
    // ...
}

但執(zhí)行的時(shí)候,就出大問題了。

首先是連接不上去,這坨西班牙文的大概意思就是說連接超時(shí)被拒絕了:

記錄一下Java JDBC連接微軟SQL Server遇到的那些坑

而且里面有個(gè)很關(guān)鍵的提示,就是這個(gè)數(shù)據(jù)庫(kù)連接采用的是TCP/IP協(xié)議,然后想了一下1433端口是不是telnet不通,后來一試果然不行。

所以馬上就去查SQL Server的配置管理器,依次展開SQLSERVER網(wǎng)絡(luò)配置-SQLINSTANCE的協(xié)議,一看TCP/IP協(xié)議確實(shí)是被禁用了。既然都禁用了,那還連得上個(gè)鬼,于是馬上啟用:

記錄一下Java JDBC連接微軟SQL Server遇到的那些坑

?然后還要檢查是不是開的1433端口,一看居然開的是動(dòng)態(tài)端口,那必須得改!馬上改成固定的1433端口:

記錄一下Java JDBC連接微軟SQL Server遇到的那些坑

?最后記得要重啟數(shù)據(jù)庫(kù)服務(wù)器,在SSMS里面直接在服務(wù)實(shí)例上右鍵菜單點(diǎn)擊重啟就好了:

記錄一下Java JDBC連接微軟SQL Server遇到的那些坑

?好,重啟了,再連接,接下來又報(bào)錯(cuò),說是SSL證書有問題:

記錄一下Java JDBC連接微軟SQL Server遇到的那些坑

網(wǎng)上搜了一大堆方案,很多人要么說是缺一個(gè)安全憑證jssecacerts證書文件需要生成,要么說是要升級(jí)sql支持TLS1.2,還有各種打補(bǔ)丁改注冊(cè)表的。這些我統(tǒng)統(tǒng)都試了,不僅麻煩,還不管用,該出錯(cuò)還是出錯(cuò)。

先前用mysql平臺(tái)連接的時(shí)候,我想起來自己處理這種問題一般就是禁用ssl驗(yàn)證或者信任根證書,那在SQL Server這里管不管用呢?答案是管用的,但是找了半天沒有找到怎么配置,后來去微軟開發(fā)者網(wǎng)站上找到了方案,就是說在URL連接里面加入 ;TrustServerCertificate=True 信任根證書。所以馬上把那段代碼改了一下:

String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=StudentManagement;TrustServerCertificate=True";

再運(yùn)行,終于可以查出來了:

記錄一下Java JDBC連接微軟SQL Server遇到的那些坑文章來源地址http://www.zghlxwxcb.cn/news/detail-440278.html

浪費(fèi)了一下午的時(shí)間,終于搞定了。在此寫這篇博文,也是想給后來人提個(gè)醒,把這些坑統(tǒng)統(tǒng)避掉。

到了這里,關(guān)于記錄一下Java JDBC連接微軟SQL Server遇到的那些坑的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包