




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
JAVA語言程序設計10.1數據庫連接方式10.2常用接口類的使用方法10.3反射的使用10.4數據庫編程案例本章小結第十章目錄教學目標:數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫。在當今信息技術迅速發展的時代,數據庫在應用程序中起著非常重要的作用。大型應用程序開發中,數據庫開發是必不可少的技術。本章將介紹JAVA應用程序和關系數據庫連接的JDBC技術,并結合實例來說明JAVA應用程序中的數據庫連接方法,將重點探討數據庫操作相關的JAVA類的應用方法。數據庫保存著用戶個人隱私數據,使用數據庫時應遵守從業者的職業道德規范,避免主觀泄露數據庫中的信息,積極構建健康、安全的數據庫系統。教學重點:了解JDBC技術。熟悉數據庫驅動程序的分類。掌握JDBC訪問數據庫的兩種常用方法。第十章10.1.1JDBC的介紹JDBC是Java應用程序與數據庫的溝通橋梁,它提供了訪問關系型數據庫的標準接口。10.1數據庫連接方式Java應用程序
JDBC驅動管理
JDBCAPIJDBCManagerJDBCDriverAPIDataBase數據庫DriverADriverBDriverD不同類型的驅動程序JDBC連接數據庫示意圖……JAVA的應用程序:應用程序包括JSP程序、JAVAApplication程序、JAVAApplet小程序等等。JDBCAPI:完成加載驅動程序、連接數據庫、對數據庫進行處理和返回結果的功能。JDBCManager:將JDBCAPI的調用轉換成JDBCDriverAPI的調用,它是由SUN公司提供的。JDBCDriverAPI:針對不同數據庫驅動程序開發商的接口,開發商根據自己的數據庫實現這些接口。不同的Driver:由各個數據庫管理系統開發商編寫。JDBC要與不同的數據庫建立連接,必須獲取連接數據庫的驅動程序。10.1.1JDBC的介紹使用JDBC步驟1.裝載數據庫的JDBC驅動程序。2.與數據庫建立連接。3.將SQL語句傳遞到數據庫中,執行操作,返回得到的結果。4.關閉數據庫連接。1.JDBC-ODBC橋JDBC-ODBC橋又稱JDBC-ODBC橋驅動。JDBC-ODBC橋驅動是SUN公司開發的一種技術,將JDBC的調用轉換成對開放數據庫連接ODBC
的調用,起到了橋梁連接的作用。使用這種驅動在進行數據庫連接時,需要在操作系統中創建某一數據庫管理系統的ODBC數據源,這樣就可以在Java/JSP程序中訪問數據庫了。這種技術在JDK中就已經提供了,因此不需要額外安裝程序,獨立于具體數據庫。10.1.2數據庫驅動程序的分類本地API驅動程序是將JDBC的調用轉換成執行數據庫開發商所提供的API來訪問數據庫。這種方法和具體的數據庫有很大的關系,采用不同的數據庫,驅動程序的名稱也就不同。因此,該方法不獨立于數據庫,后面會給出各種數據庫的驅動程序的名稱。2.本地API驅動程序本地協議驅動程序將JDBC的調用轉換為特定數據庫所使用的網絡協議,這樣允許客戶端直接調用數據庫服務器。但由于許多這樣的協議都是專用的,所以需要在客戶端與數據庫之間安裝中介軟件,讓客戶端的請求通過此中介軟件轉換成數據庫能夠接受處理的信息。3.本地協議驅動程序網絡協議的完全JAVA驅動程序將JDBC的調用轉換為獨立于特定數據庫的網絡協議。客戶端不需要安裝任何中介軟件,而是通過一個網絡API,使用套接字來調用服務器上的中間件程序,服務器再將請求轉換為具體的API調用;執行結果也能直接從服務器取回。目前,社會上廣泛使用的是前兩種技術,本章將詳細介紹這兩種技術的具體應用。4.網絡協議的完全Java驅動程序優點是提供了數據庫訪問的通用平臺。缺點是應用程序依賴于ODBC,移植性差。JDBC-ODBC橋訪問數據庫需要完成三個步驟:①創建ODBC數據源。②加載JDBC-ODBC橋驅動。③應用程序和ODBC數據源建立連接。10.1.3JDBC-ODBC橋連接數據庫連接過程舉例數據庫Student,包含四張數據庫表:學生登錄表StudentLog學生信息表StudentInfo學生成績表StudentScore教師登錄表TeacherLog學生信息表StudentInfo學生登錄表StudentLog學生成績表StudentScore教師登錄表TeacherLog控制面板——管理工具——ODBC數據源1.創建ODBC數據源1.創建ODBC數據源1.創建ODBC數據源1.創建ODBC數據源1.創建ODBC數據源1.創建ODBC數據源1.創建ODBC數據源1.創建ODBC數據源1.創建ODBC數據源1.創建ODBC數據源1.創建ODBC數據源在ODBCC數據源配置成功后,就可以在連接數據庫的文件中加載
JDBC-ODBC橋驅動。Class是java.lang.*包中的一個類,該類調用它的靜態方法forName()就可以建立
JDBC-ODBC橋連接,標準格式如下:try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundExceptione){System.out.print(e.toString());}因為在加載驅動時可能會出現異常情況,所以此處需要用異常處理機制捕獲異常。2.加載
JDBC-ODBC橋驅動(1)連接數據庫Stringurl="jdbc:odbc:mydata";Stringusername="sa";Stringpwd="111111";Connectioncon;con=DriverManager.getConnection(dbconn,username,pwd);3.應用程序和數據庫建立連接(2)聲明并創建statement接口的對象
Statementstat;stat=con.createStatement();(3)發送SQL語句并處理查詢結果
ResultSetrs;rs=stat.executeQuery("select*fromStudentInfo");
(4)關閉數據庫連接
con.close();3.應用程序和數據庫建立連接importjava.sql.*;//導入數據庫包;publicclassExample10_1{ publicstaticvoidmain(Stringargs[]){ Connectioncon=null; Statementstat=null;//聲明對象;
ResultSetrs=null; Stringuser="sa";//數據庫用戶名;
Stringpwd="111111";//數據庫連接密碼;
Stringurl="jdbc:odbc:mydata";//連接數據源;Stringsql="select*fromStudentInfowhereclass='120421'";try{ //加載驅動Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");con=DriverManager.getConnection(url,user,pwd);【例10-1】用JDBC-ODBC橋的方式連接SQLServer數據庫Student,取出學生信息表StudentInfo中“120421”班的所有學生并打印stat=con.createStatement();//建立數據庫連接;rs=stat.executeQuery(sql); //傳遞SQL語句; while(rs.next()){//需要捕獲異常;
System.out.print("學號:"+rs.getString("stuid")+""); System.out.println("姓名:"+rs.getString("name"));} }catch(Exceptione1){ e1.printStackTrace();}finally{ try{con.close();}//關閉數據庫連接;catch(SQLExceptione2){e2.printStackTrace();}}}}【例10-1】用JDBC-ODBC橋的方式連接SQLServer數據庫Student,取出學生信息表StudentInfo中“120421”班的所有學生并打印【例10-1】用JDBC-ODBC橋的方式連接SQLServer數據庫Student,取出學生信息表StudentInfo中“120421”班的所有學生并打印優點是可移植性好,不依賴于本機配置。缺點是需要在加載與數據庫類型相關的特定驅動程序。需要完成三個步驟:①從網上下載特定的驅動程序。②加載本地API驅動。③應用程序和數據庫建立連接。10.1.4使用本地API驅動程序1.下載特定的純JAVA驅動程序1.下載特定的純JAVA驅動程序SQL2000需要三個jar包:mssqlservice.jar、msutil.jar、msbase.jar1.下載特定的純JAVA驅動程序1.下載特定的純JAVA驅動程序1.下載特定的純JAVA驅動程序try{Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");}catch(ClassNotFoundExceptione){System.out.print(e.toString());}2.加載JAVA驅動(1)連接數據庫Stringurl;url="jdbc:sqlserver://localhost:1433;DatabaseName=Student";Stringusername=“sa”;Stringpwd="1111";Connectioncon;con=DriverManager.getConnection(dbconn,username,pwd);(2)聲明并創建statement接口對象(3)發送SQL語句并處理查詢結果(4)關閉數據庫連接3.應用程序和數據庫建立連接importjava.sql.*;//導入數據庫包;
publicclassExample10_2{ publicstaticvoidmain(Stringargs[]){ Connectioncon=null; Statementstat=null;//聲明數據庫連接時用到的對象;
ResultSetrs=null; Stringuser="sa";//數據庫用戶名;
Stringpwd="111111";//數據庫連接密碼;
Stringurl;url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Student";Stringsql="select*fromStudentInfowhereclass='120421'";try{ //加載驅動【例10-2】用本地API驅動程序方式連接SQLServer數據庫Student,取出學生信息表StudentInfo中“120421”班的所有學生并打印Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);con=DriverManager.getConnection(url,user,pwd);stat=con.createStatement();//建立數據庫連接;rs=stat.executeQuery(sql); //傳遞SQL語句
while(rs.next()){//打印結果;System.out.print("學號:"+rs.getString("stuid")+""); System.out.println("姓名:"+rs.getString("name"));}}catch(SQLExceptione1){ e1.printStackTrace();}catch(ClassNotFoundExceptione){e.printStackTrace();}finally{ try{con.close();}//關閉數據庫連接;catch(SQLExceptione2){e2.printStackTrace();}}}}【例10-2】用本地API驅動程序方式連接SQLServer數據庫Student,取出學生信息表StudentInfo中“120421”班的所有學生并打印1.任務打開一個學生管理的應用程序,輸入用戶名和密碼登錄系統。在數據庫中查找用戶表,判斷是否存在該用戶,如果存在該用戶,且輸入的密碼與數據表中存儲的用戶密碼一致,用戶登錄成功,進入主界面。否則,提示密碼錯誤。2.目的實現一個簡單的用戶登錄過程,完成與數據庫的連接。【例10-3】案例描述3.設計思路在用戶登錄界面中接收用戶名和密碼,放入變量userid和userpassword中。連接數據庫,在數據庫中查找是否存在用戶名為userid的用戶,如果存在,獲取該用戶的正確密碼,放入變量password中。如果不存在,提示用戶名不存在。將兩個變量userpassword和password進行比較,如果一致,則成功登錄,否則提示密碼錯誤。【例10-3】案例描述4.遇到問題使用什么方法搭建界面?用什么數據庫,如何連接數據庫?查詢語句怎樣寫?要定義多少類文件?【解決問題1】二個Label,二個TextField,二個Button。【解決問題2】采用本地API驅動程序方法連接數據庫【解決問題3】"select*fromStudentlogwherestuid='"+userid+"'"。【解決問題4】用戶登錄UserLogGUI.java,主界面MainGUI.java,連接數據庫類DBconnect.java。【例10-3】案例描述5.實現過程(1)用戶登錄界面UserLogGUI.java登錄頁面
(2)連接數據庫文件DBconnect.java(3)連接數據庫文件DBconnect.java
主頁面
用戶名錯誤密碼錯誤【例10-3】案例描述2018年9月19日,順豐一位工程師在升級系統數據庫的時候,不慎將RUSS數據庫刪除,導致很長一段時間順豐線上發車功能無法使用,產生了很嚴重的負面影響。此前也曾有新聞報道,北京一軟件工程師離職后因公司未能如期結清工資,便在其所設計的網站中安插后門文件,將網站源代碼全部刪除,結果因破壞計算機信息系統罪而獲刑5年。我們在工作中要講究誠信,無論發生什么事情,也不能將情緒發泄到工作中,更不能做出這種刪庫跑路的違法犯罪行為。課后思考:程序員刪庫跑路,什么原因?Connection接口Statement接口ResultSet接口PreparedStatement接口10.3常用接口類的使用方法Connection接口類存在于java.sql.*包中,該接口類的作用是與特定數據庫連接,執行SQL語句并返回結果。在配置Connection接口時,JDBC應用程序應該使用適當的Connection方法。10.2.1Connection接口類Connection接口類常用方法importjava.sql.*;//導入數據庫包;publicclassExample10_4{ publicstaticvoidmain(Stringargs[]){Connectioncon=null; Stringuser="sa";//數據庫用戶名;
Stringpwd=“111111”;//數據庫連接密碼;
Stringurl; url=“jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Student”;booleancommitvalue=false;try{ //加載驅動Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);con=DriverManager.getConnection(url,user,pwd);commitvalue=con.getAutoCommit();//查看系統的提交模式;【例10-4】連接SQLServer數據庫Student,查看系統的自動提交模式,關閉數據庫。System.out.println(“系統當前的自動提交模式值為:”+commitvalue);if(!con.isClosed()){con.close();}//如果連接沒關閉,關閉數據庫;}catch(Exceptione){ //需要捕獲異常;
System.out.println(e.toString()); }}}【例10-4】連接SQLServer數據庫Student,查看系統的自動提交模式,關閉數據庫。Statement接口類存在于java.sql.*包中,用于向已經建立連接的數據庫發送SQL語句。該接口包括執行SQL語句和獲取返回結果的方法。executeQuery(Stringsql)方法:執行一條查詢語句executeUpdate(Stringsql)方法:執行一條插入、刪除、更新語句10.2.2Statement接口類Statement接口有三種:Statement對象用于執行不帶參數的簡單SQL語句。PreparedStatement對象用于執行帶或不帶入口參數的預編譯SQL語句。CallableStatement對象用于執行對數據庫存儲過程的調用。10.2.2Statement接口類Statement對象最常用的方法是executeQuery(Stringsql)和executeUpdate(Stringsql)。executeQuery(Stringsql)方法用來執行一條查詢語句,返回的是一個結果集,該方法的執行對數據庫數據不會發生更改。executeUpdate(Stringsql)方法用來執行一條插入、刪除、更新語句,返回的結果是整型,代表該語句影響數據庫記錄的條數。10.2.2Statement接口類Statement接口類的常用方法importjava.sql.*;//導入數據庫包;publicclassExample10_4{ publicstaticvoidmain(Stringargs[]){ Connectioncon=null; Statementstat=null;//聲明數據庫連接時用到的對象;
ResultSetrs=null; Stringuser="sa";//數據庫用戶名;
Stringpwd="111111";//數據庫連接密碼;
Stringurl;//插入三名學生信息;url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Student";Stringsql1="insertintoStudentInfovalues('12043104','李麗','120431',0,'計算機')";【例10-5】連接SQLServer數據庫Student,在學生信息表中追加三名學生,然后查看結果。Stringsql2=“insertintoStudentInfovalues(‘12043105’,‘張文婷','120431',0,'計算機')";Stringsql3="insertintoStudentInfovalues('12043106','嚴格強','120431',1,'計算機')";Stringsql="select*fromStudentInfowhereclass='120431'";try{ //加載驅動Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);con=DriverManager.getConnection(url,user,pwd);stat=con.createStatement();//建立數據庫連接;stat.executeUpdate(sql1);stat.executeUpdate(sql2);stat.executeUpdate(sql3);//插入數據;【例10-5】連接SQLServer數據庫Student,在學生信息表中追加三名學生,然后查看結果。rs=stat.executeQuery(sql); //查詢信息; while(rs.next()){//打印學生;System.out.print("學號:"+rs.getString("stuid")+"");System.out.println(“姓名:”+rs.getString(“name”));}}catch(Exceptione1){ e1.printStackTrace();}finally{ try{con.close();}//關閉數據庫連接; catch(Exceptione2){ e2.printStackTrace();}}}}【例10-5】連接SQLServer數據庫Student,在學生信息表中追加三名學生,然后查看結果。ResultSet表示數據庫結果集的數據表,通常通過執行查詢數據庫的語句生成。ResultSet用來暫時存放數據庫查詢操作獲得的結果。它包含了符合SQL語句中條件的所有行,并且提供了一套get()方法對這些行中的數據進行訪問。ResultSet對象具有指向其當前數據行的光標。最初,光標被置于第一行之前。next()方法將光標移動到下一行,因為該方法在ResultSet對象沒有下一行時返回false,所以可以在while循環中使用它來迭代結果集。ResultSet對象默認不可更新,僅有一個向前移動的光標。因此,只能對它迭代一次,并且只能按從第一行到最后一行的順序進行。為了方便操作,可以生成可滾動和/或可更新的ResultSet對象。10.2.3ResultSet接口類可以用以下兩種方式使用更新方法。(1)更新當前行中的列值。在可滾動的ResultSet對象中,可以向前和向后移動光標,將其置于絕對位置或相對于當前行的位置。以下代碼片段更新ResultSet對象rs第五行中的NAME列,然后使用updateRow()方法更新導出rs的數據源表。rs.absolute(5);rs.updateString("NAME","AINSWORTH");rs.updateRow();10.2.3ResultSet接口類(2)將列值插入新插入行可更新的ResultSet對象具有一個與其關聯的特殊行,該行用作構建要插入的行的暫存區域。以下代碼片段將光標移動到插入行,構建一個3列的行,并使用insertRow()方法將其插入rs和數據源表中。rs.moveToInsertRow();rs.updateString(1,"AINSWORTH");rs.updateInt(2,35);//更新第二個字段的值為35rs.updateBoolean(3,true);//更新第三個字段的值為truers.insertRow();//插入行rs.moveToCurrentRow();//移動光標至當前行當生成ResultSet對象的Statement對象關閉、重新執行或用來從多個結果的序列中獲取下一個結果時,ResultSet對象將自動關閉。10.2.3ResultSet接口類ResultSet接口類的常用方法ResultSet接口類的常用方法importjava.sql.*;//導入數據庫包;publicclassExample10_5{ publicstaticvoidmain(Stringargs[]){ Connectioncon=null; Statementstat=null;//聲明數據庫連接時用到的對象;
ResultSetrs=null; Stringuser="sa";//數據庫用戶名;
Stringpwd="111111";//數據庫連接密碼;
Stringurl;url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Student";Stringsql="select*fromStudentInfowhereclass='120431'";try{【例10-6】連接SQLServer數據庫Student,在學生信息表中查詢學生,然后查看從第3條以后的結果。Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");con=DriverManager.getConnection(url,user,pwd);stat=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);//創建可以編輯Statment;
rs=stat.executeQuery(sql);//傳遞SQL語句; System.out.println("所有的學生記錄是:");while(rs.next()){//打印學生信息; System.out.print("學號:"+rs.getString("stuid")+""); System.out.println("姓名:"+rs.getString("name"));}rs.absolute(2);//將光標移動到rs結果集的第2行;System.out.println("從第三行開始的學生記錄是:");【例10-6】連接SQLServer數據庫Student,在學生信息表中查詢學生,然后查看從第3條以后的結果。while(rs.next()){//光標下移一行;
System.out.print("學號:"+rs.getString("stuid")+"");System.out.println("姓名:"+rs.getString("name")); } }catch(Exceptione1)e1.printStackTrace(); }finally{ try{con.close();}catch(SQLExceptione2){ e2.printStackTrace();}}}}【例10-6】連接SQLServer數據庫Student,在學生信息表中查詢學生,然后查看從第3條以后的結果。PreparedStatement接口類繼承了Statement接口類,該接口類可以傳遞經過預編譯的SQL語句,因此可以獲得更高的執行效率。在PreparedStatement語句中可以包含多個用“?”代表的字段,在程序中可以利用setXXX()方法設置該字段的內容,從而增強程序設計的動態性。PreparedStatement與Statement的區別在于,它構造的SQL語句不是完整的語句,需要在程序中進行動態設置。一方面,這增強了程序設計的靈活性;另一方面,由于PreparedStatement語句是經過預編譯的,所以它構造的SQL語句的執行效率比較高。因此,對于某些使用頻繁的SQL語句,用PreparedStatement比用Statement具有明顯的優勢。10.2.4PreparedStatement接口類PreparedStatement接口類的主要成員方法importjava.sql.*;//導入數據庫包;publicclassExample10_6{ publicstaticvoidmain(Stringargs[]){ Connectioncon=null; PreparedStatementstat=null;//數據庫連接時的對象;
ResultSetrs=null; Stringuser="sa";//數據庫用戶名;
Stringpwd="111111";//數據庫連接密碼;
Stringurl; url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Student";Stringsql="select*fromStudentInfowhereclass=?andsex=?";try{ //加載驅動 【例10-7】連接SQLServer數據庫Student,在學生信息表中查詢“120431”班的男同學,然后查看結果。Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");con=DriverManager.getConnection(url,user,pwd);stat=con.prepareStatement(sql);//建立數據庫連接;stat.setString(1,"120431");//設置第一個參數的值;stat.setInt(2,1);//設置第二個參數的值為1,代表男生;
rs=stat.executeQuery(); while(rs.next()){//打印學生信息;
System.out.print("學號:"+rs.getString("stuid")+""); System.out.println("姓名:"+rs.getString("name"));}}catch(Exceptione){ //需要捕獲異常; System.out.println(e.toString()); }【例10-7】連接SQLServer數據庫Student,在學生信息表中查詢“120431”班的男同學,然后查看結果。}catch(Exceptione){ //需要捕獲異常; System.out.println(e.toString()); }finally{ try{con.close();}//關閉數據庫;
catch(SQLExceptione2){ e2.printStackTrace();}}}} //加載驅動 【例10-7】連接SQLServer數據庫Student,在學生信息表中查詢“120431”班的男同學,然后查看結果。1.任務當用戶進入10.2.3案例中的應用程序后,完成到數據庫表中查詢學生信息的功能。輸入學號或姓名,在表StudentInfo表中查詢該學生是否存在。如果存在,在界面中顯示該學生的信息。否則,提示“沒有該學生的信息”。2.目的根據指定信息,在數據庫中查找符合條件的數據顯示出來。3.設計思路在圖形用戶界面中接收用戶輸入的學生學號或姓名,存入變量userid和username中。判斷是否輸入了學號和姓名,如果只輸入一項,查詢時滿足一個查詢條件即可,如果同時輸入兩項,則要求查詢時兩個條件均要滿足。將得到的結果集顯示出來。【例10-8】案例描述4.遇到問題如何判斷在用戶界面上輸入的查詢條件?查詢出來的結果集怎樣顯示?查詢語句怎樣寫?涉及到多少類文件?【解決問題1】獲取文本框中數據去掉空格后長度大于0,表示該文本框用戶輸入了數據。【解決問題2】rs.next()方法繼續提取結果集中的數據【例10-8】案例描述1.任務當用戶進入10.2.3案例中的應用程序后,完成到數據庫表中查詢學生信息的功能。輸入學號或姓名,在表StudentInfo表中查詢該學生是否存在。如果存在,在界面中顯示該學生的信息。否則,提示“沒有該學生的信息”。2.目的根據指定信息,在數據庫中查找符合條件的數據顯示出來。3.設計思路在圖形用戶界面中接收用戶輸入的學生學號或姓名,存入變量userid和username中。判斷是否輸入了學號和姓名,如果只輸入一項,查詢時滿足一個查詢條件即可,如果同時輸入兩項,則要求查詢時兩個條件均要滿足。將得到的結果集顯示出來。【例10-8】案例描述4.遇到問題如何判斷在用戶界面上輸入的查詢條件?查詢出來的結果集怎樣顯示?查詢語句怎樣寫?涉及到多少類文件?【解決問題1】獲取文本框中數據去掉空格后長度大于0,表示該文本框用戶輸入了數據。【解決問題2】rs.next()方法繼續提取結果集中的數據【例10-8】案例描述【解決問題3】sql="select*fromStudentInfowherestudentid=?"。
sql=“select*fromStudentInfowherestudentname=?”。
sql=“select*fromStudentInfowherestudentid=?andstudentname=?”。使用PreparedStatement對象【解決問題4】
用戶登錄界面UserLogGUI.java
主界面類文件MainGUI.java
連接數據庫類文件DBconnect.java
查詢界面類文件SelectInfoGUI。【例10-8】案例描述【例10-8】案例描述選擇查詢信息功能查詢學生信息界面查詢學號結果查詢姓名結果鍵盤俠是一個網絡詞語,指部分在現實生活中膽小怕事,而在網絡上占據道德高點發表“個人正義感”和“個人評論”的人群。真正的“鍵盤俠”,應該講究一個“俠”字,鍵盤可以成為兩種不同性格的分割線,但俠氣卻是不容分割的。網絡中玩轉文字,或犀利,或幽默,或溫情,這是俠氣;生活中默默無聞、低調文靜,但內心善良充盈,這也是一種俠氣。我們需要做的,就是保留這種表現不同但實質相同的俠客風范。課后思考:不參與網絡暴力,不做“鍵盤俠”。如果程序在運行過程中允許改變程序結構或變量的數據類型,就稱這個程序所使用的語言為動態語言。在IT界,一般認為Java不是動態語言,但是Java有一個動態機制,那就是反射。Java的反射機制主要提供了以下功能(在程序運行時有效)。(1)構造任意一個類的對象。(2)獲取任意一個類所具有的成員變量和方法。(3)調用任意一個對象的方法或屬性。(4)生成動態代理10.3反射的使用【例10-9】定義一個接口Person,包含方法display();定義一個Student類,包含普通類Information;定義Example10_9類,實現反射機制。大數據概念正在席卷全球,改變人們的生活方式。微信、支付寶、朋友圈,滴水籌,百度地圖等軟件影響著人們的生活方式,而這些都是我們中國人的技術!科技發展改變了我們的生活!阿里巴巴在大數據方面的領先,使得他們在互聯網企業中一直居于領導者地位。而這一切都源于他們對國家的熱愛,對民族的熱愛,源于他們點點滴滴的付出。作為未來幾年后的計算機專業從業者,你打算在大學階段付出些什么?又期望收獲些什么呢?課后思考:大數據時代真的來臨了嗎?在第9章中,服務器判斷用戶發送過來的用戶名和密碼是否正確,仍然是判斷固定的用戶,但是現實中的例子是不可能這樣的。因此,我們需要借助數據庫來存儲用戶名和密碼,每次用戶登錄,服務器要到數據庫中查找是否存在該用戶,如果用戶名密碼都正確,則向客戶端返回成功信息,否則返回失敗信息。10.4數據庫編程案例1.設計思路①創建mysql數據庫qq。②在數據庫中添加所有用戶的用戶名和密碼。③在項目中添加mysql數據庫的驅動JAR包。④在服務器Chat_Server.java,得到客戶端的用戶名和密碼,再到數據庫中查詢是否存在該用戶。⑤如果用戶名和密碼都正確,則返回給客戶端成功信息,否則返回失敗信息。⑥其他幾個界面的程序不需要修改。10.4數據庫編程案例10.4數據庫編程案例2.遇到問題①數據庫應保存什么。②應該如何判斷是否存在該用戶?【解決問題1】數據庫需要保存的數據根據項目需求進行設計,在這個網絡通信工具中,只需要保存用戶登錄時的用戶名和密碼即可。因此,創建數據庫qq,在數據庫建立用戶登錄表user,該表中保存用戶名和密碼。createdatabaseqq;useqq;createtableuser(usernamechar(20),passwordchar(20));【解決問題2】通過sql語句中的select語句查詢是否存在該用戶。Stringsql=”select*fromuserwhereusername=?andpassword=?”10.4數據庫編程案例3.實現過程①建立數據庫語句createdatabaseqq;useqq;createtableuser(usernamechar(10),passwordchar(10));insertintouservalues('admin','123456');insertintouservalues('aaa','111');select*fromuser;10.4數據庫編程案例② 服務器端程序Chat_Server.java在run()方法中新增代碼(用加粗字體表示)以完成在數據庫驗證:
publicvoidrun(){ try{ //接收用戶名和密碼;
InputStreamis=s.getInputStream(); InputStreamReaderisr=newInputStreamReader(is); BufferedReaderbr=newBufferedReader(isr); Stringname=br.readLine(); Stringpassword=br.readLine(); Stringresult; Conn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙江萬里學院《美學與醫學美學》2023-2024學年第二學期期末試卷
- 平涼市靈臺縣2024-2025學年六年級下學期調研數學試卷含解析
- 武漢紡織大學外經貿學院《廣播電視新聞采編》2023-2024學年第二學期期末試卷
- 廣州商學院《口腔工藝管理》2023-2024學年第二學期期末試卷
- 云南財經大學《新技術在城市規劃中的應用》2023-2024學年第二學期期末試卷
- 鎮江市高等專科學校《影視虛擬空間技術》2023-2024學年第一學期期末試卷
- 浙江工業大學《精神衛生保健》2023-2024學年第一學期期末試卷
- 債券相關知識培訓
- 工藝流程培訓
- 遼寧省大連市瓦房店市2024-2025學年七年級下學期期中地理試題(含答案)
- 2025年湖北省初中學業水平考試數學模擬卷(二)(原卷版+解析版)
- 2025年華能新能源股份有限公司廣東分公司應屆高校畢業生招聘筆試參考題庫附帶答案詳解
- 2025年新疆克州中考英語一模試卷
- 2024年新疆伊犁州直檢察機關招聘聘用制書記員筆試真題
- 口腔四手操作培訓
- 醫院檢驗科簡介
- 成人手術后疼痛評估與護理團體標準
- 連鎖藥店年度規劃
- 2024年10月自考07729倉儲技術與庫存理論試題及答案
- 血液透析頭痛的應急預案
- 肝硬化肝性腦病指南
評論
0/150
提交評論