一、 實訓內容
- 能對基本的開發環境進行檢驗和錯誤排查,以及對新語言軟件進行安裝。
- 能使用Navicat for MySQL對MySQL數據庫進行基本的連接測試,同時,在mysql中新建student數據庫。能利用外部SQL腳本文件對數據庫進行數據集的導入和初始化。
- 熟悉利用eclipse編程工具,新建項目和工具類對mysql數據庫進行相應的操作,以及從該項目中導出可執行的jar文件。
- 利用R-3.6.1-win.exe運行,導出的可執行的jar文件。並編寫一個“數據清洗.r”腳本文件,對C:\ inputdir目錄下,導出的studentdata.txt數據文件進行數據清洗操作,包括過濾字段等操作。同時,在C:\outputdir目錄下生成已經進行數據清洗的數據文件studentdata.txt 。
二、 實驗課題目標
- 掌握基本的開發環境的搭建、檢驗和錯誤排查能力,熟悉新的開發語言。
- 熟悉使用Navicat for MySQL軟件對MySQL數據庫進行基本的操作。重要的是,能利用外部SQL腳本文件對特定的數據庫進行數據集的導入和初始化。
- 掌握eclipse編程工具的使用,以及在編程過程中熟悉常用的快捷鍵,提高編程的效率。掌握如何編寫一個常規的Java類程序,對mysql數據庫進行進本的數據操作,以及能從Java項目中導出相應可執行的jar文件。
- 掌握R語言的基本語法,以及R-3.6.1軟件的使用方法。能編寫R的腳本程序,對特定目錄下的數據集進行基本的數據清洗操作,其中包括:數據過濾,數據框字段名稱的替換和重新構造一個數據框等操作。
三、 實驗平台
- 系統: Windows 10
Intel(R) Core(TM)i7-7500U CPU @ 2.70GHz 2.90 GHz
RAM 8.00GB
- 工具:
R-3.6.1-win.exe 、Navicat for MySQL 、tbl_stuinfo-data.sql 、eclipse
四、 實施步驟
(一) 環境安裝和檢查
- Java開發環境檢查
1) 檢查JDK環境
首先對實驗機器的java -version 和java進行檢查,返回的信息皆正常。但是,在進行javac編譯指令的檢查時,返回了如圖4-1的內容,顯示的信息表明javac的環境變量沒有配置。
圖4-1 javac編譯指令不可用
2) 配置JDK的環境變量。
重新配置JDK的系統環境變量。右擊桌面的計算機圖標選擇屬性,在左邊的控制面板中點擊“高級系統設置”。在高級選項卡中再點擊“環境變量”,選擇系統變量中的Path,並刪除path中原有的JDK變量。
在環境變量控制面板中,點擊“新建”,變量名為:JAVA_HOME ,變量值為C:\Program Files\Java\jdk1.8.0_91 ,按確定保存。
圖4-2 環境變量控制面板
圖4-3 配置JAVA_HOME環境變量
再編輯Path ,並在首部追加:%JAVA_HOME%/bin; 內容。
圖4-4 Path中添加內容后
重新查看JDK的版本,以及查看編譯執行功能是否可用。
圖4-5 javac編譯功能可用
- R語言的安裝
1) 安裝R-3.6.1-win
雙擊已經下載好的R-3.6.1-win.exe文件,進行安裝R語言。依次點擊確定或者下一步,保持默認的安裝配置即可。如圖4-6,是R-3.6.1安裝結束的界面,點擊關閉。
圖4-6 R-3.6.1安裝結束
2) 打開R程序。
圖4-7,為R-3.6.1程序首次打開的界面。
圖4-7 初次打開R
(二) 數據庫數據提供
- 建立數據庫
1) 連接數據庫
使用Navicat for MySQL連接MySQL數據庫前,填完基本的連接信息后,點擊測試連接到數據庫,如圖4-8所示,即為連接前的測試。
圖4-8 連接測試
在點擊兩次確認之后,再上機“本地”即可連接到實驗所需的MySQL數據庫。
圖4-9 連接到MySQL數據庫
2) 新建數據庫
在“本地”上鼠標右鍵,選擇“新建數據庫”,在面板中填入如圖4-10的內容,再按確定即可。
圖4-10 新建數據庫
- 初始化數據庫
雙擊建立好的數據庫“student”,並在該數據庫名稱上右鍵,選擇“運行SQL文件”。找到外部資源的tbl_stuinfo-data.sql文件,點擊開始。
圖4-11 運行sql腳本
點擊關閉,回到Navicat for MySQL主面板。在按F5鍵刷新界面,會發現student數據庫下多出名稱為tbl_stuinfo的數據表,雙擊打開,檢查student庫的數據是否亂碼。如果是亂碼,重新建立數據庫。
圖4-12 數據庫初始化成功
至此,便可關閉Navicat for MySQL軟件,但必須保持該數據庫在后台正常運行。
(三) 編寫數據獲取工具
- 新建java項目。打開eclipse工具,在Package Explorer面板右鍵new->Java Project ,新建項目名為:sdms-v2 即可。
- 導入jar依賴。在sdms-v2工程名稱上右鍵,選擇Build Path -> Add External Archive... ,找到外部的mysql-connector-java-5.1.7-bin.jar文件,再確認並返回主界面。
- 編寫程序類
分別在該項目中新建:MainClass、StudentBean、StudentDao、TestConnection和TxtUtil類。
1) MainClass類
其中MainClass為主類,功能是創建一個dao對象並調用寫文件的方法,關鍵代碼如下:
StudentDao dao = new StudentDao(); List<StudentBean> list = dao.findAll(); new TxtUtil().writeToFile(list); |
2) StudentBean類。StudentBean定義學生對象擁有的屬性,同時,重寫了構造方法。關鍵代碼如下
public StudentBean(Integer stuid, String name, boolean sex, String mobile, Timestamp birthday, String place, String major, String note) { super(); this.stuid = stuid; this.name = name; this.sex = sex; this.mobile = mobile; this.birthday = birthday; this.place = place; this.major = major; this.note = note; } |
3) StudentDao類。該類定義了一個連接對象、執行sq1命令的對象和結果集對象。在預處理sql語句的同時,執行了sql語句,並把結果交給res進行返回。核心代碼如下:
pst = conn.prepareStatement(sql); res = pst.executeQuery(); while(res.next()){ Integer stuid = res.getInt("stuid"); String name = res.getString("name"); boolean sex = res.getBoolean("sex"); String mobile = res.getString("mobile"); Timestamp birthday = res.getTimestamp("birthday"); String place = res.getString("place"); String major = res.getString("major"); String note = res.getString("note"); StudentBean studentBean = new StudentBean(stuid,name,sex,mobile,birthday,place,major,note); list.add(studentBean); } |
4) TestConnection類為MySQL數據庫連接類。其先加載了驅動程序類,再獲取一個連接對象,並返回,最后測試是否連接成功。關鍵代碼如下:
static{ try{ Class.forName("com.mysql.jdbc.Driver"); }catch(Exception ex){ ex.printStackTrace(); } } public static Connection getConnection() throws Exception{ Connection conn=DriverManager.getConnection("jdbc:mysql://172.25.6.200:3306/student?useUnicode=true&characterEncoding=UTF8","root",""); return conn; } public static void main(String[] args) throws Exception{ Connection c=getConnection(); System.out.println("c="+c); c.close(); } |
5) TxtUtil類為工具類,作用是把mysql的數據寫入到文本文件中,核心的代碼如下:
FileWriter fw=null; BufferedWriter bw=null; try { fw=new FileWriter( new File(OUTFILE) ); bw=new BufferedWriter(fw); bw.write(HEADER); bw.newLine(); for(StudentBean stu:list){ bw.write(stu.getStuid()+FLAG); bw.write(stu.getName()+FLAG); bw.write(stu.isSex()?"男" +FLAG:"女"+FLAG); bw.write(stu.getMobile()+FLAG); bw.write(stu.getBirthday().toString().substring(0, 10)+FLAG); bw.write(stu.getPlace()+FLAG); bw.write(stu.getMajor()+FLAG); bw.write(stu.getNote()); bw.newLine(); } bw.flush(); } catch (Exception e) { e.printStackTrace(); }finally{ try { if(fw != null){fw.close();} } catch (Exception e) { e.printStackTrace(); }}} |
上述的項目代碼在eclipse中調試無誤之后,便可將生成文件的位置設置為C:\ inputdir目錄下,生成的數據文件為studentdata.txt 。
- 導出jar文件。當上述的代碼調試成功之后,以及生成文件的位置和名稱設置好之后。在該項目sdms-v2的名稱上右鍵,依次選擇Export..->Java結構下的Runnable JAR file 。
圖4-13 選擇Runnable JAR file
之后,點擊Next> ,將Export destination:位置指定到C:\目錄下,保存的文件名為:stu.jar ,再單擊Finish即可。至此編寫數據獲取工具步驟,結束。
(四) R語言數據清洗處理
- 執行stu.jar工具。
在R x64 3.6.1中使用setwd(“C:\”)命令,將R的工作空間指定到C:\目錄下。再使用命令shell.exec("jar stu.jar") ,將mysql數據庫student中的數據,在C:\ inputdir目錄下,生成的studentdata.txt數據文件。如圖4-14,為該文件的樣式。
圖4-14 studentdata.txt
- 編寫R腳本文件。
1) 新建程序腳本
打開R x64 3.6.1軟件,點擊菜單欄的文件->新建程序腳本 。在打開的腳本編輯器中輸入相應的腳本內容。之后保存到C:\目錄下,為數據清洗.r文件。
2) 腳本內容如下:
inputdir<-"./inputdir" outputdir<-"./outputdir" for(filename in dir(inputdir)){ print(filename) inputpath<-sprintf("%s/%s",inputdir,filename) data<-read.table(inputpath,header=TRUE,sep=",") print("讀取的文件數據如下:") cat("-------------------end---------------------\n") cnames<-colnames(data) cnames[cnames=="stuid"]<-"編號" cnames[cnames=="name"]<-"姓名" cnames[cnames=="sex"]<-"性別" cnames[cnames=="mobile"]<-"手機號" cnames[cnames=="birthday"]<-"出生年月日" cnames[cnames=="place"]<-"籍貫" cnames[cnames=="major"]<-"專業" cnames[cnames=="note"]<-"備注" colnames(data)<-cnames data<-data[c("姓名","性別","出生年月日","籍貫")] #print(data,right = FALSE) data<-data[data$籍貫=="廣西桂林",] print(data,right = FALSE) outputpath<-sprintf("%s/%s",outputdir,filename) write.table(data,outputpath,row.names=FALSE,sep=",") } |
- 腳本文件功能介紹。如圖4-15,詳細注釋:
圖4-15 詳細注釋-數據處理
- 執行腳本並生成數據處理的文件。由於R x64 3.6.1已經將C:\作為當前的工作目錄,所以直接在R中運行命令:source("數據清洗.r") 。就可以在C:\outputdir目錄下生成已經進行數據清洗的studentdata.txt數據集文件。如圖4-16所示:
如圖4-16 數據清洗后的studentdata.txt文件
五、 實驗成果
當運行在R語言中,運行命令shell.exec("jar stu.jar") ,會將mysql數據庫student中的數據,在C:\ inputdir目錄下,生成的studentdata.txt數據文件。如圖5-1所示:
圖5-1 數據清洗前的數據集
當在R中,運行命令:source("數據清洗.r") 。即,運行編寫的數據清洗.r腳本文件,會在C:\outputdir目錄下自動生成已經進行數據清洗的studentdata.txt文件。
圖5-2 數據清洗后的數據集
兩相對比之下,可以得出總結:本實驗先是利用編寫的stu.jar可執行文件,從mysql數據庫student中導出數據集studentdata.txt 。再通過在R語言中編寫腳本並運行腳本的方式,將數據集studentdata.txt進行數據清洗操作,並生成了新的studentdata.tx數據文件,本實驗順利完成。
六、 實訓總結
關於本次實驗的經驗收獲和實驗總結,可分總結如下:
- 在對實驗機器的java -version 和java進行檢查時,返回的信息皆正常。但是,唯獨javac編譯指令對於實驗機器而言,無法識別。說明javac編譯環境異常,本實驗統一對JDK進行環境配置。
- 在使用Navicat for MySQL連接MySQL數據庫,並新建數據庫,以及使用SQL腳本文件進行數據庫的數據導入和庫的初始化操作過程中,應該格外地注意編碼的問題,否則在進行jar文件工程編程時,會發生亂碼的現象。
- 同時,如果導出的studentdata.txt文件中,部分的數據格式屬性的編碼與R腳本中設置的不一致,也會發生亂碼的現象。並且將會加大錯誤排查的難度和精力。
- 在R x64 3.6.1軟件中,切換R語言的工作目錄時,需要將C:盤作為工作空間,對於部分權限級別較高的機器而言,將會是無法切換的。這時候,需要以管理員的方式運行R x64 3.6.1軟件。
- 整體而言,本實驗的思路是:先利用編寫的stu.jar可執行文件,從mysql數據庫student中導出數據集studentdata.txt 。再通過在R語言中編寫腳本並運行腳本的方式,將數據集studentdata.txt進行數據清洗操作,並生成了新的studentdata.tx數據文件。
- 通過本實驗,基本上能對開發環境進行初步的檢驗和錯誤排查,同時,能使用Navicat for MySQL對MySQL數據庫進行基本的連接測試。以及,在mysql中新建數據庫並利用外部SQL腳本文件對數據庫進行數據集的導入和初始化。
- 在利用eclipse編程工具進行開發的過程中,積累了一定的快捷方式,這將極大地提高我今后的開發效率。