日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Java+Swing+MySQL教務(wù)管理系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)與避坑指南

Java+Swing+MySQL教務(wù)管理系統(tǒng)開(kāi)發(fā)實(shí)戰(zhàn)與避坑指南 簡(jiǎn)介這是一套基于Java Swing與MySQL開(kāi)發(fā)的學(xué)校教務(wù)管理系統(tǒng)完整源碼定位為高校Java課程設(shè)計(jì)、期末大作業(yè)及畢業(yè)設(shè)計(jì)備題資源難度適中且已通過(guò)助教老師審定。項(xiàng)目涵蓋學(xué)生信息管理、教師信息管理、課程安排、成績(jī)錄入與查詢、登錄鑒權(quán)等常見(jiàn)教務(wù)業(yè)務(wù)模塊界面采用Swing桌面組件構(gòu)建數(shù)據(jù)層通過(guò)JDBC連接MySQL附帶SQL初始化腳本與Maven工程配置有助于理解業(yè)務(wù)邏輯、界面事件處理、數(shù)據(jù)庫(kù)表設(shè)計(jì)及客戶端與數(shù)據(jù)庫(kù)交互流程。壓縮包共包含39個(gè)文件以25個(gè)Java源文件為主另有6張界面運(yùn)行截圖、5個(gè)XML配置文件、1個(gè)SQL腳本、1個(gè)README說(shuō)明文檔及.gitignore等整體大小僅240KB結(jié)構(gòu)清晰緊湊便于導(dǎo)入IDE直接運(yùn)行和學(xué)習(xí)。源碼已經(jīng)本地編譯驗(yàn)證可穩(wěn)定運(yùn)行評(píng)審分達(dá)到98分代碼結(jié)構(gòu)與命名規(guī)范具有一定示范性。目前已有220人學(xué)習(xí)下載適合需要快速完成期末大作業(yè)或課程設(shè)計(jì)的Java初學(xué)者參考借鑒。1. JavaSwingMySQL教務(wù)管理系統(tǒng)課程設(shè)計(jì)里最實(shí)在的一塊拼圖JavaSwingMySQL教務(wù)管理系統(tǒng)是 Java 期末大作業(yè)里被點(diǎn)名最多的一道題也是課程設(shè)計(jì)里的默認(rèn)組合Swing 畫界面JDBC 連 MySQLMaven 管依賴和構(gòu)建。這份資源我完整跑過(guò)一遍pom.xml、educational_admin.sql、src 和 test 都在導(dǎo)入 IDEA 改好連接就能啟動(dòng)。場(chǎng)景很直觀登錄區(qū)分管理員、教師、學(xué)生三類角色之后分別維護(hù)學(xué)生信息、課程、選課和成績(jī)。功能不算驚艷但面向?qū)ο?、JDBC 操作、Swing 事件模型全覆蓋交作業(yè)足夠了。適合三類人現(xiàn)在要交作業(yè)的、想照著 SwingMySQL 完整例子復(fù)現(xiàn)的、以及拿到源碼不知道怎么講設(shè)計(jì)結(jié)構(gòu)的。但 target 里已有 classes 不代表你能直接跑不同 JDK/MySQL 版本會(huì)把“可運(yùn)行”變成“環(huán)境不對(duì)”我建議先看完下面的目錄和腳本再動(dòng)手。2. 先讀懂項(xiàng)目骨架pom.xml、educational_admin.sql 與 Swing 分層結(jié)構(gòu)拿到壓縮包先別急著點(diǎn)運(yùn)行。我的習(xí)慣是先看目錄再讀 SQL 腳本最后才打開(kāi) IDEA。這個(gè)順序能幫你三分鐘判斷資源完整度也能避開(kāi)很多后面才爆出來(lái)的環(huán)境問(wèn)題。2.1 目錄結(jié)構(gòu)Maven 布局里哪些是重點(diǎn)先從 zip 里解出來(lái)的根目錄開(kāi)始看正常的 Maven 工程長(zhǎng)這樣educational_admin/ ├── pom.xml ├── educational_admin.sql ├── README.md ├── .gitignore ├── src/ │ ├── main/ │ │ ├── java/ │ │ └── resources/ │ └── test/ │ └── java/ ├── target/ │ └── classes/先說(shuō)結(jié)論pom.xml 是整個(gè)項(xiàng)目的依賴和打包配置核心educational_admin.sql 是數(shù)據(jù)庫(kù)初始化腳本src/main/java 里是業(yè)務(wù)代碼src/test 用來(lái)放單元測(cè)試target/classes 是上一次編譯的產(chǎn)物。資源里出現(xiàn) target 和 classes說(shuō)明作者是在本機(jī)成功編譯過(guò)才打包的這一點(diǎn)比很多只丟源碼的壓縮包靠譜。再看 .gitignore。它在這里的作用不是運(yùn)行而是告訴你作者是用 Git 管理版本的里面通常忽略了 target、.idea、*.iml 這些本地文件。你在這個(gè)基礎(chǔ)上繼續(xù)用 Git 維護(hù)課程設(shè)計(jì)就不用自己重新補(bǔ) ignore 規(guī)則。至于壓縮包根目錄常見(jiàn)的 -master 后綴只是從 Git 平臺(tái)打 zip 時(shí)留下的分支名不影響項(xiàng)目?jī)?nèi)容。打開(kāi) pom.xml 后我一般先看 dependencies 里有沒(méi)有 mysql-connector-java。純 Swing JDBC 的課程設(shè)計(jì)通常只依賴這一個(gè)第三方庫(kù)如果里面還出現(xiàn)了 JFreeChart、POI 之類的說(shuō)明還有導(dǎo)出圖表或 Excel 的功能。你先記下依賴列表后面避坑章節(jié)會(huì)用到。dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId !-- 版本號(hào)以你本地 Maven 實(shí)際拉到的最新版為準(zhǔn) -- /dependency注意這個(gè)依賴的版本直接決定了驅(qū)動(dòng)類名5.x 是 com.mysql.jdbc.Driver8.x 是 com.mysql.cj.jdbc.Driver。這看起來(lái)是小問(wèn)題但它是課程設(shè)計(jì)項(xiàng)目里最常見(jiàn)的啟動(dòng)報(bào)錯(cuò)來(lái)源之一后面會(huì)展開(kāi)。pom.xml 里如果看不到版本號(hào)可以把鼠標(biāo)放在 IDEA 的 dependency 上按住 Ctrl 查看實(shí)際解析到的版本或者用 mvn dependency:tree 輸出。2.2 educational_admin.sql表結(jié)構(gòu)里藏著業(yè)務(wù)邊界建庫(kù)腳本是整個(gè)項(xiàng)目的“定盤星”。界面上的每個(gè)按鈕本質(zhì)上都在對(duì)這個(gè)腳本里的表做增刪改查所以一定要先讀一遍。教務(wù)管理系統(tǒng)常規(guī)的表就那幾類賬號(hào)表、學(xué)生表、教師表、課程表、選課記錄表、成績(jī)表。資源的命名可能叫 user 也可能叫 t_user前綴不重要字段邏輯基本逃不出下面這些DROP TABLE IF EXISTS t_user; CREATE TABLE t_user ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL COMMENT 登錄名, password VARCHAR(50) NOT NULL COMMENT 密碼, role VARCHAR(10) NOT NULL COMMENT admin/teacher/student ); DROP TABLE IF EXISTS t_student; CREATE TABLE t_student ( id INT PRIMARY KEY AUTO_INCREMENT, student_no VARCHAR(20) NOT NULL, name VARCHAR(50) NOT NULL, major VARCHAR(50), class_name VARCHAR(50) ); DROP TABLE IF EXISTS t_course; CREATE TABLE t_course ( id INT PRIMARY KEY AUTO_INCREMENT, course_name VARCHAR(100) NOT NULL, teacher_id INT, max_count INT DEFAULT 50, selected_count INT DEFAULT 0 ); DROP TABLE IF EXISTS t_selection; CREATE TABLE t_selection ( id INT PRIMARY KEY AUTO_INCREMENT, student_id INT, course_id INT, score DECIMAL(5,2) DEFAULT NULL );執(zhí)行這些腳本后你會(huì)發(fā)現(xiàn)整個(gè)系統(tǒng)的業(yè)務(wù)邊界也清楚了學(xué)生通過(guò) t_selection 和 t_course 關(guān)聯(lián)成績(jī)掛在選課記錄上教師通過(guò) teacher_id 關(guān)聯(lián)課程。這就是“學(xué)生選課、教師錄成績(jī)、管理員維護(hù)基礎(chǔ)數(shù)據(jù)”閉環(huán)的物理基礎(chǔ)。腳本里通常還有初始數(shù)據(jù)最常見(jiàn)的是給每個(gè)角色預(yù)設(shè)一個(gè)賬號(hào)。沒(méi)有初始賬號(hào)的話登錄頁(yè)就是空轉(zhuǎn)你導(dǎo)入后必須先手工插一條管理員否則永遠(yuǎn)登不進(jìn)去。我的做法是先執(zhí)行下面的查詢確認(rèn)腳本里到底有沒(méi)有賬號(hào)SELECT * FROM t_user;如果結(jié)果是空表自己補(bǔ)一條最低限度的管理員即可密碼字段先在后臺(tái)用已知的明文跑通后再考慮加密。這里先不展開(kāi)加密最后一章會(huì)講。2.3 Swing 分層View、Service、DAO 誰(shuí)管什么很多課程設(shè)計(jì)項(xiàng)目的真實(shí)形態(tài)是“類都寫在一個(gè) JFrame 里”按鈕一多一個(gè)類能有兩千行。能跑但很難講也難改。合理的結(jié)構(gòu)是三層Swing 窗體只負(fù)責(zé)接收鼠標(biāo)鍵盤事件和展示數(shù)據(jù)Service 層處理登錄校驗(yàn)、選課資格這類業(yè)務(wù)規(guī)則DAO 層只寫 JDBC不摻界面邏輯。我先給一個(gè) DAO 層的典型寫法你看完后可以對(duì)照資源里的包名去定位public class UserDao { public User findByUsernameAndPassword(String username, String password) { String sql SELECT id, username, role FROM t_user WHERE username? AND password?; try (Connection conn DBUtil.getConnection(); PreparedStatement ps conn.prepareStatement(sql)) { ps.setString(1, username); ps.setString(2, password); try (ResultSet rs ps.executeQuery()) { if (rs.next()) { User user new User(); user.setId(rs.getInt(id)); user.setUsername(rs.getString(username)); user.setRole(rs.getString(role)); return user; } } } catch (SQLException e) { e.printStackTrace(); } return null; } }這里我特意用了 PreparedStatement 而不是 Statement因?yàn)橛米址唇訉懗鰜?lái)的 SQL 在答辯時(shí)被問(wèn)到“如何防 SQL 注入”會(huì)很被動(dòng)。參數(shù)用問(wèn)號(hào)占位再通過(guò) setString 傳值既安全又不用處理引號(hào)轉(zhuǎn)義。連接從 DBUtil 統(tǒng)一獲取正常情況下它會(huì)讀一個(gè) db.properties 文件。最低成本的寫法是直接放在一個(gè)常量類里但為了不改代碼就能換數(shù)據(jù)庫(kù)我更推薦用 properties 文件jdbc.urljdbc:mysql://localhost:3306/educational_admin?useSSLfalseserverTimezoneAsia/ShanghaicharacterEncodingutf8 jdbc.usernameroot jdbc.password你的密碼注意 URL 里的 serverTimezone 參數(shù)MySQL 8.x 驅(qū)動(dòng)不寫這個(gè)十有八九會(huì)報(bào)時(shí)區(qū)異常。后面的避坑章節(jié)會(huì)專門再說(shuō)。三層拆分之后JFrame 里就不需要知道 SQL 怎么寫了它只調(diào) ServiceService 再調(diào) DAO邊界清清楚楚。答辯時(shí)老師問(wèn)“你這個(gè)功能怎么實(shí)現(xiàn)的”你就能按這條鏈路講下來(lái)而不是翻幾百行代碼找按鈕。3. 核心代碼拆解登錄校驗(yàn)、學(xué)生管理、選課事務(wù)的 JDBC 寫法這一章專門拆三個(gè)最常出問(wèn)題的功能點(diǎn)登錄、表格刷新、事務(wù)。這三個(gè)點(diǎn)懂了剩下都是重復(fù)動(dòng)作。3.1 登錄事件轉(zhuǎn)發(fā)與角色跳轉(zhuǎn)Swing 登錄界面本質(zhì)上是把 JTextField 和 JPasswordField 里拿到的值交給 Service 層去數(shù)據(jù)庫(kù)比對(duì)然后根據(jù)角色打開(kāi)不同的主窗口。按鈕事件里的代碼如下JButton loginBtn new JButton(登錄); loginBtn.addActionListener(e - { String username usernameField.getText().trim(); String password new String(passwordField.getPassword()); if (username.isEmpty() || password.isEmpty()) { JOptionPane.showMessageDialog(frame, 用戶名和密碼不能為空); return; } User user new UserService().login(username, password); if (user ! null) { frame.dispose(); if (admin.equals(user.getRole())) { new AdminMainFrame().setVisible(true); } else if (teacher.equals(user.getRole())) { new TeacherMainFrame().setVisible(true); } else { new StudentMainFrame(user).setVisible(true); } } else { JOptionPane.showMessageDialog(frame, 用戶名或密碼錯(cuò)誤); } });這里有兩個(gè)容易被忽視的點(diǎn)。第一密碼框要用 getPassword() 而不是 getText()因?yàn)樗祷?char[] 而不是 String這是 Java 在密碼處理上默認(rèn)的安全習(xí)慣。第二登錄成功后要用 frame.dispose() 把登錄窗口銷毀而不是 setVisible(false)否則進(jìn)程里掛著隱藏窗口內(nèi)存上沒(méi)必要。UserService.login 內(nèi)部就是查 t_user 表比對(duì)成功后返回一個(gè)帶 role 的 User 對(duì)象。如果資源里沒(méi)有 Service 層直接在事件里寫 JDBC也能跑但建議你自己拆一層出來(lái)因?yàn)檫@正好是答辯可以講的設(shè)計(jì)點(diǎn)界面層不知道 SQL數(shù)據(jù)層不知道按鈕。3.2 學(xué)生管理JTable 刷新模型別追加舊數(shù)據(jù)教務(wù)系統(tǒng)里學(xué)生列表幾乎都用 JTable DefaultTableModel。經(jīng)典翻車現(xiàn)場(chǎng)是每次點(diǎn)“查詢”都在往表格里 addRow但是舊數(shù)據(jù)還留在 model 里結(jié)果越點(diǎn)越多。正確的刷新邏輯是先清空再填充private void loadStudentData() { String sql SELECT id, student_no, name, major FROM t_student ORDER BY id; try (Connection conn DBUtil.getConnection(); PreparedStatement ps conn.prepareStatement(sql); ResultSet rs ps.executeQuery()) { DefaultTableModel model (DefaultTableModel) studentTable.getModel(); model.setRowCount(0); while (rs.next()) { model.addRow(new Object[]{ rs.getInt(id), rs.getString(student_no), rs.getString(name), rs.getString(major) }); } } catch (SQLException ex) { JOptionPane.showMessageDialog(this, 查詢失敗 ex.getMessage(), 錯(cuò)誤, JOptionPane.ERROR_MESSAGE); } }setRowCount(0) 是清空舊數(shù)據(jù)的關(guān)鍵缺了它第二次查詢開(kāi)始表格就會(huì)出現(xiàn)重復(fù)。如果你在初始化表格時(shí)用的是這種寫法studentTable.setModel(new DefaultTableModel( new Object[]{ID, 學(xué)號(hào), 姓名, 專業(yè)}, 0 ));那么 loadStudentData 里就可以直接強(qiáng)轉(zhuǎn) DefaultTableModel不需要每次重設(shè)表頭。如果資源里表格沒(méi)有正確初始化強(qiáng)制轉(zhuǎn)換會(huì)拋 ClassCastException那就先改初始化那行再調(diào)刷新。刪除操作的處理邏輯是從表格選中行拿到主鍵執(zhí)行 delete再重新調(diào)用 loadStudentData 刷新界面。int selectedRow studentTable.getSelectedRow(); if (selectedRow 0) { int id (int) studentTable.getValueAt(selectedRow, 0); new StudentDao().deleteById(id); loadStudentData(); }這里注意 getValueAt 返回的是 Object先轉(zhuǎn)成 Integer 再變成 int。很多同學(xué)忘了強(qiáng)轉(zhuǎn)編譯直接報(bào)錯(cuò)或者因?yàn)楸砀窳许樞虿粚?duì)把第二列的學(xué)號(hào)當(dāng)成主鍵刪了刪出來(lái)的數(shù)據(jù)和 UI 顯示完全對(duì)不上。所以建議在表格里把主鍵列放在第一列并在初始化時(shí)隱藏它或者單獨(dú)維護(hù)一個(gè) List 來(lái)映射行號(hào)到主鍵。3.3 選課與成績(jī)錄入JDBC 事務(wù)保證數(shù)據(jù)一致性選課這個(gè)動(dòng)作會(huì)同時(shí)影響兩張表在 t_selection 里插入一條選課記錄同時(shí)把 t_course 里的 selected_count 加一。如果第一個(gè)操作成功、第二個(gè)失敗選課記錄就成了孤兒數(shù)據(jù)。避免這個(gè)問(wèn)題必須把兩個(gè)操作放進(jìn)同一個(gè)事務(wù)里public boolean chooseCourse(int studentId, int courseId) { Connection conn null; try { conn DBUtil.getConnection(); conn.setAutoCommit(false); String insertSql INSERT INTO t_selection(student_id, course_id, score) VALUES(?,?,NULL); try (PreparedStatement ps conn.prepareStatement(insertSql)) { ps.setInt(1, studentId); ps.setInt(2, courseId); ps.executeUpdate(); } String updateSql UPDATE t_course SET selected_count selected_count 1 WHERE id?; try (PreparedStatement ps conn.prepareStatement(updateSql)) { ps.setInt(1, courseId); ps.executeUpdate(); } conn.commit(); return true; } catch (SQLException e) { if (conn ! null) { try { conn.rollback(); } catch (SQLException ex) { ex.printStackTrace(); } } return false; } finally { if (conn ! null) { try { conn.setAutoCommit(true); } catch (SQLException e) { e.printStackTrace(); } DBUtil.close(conn); } } }這段代碼有幾個(gè)細(xì)節(jié)。第一setAutoCommit(false) 必須在所有操作之前調(diào)用否則每條 SQL 都自動(dòng)提交事務(wù)就形同虛設(shè)。第二finally 里把 autoCommit 恢復(fù)成 true 是個(gè)好習(xí)慣因?yàn)檫B接要還回池里如果保持 false同一個(gè)連接下一次被使用時(shí)前一個(gè)事務(wù)未提交的操作狀態(tài)會(huì)帶過(guò)來(lái)。第三兩個(gè) PreparedStatement 分別在 try-with-resources 里自己關(guān)閉但 Connection 是在最外層手動(dòng)關(guān)閉因?yàn)槭聞?wù)期間不能用 try-with-resources 提前把連接關(guān)掉。教師錄成績(jī)?cè)谠砩细?jiǎn)單本質(zhì)就是一條 update 語(yǔ)句UPDATE t_selection SET score 8.5 WHERE student_id ? AND course_id ?但如果學(xué)生選了多門課而界面只給了學(xué)號(hào)和分?jǐn)?shù)沒(méi)給課程號(hào)那 update 就會(huì)把所有課程成績(jī)一起改掉。這一點(diǎn)很多課程設(shè)計(jì)項(xiàng)目都會(huì)踩建議在成績(jī)錄入界面把課程作為必選項(xiàng)或者用 JTable 展示選課記錄時(shí)直接點(diǎn)擊某一行進(jìn)行編輯減少這種歧義。4. 本地編譯運(yùn)行全流程MySQL 建庫(kù)、Maven 打包與啟動(dòng)參數(shù)前兩章是拆架構(gòu)這一章回到地面怎么把資源里的代碼變成你電腦上能看到登錄窗的實(shí)際運(yùn)行程序。按順序做十分鐘能跑起來(lái)。4.1 MySQL 初始化命令行導(dǎo)入腳本與賬號(hào)確認(rèn)如果你的 MySQL 裝的是 5.7 或 8.0最穩(wěn)的導(dǎo)入方式是在命令行里執(zhí)行mysql -u root -p educational_admin.sql回車后會(huì)提示輸入密碼輸入 root 的密碼腳本里的建庫(kù)建表和初始數(shù)據(jù)就全部執(zhí)行了。這里注意腳本里如果有 DROP TABLE 語(yǔ)句它會(huì)把同名表先刪掉再重建所以不要在已經(jīng)存有自己數(shù)據(jù)的庫(kù)上執(zhí)行先看一眼腳本頭部有沒(méi)有 DROP 字樣。導(dǎo)入完成后用下面這條命令驗(yàn)證一下表是否建出來(lái)了mysql -u root -p -e USE educational_admin; SHOW TABLES;這一步非常有必要因?yàn)楹芏嗾n程設(shè)計(jì)項(xiàng)目里 SQL 腳本的字符集、表名可能和 Java 代碼里寫的不一致。如果 Java 代碼里查的是 t_student而 SQL 腳本里建的表叫 student那你代碼怎么改都會(huì)報(bào)“表不存在”。先確認(rèn)表名再對(duì)照代碼里的 SQL避免在這個(gè)問(wèn)題上浪費(fèi)時(shí)間。圖形化工具比如 Navicat、MySQL Workbench 也可以導(dǎo)入但要注意導(dǎo)入時(shí)保持 UTF-8 編碼。命令行默認(rèn)讀取腳本文件的編碼Windows 下如果你的腳本是 GBK 保存的就會(huì)出現(xiàn)亂碼。資源里的腳本我建議用記事本或 VSCode 打開(kāi)把右下角的編碼確認(rèn)成 UTF-8 后再執(zhí)行。4.2 Maven 編譯打包在 IDEA 里還是命令行里跑資源是標(biāo)準(zhǔn) Maven 工程所以最高效的方式是直接用 IDEA 打開(kāi)根目錄。IDEA 會(huì)自動(dòng)識(shí)別 pom.xml開(kāi)始下載依賴右下角進(jìn)度條走完基本就準(zhǔn)備好了。如果你想用命令行驗(yàn)證這幾個(gè)命令是最常用的mvn clean compile mvn packageclean 會(huì)清掉 target 目錄里的舊 class避免新舊代碼混雜compile 把 src/main/java 編譯成 classpackage 進(jìn)一步打 jar。對(duì)于結(jié)構(gòu)不復(fù)雜的 Swing 課程設(shè)計(jì)執(zhí)行到 package 就已經(jīng)能看到 target 目錄下生成帶依賴或純項(xiàng)目的 jar 了。但這里有一個(gè)非常大的坑普通的 Maven project 打出來(lái)的 jar 不包含第三方依賴。也就是說(shuō)你直接 java -jar xxx.jar 會(huì)報(bào) NoClassDefFoundError提示找不到 mysql 驅(qū)動(dòng)類。因?yàn)槟銢](méi)有把 mysql-connector-java 這個(gè) jar 打包進(jìn)去。解決方式是加 maven-shade-plugin把依賴合并進(jìn)最終 jarplugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-shade-plugin/artifactId !-- 版本號(hào)按你本地 Maven 倉(cāng)庫(kù)能拿到的版本填 -- executions execution phasepackage/phase goalsgoalshade/goal/goals /execution /executions configuration transformers transformer implementationorg.apache.maven.plugins.shade.resource.ManifestResourceTransformer mainClasscom.yourpackage.Main/mainClass /transformer /transformers /configuration /pluginmainClass 里的類名要換成資源里真正帶 main 方法的啟動(dòng)類一般是 MainFrame 或者 Main。如果你不確定就打開(kāi) src/main/java 往下翻找?guī)?public static void main 的類。配置正確后執(zhí)行 mvn clean packagetarget 下會(huì)同時(shí)出現(xiàn)原始 jar 和帶依賴的 jar帶依賴的那個(gè)命名一般是 xxx.jar直接雙擊或者 java -jar 都能跑。如果只是自己交作業(yè)我一般只在 IDEA 里點(diǎn)綠色運(yùn)行按鈕不去打包。但如果你要演示給老師看或者想在一臺(tái)沒(méi)裝 IDEA 的機(jī)器上演示shade 插件這一步是繞不過(guò)去的。4.3 啟動(dòng)前的三個(gè)檢查時(shí)區(qū)、SSL、字符集即使導(dǎo)入成功第一次運(yùn)行仍可能被 JDBC 連接串卡住。這一節(jié)把最常見(jiàn)的三個(gè)連接參數(shù)一次說(shuō)清。先看一個(gè)配置文件的完整寫法jdbc.urljdbc:mysql://localhost:3306/educational_admin?useSSLfalseserverTimezoneAsia/ShanghaicharacterEncodingutf8 jdbc.usernameroot jdbc.password你的密碼useSSLfalse 是在本地開(kāi)發(fā)時(shí)推薦的避免 MySQL 8.x 默認(rèn)啟用 SSL 后出現(xiàn) SSLHandshakeException。serverTimezoneAsia/Shanghai 是為了解決報(bào)錯(cuò) “The server time zone value й?? is unrecognized” 這個(gè)問(wèn)題本質(zhì)是驅(qū)動(dòng)和服務(wù)器時(shí)區(qū)不一致。characterEncodingutf8 保證傳入數(shù)據(jù)庫(kù)的中文不亂碼但要注意它只對(duì)當(dāng)前連接有效數(shù)據(jù)庫(kù)和表本身的字符集也要是 utf8mb4否則結(jié)果集里還是亂碼。還有一個(gè)參數(shù) allowPublicKeyRetrievaltrue 值得提它經(jīng)常和 MySQL 8.0 的 caching_sha2_password 插件一起出現(xiàn)。如果連接報(bào)錯(cuò)提示 Public Key Retrieval is not allowed就在 URL 后面追加這個(gè)參數(shù)。這三個(gè)參數(shù)都不算稀奇但放一起能解決 80% 的“MySQL 連接不上”問(wèn)題。啟動(dòng)前最后檢查一件事如果你在 Windows 命令行跑MySQL 服務(wù)默認(rèn)不會(huì)自動(dòng)啟動(dòng)。用管理員身份打開(kāi)命令提示符輸入 net start mysql或者在服務(wù)管理器里啟動(dòng) MySQL。這個(gè)說(shuō)起來(lái)有點(diǎn)基礎(chǔ)但課程設(shè)計(jì)驗(yàn)收現(xiàn)場(chǎng)十個(gè)卡死跳過(guò)的項(xiàng)目里有四五個(gè)是服務(wù)沒(méi)開(kāi)。5. 避坑指南SwingMySQL 項(xiàng)目最常見(jiàn)的五個(gè)坑與排查路徑這一章是血淚總結(jié)。每一個(gè)坑都是我親眼見(jiàn)人踩過(guò)其中一半自己也踩過(guò)按“現(xiàn)象 → 原因 → 解決”寫你可以直接對(duì)照著排查。5.1 驅(qū)動(dòng)類找不到ClassNotFoundException 但 pom 里明明有依賴現(xiàn)象啟動(dòng)后控制臺(tái)第一行報(bào) java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver然后程序退出。原因要么依賴沒(méi)有真正導(dǎo)入要么你用的是 MySQL Connector/J 5.x驅(qū)動(dòng)類名是 com.mysql.jdbc.Driver而 8.x 驅(qū)動(dòng)才叫 com.mysql.cj.jdbc.Driver。代碼里 Class.forName 寫反了加載就會(huì)失敗。解決先看 pom.xml 里 mysql-connector-java 的版本。如果是 8.x把 Class.forName 的值改成 com.mysql.cj.jdbc.Driver如果是 5.1.x改回 com.mysql.jdbc.Driver。同時(shí)確認(rèn) IDEA 的 Maven 面板沒(méi)有紅色依賴如果依賴報(bào)錯(cuò)就執(zhí)行右側(cè)的 Reload All Maven Projects。最內(nèi)部的排查命令是mvn dependency:tree只要能列出 mysql-connector-java 節(jié)點(diǎn)就說(shuō)明依賴解析到了。如果依賴在 pom 里不在那問(wèn)題出在 IDEA 的本地倉(cāng)庫(kù)索引刪除項(xiàng)目里的 .idea 文件夾重新導(dǎo)入一次就好。5.2 中文亂碼界面、數(shù)據(jù)庫(kù)、連接三個(gè)地方要一致現(xiàn)象學(xué)生名單里的中文在界面上顯示成問(wèn)號(hào)或者數(shù)據(jù)庫(kù)里表數(shù)據(jù)正常但 JTable 里全是 。原因字符集鏈路有三層界面 Java 文件編碼、JDBC 連接參數(shù)、MySQL 庫(kù)表和客戶端編碼只要有一層是 GBK 而其他層是 UTF-8中文就會(huì)爛。最常見(jiàn)的是連接 URL 里沒(méi)寫 characterEncodingutf8或者建庫(kù)腳本里用了 DEFAULT CHARSETlatin1。解決建庫(kù)統(tǒng)一用 utf8mb4URL 里追加 characterEncodingutf8IDEA 里再檢查一下 File Encoding 設(shè)置保證項(xiàng)目編譯器輸出都是 UTF-8。如果是 Windows 控制臺(tái)運(yùn)行看到中文亂碼在運(yùn)行時(shí)加 JVM 參數(shù) -Dfile.encodingUTF-8。這三處一致了亂碼基本消失。如果還存在問(wèn)題去查 MySQL 變量的 global character_set_server 是不是 utf8mb4。5.3 界面卡死Swing 的 EDT 線程里跑了 JDBC現(xiàn)象點(diǎn)“查詢”按鈕之后整個(gè)窗口拖不動(dòng)鼠標(biāo)一直轉(zhuǎn)圈十幾秒后才有響應(yīng)或者干脆假死。原因Swing 是單線程模型所有界面刷新必須在事件分發(fā)線程 EDT 上執(zhí)行。如果你在按鈕事件里直接發(fā)起數(shù)據(jù)庫(kù)查詢JDBC 等待響應(yīng)時(shí) EDT 被堵死界面自然不動(dòng)。解決用 SwingWorker 包一層把耗時(shí)查詢放到后臺(tái)線程完成后回到 EDT 更新界面。一個(gè)典型的修復(fù)模板是這樣new SwingWorkerVoid, Void() { Override protected Void doInBackground() { dao.queryAll(); // 放耗時(shí)查詢 return null; } Override protected void done() { loadStudentData(); // 回到界面線程刷新 } }.execute();注意 doInBackground 里不能碰任何 Swing 組件否則仍然有線程安全問(wèn)題。把查詢結(jié)果先存在類成員變量里done 方法里再讀取并填充 JTable。課程設(shè)計(jì)項(xiàng)目數(shù)據(jù)量小很多人不寫這一步也能跑但一旦老師錄入了上千條數(shù)據(jù)卡一次答辯印象分就低了。5.4 JTable 表格不顯示數(shù)據(jù)或表頭錯(cuò)位現(xiàn)象查詢返回了結(jié)果數(shù)據(jù)庫(kù)里也有數(shù)據(jù)但表格空蕩蕩或者數(shù)據(jù)出現(xiàn)但表頭還是默認(rèn)的 A、B、C。原因表格還沒(méi)有初始化 TableModel 時(shí)你就去 setRowCount 或 addRow摸了個(gè)空模型或者是強(qiáng)轉(zhuǎn) DefaultTableModel 失敗。另一個(gè)原因是 ResultSet 里的列名和表頭不映射你 getString(student_no) 里面名字寫錯(cuò)異常被 catch 吞掉導(dǎo)致界面毫無(wú)反饋。解決在窗體構(gòu)造方法里先把表格模型定死studentTable.setModel(new DefaultTableModel( new Object[]{ID, 學(xué)號(hào), 姓名, 專業(yè)}, 0 ));然后每次查詢都基于這個(gè)固定模型往里面加行。如果 catch 到 SQLException別只 e.printStackTrace加一個(gè) JOptionPane 把錯(cuò)誤信息彈出來(lái)否則你死活不知道數(shù)據(jù)為什么沒(méi)進(jìn)來(lái)。順帶說(shuō)一句ResultSet 里的列名是大小寫不敏感的但下劃線和大小寫風(fēng)格要和 SQL 里 select 出來(lái)的別名對(duì)齊最簡(jiǎn)單的方式是 select id, student_no 而不是 select *。5.5 打包后 NoClassDefFoundErrorjar 能運(yùn)行但不能碰 MySQL現(xiàn)象IDEA 里運(yùn)行一切正常但雙擊 jar 包報(bào)錯(cuò)NoClassDefFoundError 指向 com/mysql/cj/jdbc/Driver或者提示類路徑里找不到某個(gè)包。原因默認(rèn)的 maven-jar-plugin 只打包項(xiàng)目自己的類不包含任何第三方依賴。你的 IDE 運(yùn)行環(huán)境里有 mysql-connector-java但 jar 跑起來(lái)后就沒(méi)有這個(gè)依賴了。另一個(gè)可能是 MANIFEST.MF 里沒(méi)寫 Main-Class導(dǎo)致雙擊時(shí)提示無(wú)法加載主類。解決按第四章給 maven-shade-plugin 的配置在 pom.xml 里加上插件且指定 mainClass再執(zhí)行 mvn clean package。打包成功后用這個(gè)命令驗(yàn)證一下 jar 里的 MANIFEST 是否有主類java -jar target/your-project.jar如果還不行用 jar tf 查看是否能看到 com/mysql/cj 相關(guān) class??床坏骄褪?shade 配置沒(méi)生效檢查 executions 是否掛在 package 階段以及插件版本是否被成功解析。從這個(gè)坑往后我拿到任何 Maven Swing 項(xiàng)目都會(huì)先看一眼 pom 有沒(méi)有打包插件沒(méi)有就先補(bǔ)上再談別的。6. 答辯前這樣升級(jí)密碼加密、預(yù)編譯、連接池與發(fā)行包想要從“能跑”變成“能講”不用大改功能做對(duì)三個(gè)細(xì)節(jié)就夠了。第一個(gè)是密碼存儲(chǔ)。資源初始賬號(hào)里如果 password 還是明文 123456答辯時(shí)老師第一個(gè)問(wèn)題大概率是“密碼怎么防泄露”。改成哈希存儲(chǔ)登錄校驗(yàn)也同步改成哈希比對(duì)是很加分的改動(dòng)MessageDigest md MessageDigest.getInstance(SHA-256); byte[] digest md.digest(password.getBytes(StandardCharsets.UTF_8)); String hashed HexFormat.of().formatHex(digest);登錄時(shí)用相同邏輯對(duì)輸入做哈希再拿哈希值去查庫(kù)。如果資源里的登錄是直接 SELECT ... WHERE password?你可以先跑通再把它替換成哈希版本。要更嚴(yán)謹(jǐn)還可以加鹽但加鹽需要在庫(kù)里額外存一列課程設(shè)計(jì)做到哈希這步就足夠說(shuō)明你有安全意識(shí)了。第二個(gè)改動(dòng)是統(tǒng)一走 PreparedStatement。我見(jiàn)過(guò)不少源碼里用 Statement 字符串拼接寫查詢雖然能跑但屬于答辯現(xiàn)場(chǎng)的高危雷區(qū)。如果你在資源里發(fā)現(xiàn)這類寫法不用全部重寫把最核心的登錄和查詢改成預(yù)編譯然后準(zhǔn)備一句話“這里用占位符防止 SQL 注入對(duì)用戶輸入不做字符串拼接”。這句話在面試題里也常被問(wèn)到背下它比背一行代碼更值。第三個(gè)改動(dòng)是連接管理。很多簡(jiǎn)單項(xiàng)目每次查庫(kù)都 DriverManager.getConnection操作完了關(guān)閉。答辯時(shí)你可以主動(dòng)提連接池這個(gè)概念最低成本的演示是引入 HikariCPHikariConfig config new HikariConfig(); config.setJdbcUrl(URL); config.setUsername(USER); config.setPassword(PASSWORD); config.setMaximumPoolSize(10); HikariDataSource ds new HikariDataSource(config); Connection conn ds.getConnection();注意這需要 pom.xml 里加 HikariCP 依賴如果不想引入第三方庫(kù)也可以用 DBCP。關(guān)鍵是讓老師看到你理解“頻繁創(chuàng)建連接很浪費(fèi)”這件事。這三個(gè)改動(dòng)做完項(xiàng)目的代碼量不會(huì)增加多少但答辯能從“我做了個(gè)系統(tǒng)”變成“我考慮了安全、性能和擴(kuò)展性”。我做過(guò)最蠢的一件事是拿到一份課程設(shè)計(jì)源碼后連 MySQL 服務(wù)都沒(méi)啟動(dòng)就急著點(diǎn)運(yùn)行報(bào)錯(cuò)后以為是源碼壞了來(lái)回折騰了一小時(shí)。從那以后每次拿到源碼我都會(huì)強(qiáng)制走一遍建庫(kù) → 改連接 → 編譯 → 運(yùn)行的流程再開(kāi)始動(dòng)手改界面。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
白丝被操91| 精品人妻av区天天看片| h在线看免费版在线看| 人人操 欧美| 日韩丨制服丨中文|在线| 久久久精品国产亚洲伊人| 嫩呦国产一区二区三区AV| 国产农村妇女毛片精品久久| 国产极品久久久| 日本中文字幕在线视频 | 亚洲综合成人网| 国产一区二区免费福利片| wuyechaopeng| 日韩在线97| 亚洲超碰在线| 中文字幕五月婷婷免费| 欧洲黄色网| 91精品导航| 超碰97在线中文| 99.色网| 99精品久久久久久久婷婷蜜桃| 日本人妻伦在线中文字幕| 91模特在线观看| baiduhicn.com。| 色色色综合| 国产中文字幕曰本毛片| 日本一区二区三区免费观看| 国产视频第二页| 加勒比海成人视频网| 99亚亚热| 五月婷婷激情综合| 91天堂色男人的天堂| 日韩成人在线性爱视频| 精品无码久久久久久国产浪潮| 欧美色图 色综合图| 国产深喉| 久湿久久| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 色综合一区二区三区| 色婷婷日韩精品一区二区三区| 美女裸体麻豆天美蜜桃91| 亚洲色堂免费视频| 中日无幕一二三四区| 激情久久久| 免费a在线播放v| 国产网红精品| 欧美系列在线一区二区| 亚洲国产精品无码AV在线| 亚洲无码免费看| 国产成人拍国产亚洲精品| 诱惑网综合| 人妻出轨一区二区三区| 区日韩亚洲乱码av电影| 欧美一区二区三区大综合| 六月天婷婷| 婷婷久久久| 97色婷| 91动漫操逼视频| 国产三区免费在线观看| 国产成人综合在线播放| 日本精品无码三级网站| 日韩精品免费高清视频在线| 国产美女销魂在线观看不卡| 自拍偷拍亚洲熟女妇人精品| 国内偷自视频区视频综合 | www鬼畜国产男人的天堂| 97在线视频观看| 五月丁香色综合| 五月天色图影视| www.99视频| 欧美激情五月天| 久久东京国产精品视频| 亚洲操操| 私色综合网| 91大胆欧美| 厕所偷拍在线| 日韩精品人妻中文字有码在线| 九九九精品一区二区无码| 和协影院中文字幕三区| 国产熟女一区二区丰满| 2003天天干夜夜操| 免费视频观看60秒| 亚洲色91| 人人干人人操人人爱| 日本欧美一区二区三区视频麻豆| 国产一区在线观看无码AV| 国产精品点击进入在线影院| 国产成人bd在线观看| 成人乱码一区二区三少妇| 99久久久| 欧美页片| 亚洲中文sv| 国产91 丝袜在线播放| 男女性无套 免费九一| 玖玖爱在线视频免费观看| 日韩性爱免费观看视频| 婷婷深爱五月| 久久极品一区二区| 亚洲成人妻日韩在线| 操淫穴亚洲五月丁香| 超碰精品人妻狠狠干| 久久久久国色αv免费观看| 久久久蜜桃臀无码视频| 黄色一区二区秘书性感| 五月婷在线| 中文字幕视频2区| 人妻熟女一区二区三区在线| 中日韩久久久免费看| 青草一区二区| 日韩熟女操逼| 亚洲乱熟女一区二区三区大香蕉| 亚州操操穴网| 亚洲亚洲亚洲天堂天堂| 国产精品福利视频| 三级AV入口| 欧美疯狂做爰xxxx| www.操| 日韩淫色网| AV女资源| 日韩精品人妻一| 色婷婷久久| 青青草精玖玖69精品| 国产欧洲精品亚洲午夜拍精品| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 天天日天天干少妇日| 欧美传媒| 日韩中文字幕二区| 久久夜精品一区二区三区| 亚洲色电影在线| 极品综合| 深夜操逼网| 夜夜爽爽夜夜精品视频| 国产午夜在线观看| 久久亚洲精品成人av| 一个人在线看的黄色电影网站| 美熟女逼导航AV操逼| 久久久久久久97| 99这里只有精品国产| 高清国产av无码| 狠狠 91| 蜜臀一二三| 国产强奸乱伦第1页| 日日摸夜夜夜夜爽| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 亚洲无码久久久久久久| 和协无码影院| 一区二区三区看视频| 免费一级特黄特色大片在线观看看 | 成人免费福利网站国产| 欧美一二三区四五区| 综合色久欲| 日本人妻中文字幕| 一色网男人的天堂| 日韩精品 欧美激情| 国产免费操逼| 丝袜天堂| 亚洲无线观看久久| 五月丁香综合啪啪| 9997se| 岛国在线国产| 熟妇最新先锋一二三区| wuyechaopeng| 色色香蕉| 人妻夜夜爽天天爽麻豆三区网站| 91操人| 黄色香蕉视频网站一区| 色色色综合网| yazhouzaixian| 玖草在线视频| 中文字幕精品一区二区精品| 午夜传煤十二区精品| caoni国产亚洲av| 大香蕉综合久久| 日韩欧美日韩| 日本特黄f c2| 午夜九九九九九九| 欧美色棕合| 91青青| 日韩精品人妻一| 97日视频| 人妻偷拍一区二区三区| 校园春色欧美色图| 精品亚洲| 啊嗯好大视频在线观看| 亚洲欧美色图| 亚洲一区二区三区麻豆传媒| 欧美性第一页| 欧美综合骚| 伊人网高清| 亚洲情色中文字幕一区| 18禁久久| 亚洲最大网站av| 果冻传媒A片一二三区| 一本大道不卡一二三区| 国产盗摄美女如厕大神作品在线观看| 青青青在线高清视频在线一二三四区| 久久香蕉综合一本到3atv| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 综合久久婷婷| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 日韩丰满熟妇| 亚洲s色图| 国际精品久久久| 欧美日本国产日韩激情视频| 激情婷婷黑人91| 亚洲午夜福利视频| 一二三区视频在线观看| 色色色网站| 视频在线观看青青99国产| 亚洲欧美日韩精品久久久一区二区 | 国产精品网址| 亚洲精品一区二区三区新线路| 国产内射爽爽大片| 色五月69夫妻| 色情乱伦AV| 91热色| 婷婷午夜| 激情小说亚洲| 97精品视频免费| 亚洲精品一区二区精品| 久久骚| 看日韩操逼| 精品少妇高潮久久| 麻豆视频test| 欧美性爱18观看| 亚洲欧美一区二区不卡视频播放| 无码少妇精品一区二区60岁老人| 久久久精品| 久久久久久久久久久人妻| 国产一区二区免费福利片| 久久精品老司| 人妻少妇av在线观看| 老熟乱一区二区三区四区| 丁香五月天视频| 国产午夜在线观看| 蜜臀久久久国产| 亚洲AV无码乱码在线观看性色| 青青草色AV| 91色艳| 亚洲欧美国产中文视频| 亚洲九九视频| 天天操av懂色| 黄片免费久久久久久久| 99久在线精品99re8蜜桃| 五月天黄色av| 国产精品爽爽v| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 69少妇一区二区| 啊啊啊啊啊舒服| www.狠狠| 高清无码在线播放网站| 超碰久草| 蜜臀AV成人精品蜜臀AV久久| 国产视频一区二区免费| 亚洲影院成人| 精品一区99999| 日韩三级久久久| 成人性爱av.com| 91国产丝袜白虎| 国产a级精品| 亚洲色婷婷综合久久一区二区三区| sss视频华人在线| 欧美性爱日韩性爱| 2017亚洲天堂| 亚洲色图自拍| 97天天综合网| 国产久久久久久久久一区二区 | 嗯嗯啊好大| 嗯啊不要啊在线| 都市久久精品激情亚洲| 超碰色97| 综合性视频99| 欧美午夜色妇色鬼| 91丨九色丨国产打屁股| 日韩欧美aⅴ综合网站发布| 91爱剪切久久| 亚洲欧美综合网站| 精品十三区| 啊啊啊啊嗯嗯嗯用力好爽 | 欧美丝袜激情| 99精彩视频| 午夜福利一区二区影院| 91视频综合网| 亚洲91射| 伦在线97| JULIA人妻风俗店中出电影| 久久久com| 国产亚洲精品久久久久小| 欧美亚洲首页| 亚洲天堂电影网| 日韩精品人妻系列无码天堂| 九九色色| 欧美特大黄一级片片免费| 日韩欧美福利视频看看| 国产久久久| 99最新日韩偷拍视频| 狠狠夜色午夜久久综合在线| 日韩免费人妻色情网站| 综合熟女| 在线人人人人人人精品超| 在线观看不卡一区二区三区| 中文一区二区三区影院| 综合一区二区影视| 日韩人妻精品中文字幕| 久妇网| 男人的天堂2019AV| 中文字幕日本久久| 不卡啪啪视频| 伊人色综合网电影| 欧亚免费视频| 爽 好舒服 无码刺激久久| 奇米四色影视777久久久| 97免费在线| 日韩97在线| 亚洲在线A| 欧美体内射精| 青青青草原| caopeng97人妻| 久久久一级| 你懂得91| 伊人久久婷婷| 啊v视频在线观看| 多乙久久久久久| 成 人片 黄色大片| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 日本 免费 一区二区三区 久久香蕉| 爱爱动态120秒| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 无码自拍SM| 91精品啪在线观看国产城中村| 黄片色区软件| 一牛影视成人片免费| 国产强奸乱伦第1页| 国产传媒一区二区三区| 丰满人妻-区二区三区| 淫纸中9区| 亚洲天堂男| 校园春色 亚洲| 久操免费视频| 色约约一区=区三区| 超碰久久.com| 亚洲色图欧美色18直播在线| 欧美东京热青青草| 久久春色| 欧洲性爱无码区| 蜜臀久久99精品久久久电影| 国产一区自拍欧美日韩| 啪啪啪东京| ..日韩av毛片精品久久久| 欧美亚洲第一页| 欧美一级久久久久久久大片动画| 在线a v| 日韩乱伦影音先锋| 99啪啪视频| 东京热男人的天堂网| 国产丝袜视频| 综合日韩激情另类图片| 天天综合网1| 啊啊啊啊好疼视频| 大香交| 国产馆| 黄总AV色图| 97日视频| 97碰碰日本乱偷人妻中文的| 死我十八禁| 女人香蕉久久毛毛片精品| 日韩精品一二三| 麻豆久久精品亚洲精品88| av毛片aaaaa免费看| 国产精品久久久久无码A√| 亚洲欧美在线观看免费| 五月天啪啪| 国产日本熟女顶级一区二区三区视频| 天天天天做夜夜夜夜做| 九九九九九九免费视频| 中文字幕一区二区视频在线观看| 日韩中文字幕国产| 亚洲精品美女久久久久久久久| 99久久婷婷国产综合精品草原| 四月丁香婷婷| 1000午夜黄色| 2020天天色综合| 97在线观| 99久久久无码国产精品性啊聊| 日韩免费看在线黄色片| 免费啪啪啪网站18岁| 欧日韩不卡视.频| 福利风月五月天影院| 国产乱码久久久久久| 天天日天天干天天摸天天操| 欧美成人A√在线一区二区| 亚洲中文国际强奸字幕| 久久国产精品一级二级三级| 97视频900| 中韩中文字幕在线观看| 亚洲一区二区在线观看91| 日本东京热加勒比久久| 97最新在线播放视频| 国产suv精品一区二区四区999| 久久超碰、| 91老妇女| 国产91影院| 狠狠色噜噜狠狠狠狠狠色综合久久 | 啊啊啊啊操死我| 久久精品国内Av熟女高清| 黄色免费网页无码| 男人的天堂成人的社区| 中文字幕无码不卡啪啪| 亚洲精品乱码线路中文字幕 | 国产一级高清免费观看| 国产色呦呦| 精品免费1| 色香阁在线| 豆1无夜无码| 日韩在线观看三级电影| 亚洲av无线观看| 69AV女优男人的天堂| 99re6在线视频精品免费完整版安卓版| 亚洲无992tv| 久久肏大逼| 欧美一二在线| 精品人妻av区天天看片| 在线精品福利免费播放| 亚洲一区二区三区麻豆传媒| 久久久久99精品成人片蜜臀| 亚洲中文国际强奸字幕| 国产农村妇女精品一二区| 深夜激情| 日本高清有码网址视频| 青苹果影院男人的天堂| 色噜噜国产精品视频一区二区| 性在久久久久久| 97香蕉人人乳| 92一区二区| 色婷亚洲五月在线观看| 黄色十八禁网站| 91超碰在线观看| 自怕偷自怕亚洲精品| 亚洲中文字幕av| 久久一本大香蕉 | 东京热天堂网| 日韩中文欧美| 伊人嫩草| 亚洲欧美在线观看2021| 97国产色图 | 国产精品青青草| 欧美宗合色| 国内精品伊人久久久久影院会| 97在线青| 性爱综合一区二区| 久久国内| 亚洲性图91| 国产精品亚洲无码| 大香蕉免| 日本人妻丰满熟妇久久久久久| 九九av| 欧美自拍网| 国产成人免费观看在线视频 | 亚欧毛片基地国产毛片基地| 18精品一区| 欧美97爱| 大香蕉碰碰| 男人天堂资源| 开心五月天激情网| 青青久久艹| 久操热| 这里都是精品| 在线观看亚洲专区| 久久华人网| 无码视频黄色网战| 亚州欧美综合| 国产在线视视频有精品| 久久熟女嫩草成人片免费| 91久久青青草原精品| 俞拍久久国应视频| 操高情无码| 射丝袜大香蕉| 男人a天堂手机在线版| 裸体美女久久久| 欧美国产精品| 亚洲精品蜜桃久久久久久久| 密乳AV免费观看| 亚av顶级裸体一区二区三区四区五区 | 中文字幕一区二区三区蜜臀| 亚洲成人黄色在线观看| 青青草视频久久久久| 亚洲码在线中文在线观看| 日本精品人妻少妇一区二区| 国产视频一区二区三区在线免费观看| AV老汉| 日韩国产不卡在线视频| 九九九精品一区二区无码| 操逼1区| 亚洲91综合| 激情五月天色色网| 人人澡综合涩| 强奸乱伦中文字幕AV| 超碰欧美97资源| 色99视频| 12一15性XXXX粉嫩国产| 欧洲精品在线播放| 亚洲αv一区二区三区| 人人摸人人舔一区二区| 99热精品在线观看| 日韩肏逼视频| 91精品婷婷国产综合久久竹菊| 日韩字幕一区| 91久久久老司机| 亚洲黄网在哪免费看| 中韩中文字幕在线观看| 区一在线观看| 超碰人人操97碰| 天天综合麻豆视频| 欧美综合自拍成人自拍第二十页| 肏逼视频日本| 久久综合久色欧美综合狠狠| 成人av免费观看| 综合久久97| 久草色悠悠在线视频| 1禁看欧美黄片免费看| 伊人性在线视频| 超碰激情808| www..com操老师| 久久久涩| 五月天伊人| 囯产操逼片| 狠狠干91| www.男人天堂| 日本三级韩三级99久久| 在线综合 亚洲 欧美中文字幕| 超碰偷拍| 少妇99成人麻豆| h4610国产人妻| 67914在线兔费成人视频| 国产蜜臀精品一区免费尤物| 天天做天天爱夜夜爽毛片试看| 任你干在线视频| 夜夜一区二区| 手机在线中文字幕国产 | 国产小视频91| 久久产精品一区二区三区电影| 色诱avtt| 久久9视频| 91精品微拍福利| 久久中文字幕人妻熟av女蜜柚| 性感女人网页在线观看视频| 91爆操视频| 人人摸人人入| 久草老司机| 亚洲国产一区二区三区在线 | 欧成人精品一区二区三区| 精品一区二区三区四区女| 午夜一区| 隔壁邻居波多野结衣中文字幕| 日韩图色| 91在线/欧洲| 欧美极品少妇交| aⅴ日韩成人电影av在线免费看av大全 | 中美日韩毛片| 99色热| 2019久久久久久久久福利| 亚洲AV无码乱码| 亚洲AV在线资源| 区一二区日韩亚洲乱码av电影| 亚洲欧美日韩综合在线尤物| 日本免费中文字幕在线| 天天综合-91入口| 玖玖综合视频| 久久精品人妻一区二区| 东北夫妻性偷拍| 99久久9| 国产精品69人妻无码久久久| 亚洲黄片免费在线播放| 蜜臀久久久99久久久久| 91热色| 人妻少妇三级| 国产老熟女| 国产1769在线| 亚洲欧洲综合av在线| 91春色| 日本布卡一区二三区| 91伊人久久在线| 欧美丝袜激情| 精品一区二区三区最新| 能看的AV| 婷婷伊人綜合中文字幕| 国产综合操逼高清| 啪啪资源网| 正在播放国产精品一区| 欧美人黑A片无码免视费| 4虎在线观看| 青久久| 欧美国产操逼| 天天综合网~91入口| 欧美丝袜激情| 天天综合影院91| 亚 欧 美 综合| 99∨VTV| 精品国产精品一区二区| 人妻精品一区二区在线| 精品性爱一区二区| 97人妻免费中文字幕| 变态乱伦伪娘灌肠一区二区| 中字幕人妻一区二区三区| J?P?NESEHD熟女熟妇伦| 999综合网| 91成人18| 亚洲AV无码乱码| 老熟女网站| 人妻少妇精品久久久久久久| 国产路线专区| 婷婷久月| 九九碰九九爱97超碰| 在线综合网| 天天综合欧美| 亚洲国产精品久久AV| 成人一二| 国产一区二区成人av在线播放| 9色国产精品一区粉嫩| 欧美亚洲| 秋霞操逼片| 国产精品第一区第一页| 日韩精品一区二区高清 | 久久精品免费| 91麻豆天美传媒HD| 欧亚第一综合网| 北条麻妃性愛视频| 欧美综合 站| 人妻少妇久久中文| 色婷婷日韩精品一区二区三区| 天天操熟妇| 九九九999久久久网站| 久久香蕉国产线看观看亚洲女人| 91丝袜美女视频| 国产 日韩 欧美一区| 性色AV网站| 欧美性生活免费网| 91快色色色色色| 97人人模人人爽人人| 日韩精品视频在线观看一卡二卡| 亚洲九九夜夜| http://qxhbdz.com| 99re不伦| 国产视频大全| 骚日日av| 国产精品国产精品国产| 欧洲亚洲国产综合在线| 精品偷拍13p欧美dodk视频| 国内自拍 日韩激情 99| 天天插天天插| 69精品人人人人| 裸体美女久久久| 欧成人在线| 国产精品电影大全| 正在播放国产精品一区| 91干熟女| 久久久com| 97超碰在线资源网站| 伊人网在线点播| 亚洲国产精品成人久久蜜臀| 青草草免费网站av| 99热这里只有精品地址| 极品丝袜无码| 情侣操 逼视频99| 91欧美www| 51国产午夜精品视频| av在线免费一区二区| 久久99热这里只频精品6学生| 亚洲另类久操网| 狠狠做深爱婷婷久久二区| 国产美女自拍视频| 先锋影音av先锋一区| 国产成人在线观看综合| 精品国产嫩穴视频| 欧美日本不卡| 97在线免费观看视频| 搡老女人老妇女AAA一VU麻豆 | 又粗又长又大国产不卡| 一区操逼日比视频| 日本在线不卡123| 97爱b| 欧美激情精品| 午夜男人av| 中文高清一区二区的| 久久6热精品99视频| 91第一页| 黄片免费久久久久久久| 日韩在线76| 天天热精品| 日韩成人无码| 天天草天天干天天日| 亚洲综合888| 天天干夜夜| 亚洲av无码国产精品字幕| 日本综合久久| 精久久久91| 九九九九精| 2019天天干天天操| 国产suv精品一区二区四区999| 黄色av播放免不| 欧州一区二区三区四区| 亚洲本色精品一区二区久久| 久久鲁干| 亚洲天堂人人妻| 蜜臀久久99精品久久久久久无删减 | 国产熟女无套内射| 亚洲少妇综合在线播放| 91肏屄网| 亚洲交性| 韩三级a视频在线观看| 色综合五月天| 伊人9| 久操操AV电影| 麻豆蜜桃视频在线观看| 啪啪啪男女亚洲中文字幕99| 精品午夜福利国产一区二区在线观看| www.欧精品| 超碰 欧美| 国产性爱乱伦AV| 免费人人搞97| 亚洲天堂男人天堂网| 伊人五月天| 好屌色综合| 涩综合导航| 日韩99神马视频播放片在线播放| 日韩成人人妻网站| 岛国片国产成人亚洲播放| julia在线观看久久| 精品传媒在线一区| 国产久久久久久久久一区二区| 国产美女激情| 免费成人在线观看91| 丰满人妻一区二区三区免费,| 成人精品水蜜桃久久久久久久| 精品视频免费在线一区| 色 婷97| 亚洲欧美另类激情小说| 五月丁香激情综合| 青草伊人久久| 日韩AV无码中文一区二区| 久久久久ab| 天天日天天干天天色| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 日韩欧美综合激情| 欧美精品三区| 91社操逼| 久久夜夜夜| 乱伦a片视频| 91欧美长吊| 91一区二区三区蜜桃| 自拍盗摄一区| 亚洲国产一级黄色视频| 欧美日韩人人精品| 国产精品剧情| 欧美亚性天堂| 日韩欧美加勒比| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 91日韩国产欧美亚洲另类精盘州至城都 | 久艹99| 91在线精品| 日韩无码AB| 中国乱伦一区二区| 操老熟女AV| 夜色AV无码手机在线影院| A久久| 精品对白久久不卡| 久久男人的天堂国产| 久草午夜| 五月丁香色婷婷| 97天天操| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 91c色| 吊色| 亚洲五月婷| 亚洲高清91| 成人婷婷丁香| 亚洲一区二区三区春色| 加勒比综合九九99视频在线播放| 无码人妻精品一区二区三区99不卡| 日韩9999| 亚洲国产精品99久久久| 330dv亚洲成年视频网| 日韩一性一交一A片俄罗斯| 婷婷九月国产| 97在线精品| 熟妇熟女一区二区三区| 六月婷激情福利天堂69| 操人人| 2017超碰| 日本污ww视频网站| 天美传媒AV在线播放| 久久久久久久久久久久久9999| 国产久久免费精品视频| 好爽免费视频,| 亚洲精品中文字幕一区在线视频| 好爽要喷了| 久久99精品视频| 青青久日| 精品一区二区三区蜜桃臀赵总 | 欧美天天弄| 蜜臀99999| 92人人操人人| 91中文字幕制服丝袜免费视频| 日本亚洲vr欧美不卡高清专区| 国产亚洲性生活视频播放| 激情啪啪视频| 五月丁香激情综合| 国产乱伦视频污| 18禁久极品美女久久哦哟呀!| 色香色欲天天综合网天天来吧| 欧美色九九| 和协无码影院| 色综合久久88色综合久久天天| 91无码人妻精品一区二区三区蜜桃| 精品人人| 精品久久无码午夜福利| 国产吹潮女在线观看| 人妻加勒比东京热| 中文字幕高清精品一区| 亚洲清纯综合| 亚洲一区二区三区麻豆传媒| 欧美亚洲手机在线| 亚洲欧洲无码97久久精品| 探花激情视频| 人人爱人人乐人人操| 欧美体内射精| 久久久久久久久久久久久9999| 一类无码操逼视频| 熟妇女伦乱视频| 亚洲天堂人妻一区二区| 国产精品久久久久亚洲av| 特色a在线上| 亚洲诱惑| 天天影视网综合少妇| 久久毛卡| 亚洲色宗合| 91碰碰| 刺激性视频黄页| 屁屁影院一区二区三区国产 | 乱精品一区字幕二区| 天天日天天搞天天干| 果冻传媒A片麻豆熟妇人妻| 丁香五月天久久精品视频一区二区三区| 美女黄频a美女大全免费皮| 黄色免费网| 超碰97人妻自拍| 久久蜜色情在线视频xxx免费观看| 婷婷99| 亚洲国产精品成人综合| 超碰导航97| 日本人妻天堂网站在线播放| av凤凰久久久| 日本熟女免费視颖| 蜜臀99久久精品久久久久| 亚拍在线| 黑人中出21连凳花野真衣| 激情久久久| 少妇啪啪自拍| 秋霞怕怕片| 亚洲欧美国产精品久久久久久久| 成人女人国产| 极品色社| 91丨九色丨国产打屁股| 人人操人人插人人摸人人干| 91天天| 欧美偷拍| 欧美人妻另类在线| 啊啊啊啊啊在线视频| 天美麻豆精品视频99| 黄片直播三级黄片两女一男| 中文字幕奈奈美被公侵犯| 亚洲美女av无码| 加勒比无码毛片| 不卡一区视频| 97视频7| 亚洲情色电影网| 婷婷在线视频| 自拍大香蕉乱插| 亚洲精品三区在线观看| 自拍偷拍第26| 看全色黄大色大片免费视频| 校园春色 亚洲| 中文无线日韩一区| 成熟熟女国产精品一区二区| 日韩 人妻 精品| 色999人与兽| 长长久久88视频| 3p国产色噜噜一区| 人人操,操人人| 国产精品视频麻豆入口| 久久久性| a片自拍直播视频| 91性感在线| 噜噜噜亚洲精| 蜜臀va69| yazhouzaixian| 免费超碰97久久| 蘋果手機免費看成人Av| 好看的91视频| 岛国小电影| 无码一区二区三区四区五区六区七区八区九区十区视频 | 18禁中文字幕| 无码区蜜乳| 爱妃国产亚洲视频中文字幕| 试看日韩黄片| 青娱乐国产剧情av一区| 人妻欧美| 蜜臀99久久精品久久久懂爱| 91美女小视频| 欧美性五月| 日韩干B| 深夜激情 | 另类欧美色| 91亚洲人| 男人天堂新在线| 国产精品网址| 欧美狠狠| 9999久久久| 国产真实子伦对白| 国产亚洲福利第一页丝袜| 97 色综合| 国产精品久久久久久久久久久久| 一起草在线视频| 怡红院久久老司机| 91性网| 极品色| 澳门黄片一香蕉视频| 内射小黄片| 天天操夜夜操狠很操| av日韩国产一区二区| 日日操丁香五月天| 在线v中文字幕一区二区三区 | 久久伊人影院| 天天射日日干| 性综合网| ,成人免费啪啪视频| 欧美一区二区三区入口| 成人a大片在线观看| 人妻精品一区二区在线| 综合五月婷婷| 男人天堂一区二区| 91丝袜在线观看视频在线观看| 成人A片男人的天堂| 日本在线一二| 日韩精品高清资源在线| 嗯嗯啊好大| 日本五区不卡| 理论久久婷婷网8| 91麻豆天美| 欧美一区二区三区四区综合| 一级片在线观看高清无码| 人妻系列无码专区中文有码| 久久婷五月天| 中文字幕日韩国产传媒欧美精品| 绯色AV粉色AV蜜臀AV| 综合九九| 国产AV人人夜夜澡人人爽麻豆| 偷拍导航视频网站| 国产精品美女视频诱惑| 中文字幕精品一区欧美| 美女国产一区二区久久| 九九这里只有精品| 欧美内射少妇| 亚洲日韩东京热一区| 麻豆熟妇乱妇熟色A片在线看| 超碰成人人人爽人人爽| 影音先锋日本一区二区| 人人干人人搞人人摸| 久久久精品国产亚洲伊人| 亚洲中文电影| 国产熟码AV| 国产一级内射高清视频 | 中日无幕一二三四区| 中文字幕精品久久久久人妻红杏ⅰ| 清纯唯美综合亚洲| 日日躁夜夜躁狠狠躁超爽| 成人无遮挡毛片免费看| 亚洲AV无码国产成人| 久久久久密| 偷拍五区| 久久精品一区二区| 草草影院最新网址| 色色色欧美| 日日A∨| 日日97| 老外又粗又长一晚做五次| 亚洲五码一区二区三区| 日韩美一区| 精彩久久中文| 久久久久久久| 久久一区二区高清免费| 首页亚洲国产高跟丝袜诱惑视频| 精彩视频日韩| 国产欧洲精品亚洲午夜拍精品| 蜜臀中文字幕| 在线强奷到舒服的无码视频| 亚洲国男人的天堂| 色偷偷人人玩人人舔人人操人人摸人人爽| 97 色综合| 免费福利视频中文字幕| julia高潮后不停追击中出| 精品人妻一区春色| 色悠久| 日逼国产| 午夜性| 日本熟妇人妻一区二区三区| AAAA欧美日韩| www超碰| 男人的天堂2000| 天堂无码| 日韩人妻一区二区精品| 97露脸精品丝袜| 超碰美国| 国产大陆天天艹| 四虎永久在线精品免费网址| 久草毛片| 久久久久亚洲AV无码专区少妇| 中文字幕精品一区二区精品| 91欧美巨乳| 老子午夜伦不卡影院| 日本超碰在线国产一区| 中文字幕一区二区三四五区日日骚| 久久久久久久强迫| 狠狠操天天干| 欧美传媒一区| 思思视频免费看网站| 亚洲中文字幕噜噜噜久久久| 日本 情色 1区2区3区| av爱爱爱| 亚洲精品久| 加勒比综合88| 日韩国产欧美伦理在线| 免费的av网| 91性感在线| 久99久视频| 久久精品99久久久久久| 老司机深夜18禁污污网站| 1区2区3区在线视频| 精品97久久| 欧美日韩香蕉| 国产精品久久久九九九| 国产亚洲深夜激情| 精品一区二区三区最新| 亚洲影视高清第一页| 伊人久久综合精品欧美| 久久久穴999| 国产粉嫩蜜臀av一区二区三区| 大香蕉av在线| 久久精品99| 亚洲一区二区三区播放在线| 色一射色一射| 久操视频在线观看| 日日日日日| www.91视频网| av国产无码| 91黄射| 福利色色| 亚洲AV不卡在线观看| 国产一区二区精品久久99| 超碰夫妻97| 久久精品日韩| 欧美 日韩 另类 亚洲| 久久久性| 91在线视频免费中出| 韩国一级做a久久久久| 久久精品人体| 色妺妺AⅤ| 91 刺激在线| 久夜视频| 国模限制级电影| …亚洲黄色厕厕女女在线播…| 天天日天天舔天天喷天天射| 欧美人妻制服| 久久AV无码网址| 欧美与日韩97| 色综合久久88色综合久久天天| 91AV天美在线视频| heyZO天然素人无码AⅤ专区| 日韩传媒在线| 巨爆乳一区二区爆乳区| 久久一本大香蕉 | 你懂的在线观看区国产| 熟妇最新先锋一二三区| 亚洲av成人精品一区| 二区熟妇韩日| 91丨九色丨国产丨人妻在线| 久久综合精品一区二区三区| 国产在线观看91精品一区| 天操老女人| 亚洲第2页| 日本道日本道中文字幕日本道最新日本道在线观看 | 黄片com.| 97爱啪| 婷婷综合五月| 久久中出| 884t在线| 亚洲乱伦图片视频| 51一区二区三区| 丁香五月激情综合| 人人操人人摸人人骑| 亚洲综合影视| 人人看欧美性爱| 国产中文字幕在线观看| 婷婷五月天小说| 香蕉99秘 一区精品蜜桃臀| 久久精品欧美一区蜜桃| 亚洲AV成人精品网站在AV| 国产美女激情| 国产18精品亚洲精品| 9I1性色影院| 色女女女导航| 国产亚洲精品久久久久小| 爱妃国产亚洲视频中文字幕| 人妻激情偷乱视三区频一区二区| 亚洲精品九九九九九九| 日本久久久久久久久| 熟妇综合一区二区三区| 国产午夜视频| 精品久久久久久中文字幕三区| 99久热精品99re6热| 91精品啪在线观看国产城中村| 综合激情一一91| 激情九月婷婷| 国产成人亚洲精品无| 欧美大片天天看| 精品婷婷| 国产精品不卡av免费在线观看| 少妇极品熟妇人妻无码| 国产欧美亚洲精品a第2页| 射综合网| 欧美78| 91精品丝袜在线观看| 国产精品美女视频诱惑| 欧美一区二区三区黄色影视| 99久在线精品99re8热| 東南亚性呦成人伦理资源在线视频| 亚洲男人的天堂一区二区| 久久亚洲AV无码专区国产精品| 91综合网在线| 大香蕉综合久久| 色官网在线| 青娱乐淫乱1314| 后入式999| 啪啪视频mP4| 欧美性爱日韩性爱| 九九九九九精品视频| 性老妇一区二区三区| 色婷婷香蕉| 欧美v亚洲v综合v国产v妖精| 亚洲诱惑天堂 | 五月婷婷丁香| 精品成人亚洲午夜电影| 久久久久国色αv免费观看| 99在线观看无大码| 亚洲aV无码成人在线观看| 成人性爱免费播放| 亚洲天天天| 人妻熟女一区二区三区在线| 日本99视频| 大学生口爆吞精|