Môi trường và công cụ sử dụng

Một phần của tài liệu Xây dựng phần mềm mã hóa và chuyển đổi dữ liệu giữa Excel và MySQL. (Trang 28)

3.2.1 Môi trường

Phần mềm được xây dựng trên ngôn ngữ JAVA, vì thế để có thể chạy được chương trình này chúng ta cần phải tạo môi trường máy ảo JAVA thông qua JVM.

Hình 3.1: Mô hình JVM

Do vậy chúng ta có thể chạy chương trình này trên bất kỳ hệ điều hành nào.

3.2.2 Công cụ

Các công cụ được dùng gồm:

- NETBEAN: Đây là bộ IDE miễn phí, được dùng để viết chương trình.

Hình 3.2: Netbean - MySQL Workbech

Hình 3.3: MySQL Workbech

- Microsoft office: Bộ office của Microsoft bộ phần mềm văn phòng phổ biến nhất hiện nay nhưng có tính phí. Ta cũng có thể sử dụng các bộ công cụ tương đương nhưng miễn phí để có thể tạo bảng Excel như OpenOffice.

- Notepad: File XML có thể được tạo bởi bất kỳ phần mềm tạo file txt nào. Ở

3.3 Giao diện chương trình

Hình 3.4: Giao diện khi vào chương trình

Trên cửa sổ chính của chương trình chứa 2 ô cho phép người dùng nhập các ID và Password dùng để đăng nhập vào hệ quản trị CSDL MySQL. Sau khi nhập thông tin về ID và Password của MySQL người dùng click vào nút “Continute” để vào cửa sổ chức năng của chương trình.

Hình 3.5: Giao diện cửa sổ conversion

Conversion: chức năng chuyển đổi trực tiếp dữ liệu giữa Excel và MySQL

Trong phần này chia thành chức năng chuyển đổi dữ liệu từ bảng tính Excel sang CSDL MySQL và ngược lại.

Hình 3.6: Giao diện chức năng chuyển đổi dữ liệu từ Excel sang MySQL

Chức năng này có 2 ô cho phép người dùng nhập file Excel và tên database của MySQL. Người dùng cũng có thể dùng nút browse để chọn file Excel. Sau khi đã nhập url file Excel và tên database MySQL người dùng nhấn nút “Conversion” để thực hiện việc chuyển đổi

Hình 3.7: Giao diện chức năng chuyển đổi dữ liệu từ MySQL sang Excel

Chức năng này có 2 ô cho phép người dùng nhập file Excel và tên database của MySQL. Người dùng cũng có thể dùng nút browse để lấy file Excel. Sau khi đã nhập tên database MySQL và url file Excel người dùng nhấn nút “Conversion” để thực hiện việc chuyển đổi

Hình 3.8: Giao diện cửa sổ Encryption

Encryption: Chức năng mã hóa dữ liệu từ Excel và MySQL. Trong phần chức năng này sẽ có 2 chức năng con dùng để mã hóa Excel và MySQL.

Hình 3.9: Giao diện chức năng mã hóa file Excel

Chức năng mã hóa dữ liệu từ file Excel: Trong phần chức năng này sẽ có 3 ô cho phép người dùng nhập file Excel hoặc dùng nút browse để chọn file Excel, key dùng để mã hóa và file text chứa dữ liệu đã mã hóa, sau khi đã nhập đầy đủ thông tin người dùng nhấn nút Encryption để thực hiện việc mã hóa

Hình 3.10: Giao diện chức năng mã hóa CSDL MySQL

Chức năng mã hóa dữ liệu từ CSDL MySQL: Trong phần chức năng này sẽ có 3 ô cho phép người dùng nhập tên database MySQL, key dùng để mã hóa và file text chứa dữ liệu đã mã hóa, sau khi đã nhập đầy đủ thông tin người dùng nhấn nút Encryption để thực hiện việc mã hóa

Hình 3.11: Giao diện cửa sổ Decryption

Decryption: Chức năng giải mã dữ liệu cho Excel và MySQL. Trong phần chức năng này sẽ có 2 chức năng con dùng để giải mã Excel và MySQL.

Hình 3.12: Giao diện chức năng giải mã sang file Excel

Chức năng giải mã dữ liệu cho file Excel: Trong phần chức năng này sẽ có 3 ô cho phép người dùng nhập file Excel, key dùng để giải mã và file text chứa dữ liệu đã mã hóa, sau khi đã nhập đầy đủ thông tin người dùng nhấn nút Decryption để thực hiện việc mã hóa việc giải mã. Người dùng có thể dùng nút browse để chọn file Excel và file dữ liệu đã mã hóa

Hình 3.13: Giao diện chức năng giải mã sang CSDL MySQL

Chức năng giải mã dữ liệu cho CSDL MySQL: Trong phần chức năng này sẽ có 3 ô cho phép người dùng nhập tên CSDL muốn tạo, key dùng để giải mã và file text chứa dữ liệu đã mã hóa, sau khi đã nhập đầy đủ thông tin người dùng nhấn nút Decryption để thực hiện việc mã hóa việc giải mã

Hình 3.14: Chức năng browse

Giao diện chức năng browse dùng để chọn file trong chương trình.

Tóm lại: Trên cơ sở công cụ Netbean, MySQL Workbench, trong môi trường máy

ảo JVM, chúng tôi đã xây dựng được phần mềm mã hóa và chuyển đổi dữ liệu. Với phần mềm này, người sử dụng có thể mã hóa và giải mã file Excel, CSDL MySQL đồng thời có thể chuyển đổi các dạng dữ liệu từ file Excel thành dạng CSDL MySQL và ngược lại giúp cho việc lưu trữ và truyền dữ liệu được nhanh chóng và an toàn

KẾT LUẬN

Mã hóa và chuyển đổi dữ liệu là vấn đề quan trọng trong việc truyền và sử dụng khai thác thông tin. Qua quá trình thực hiện đề tài, chúng tôi đã đạt được một số kết quả sau:

1. Kết quả

- Hiểu được các phương thức làm việc với file XML, Excel và CSDL MySQL. - Xây dựng được các thuật toán mã hóa và chuyển đổi dữ liệu

- Sử dụng các thư viện của ngôn ngữ JAVA để xây dựng phần mêm mã hóa và chuyển đổi dữ liệu qua lại giữa bảng tính Excel và CSDL MySQL dùng XML làm trung gian

Ngoài các kết quả đạt được như trên đề tài vẫn còn một số hạn chế như sau

2. Hạn chế

- Do sự khác biệt về kiểu dữ liệu, cấu trúc giữa bảng tính Excel và CSDL MySQL nên cần có 1 số quy tắc ràng buộc để có thể chuyển đổi dữ liệu.

- Giao diện chưa được than thiện.

- Việc truyền khóa mã hóa chưa được đề cập.

- Chưa tự động liệt kê danh sách database trong hệ thống máy tính

3. Hướng phát triển

- Dùng hệ mã RSA mã hóa khóa khi truyền

- Không cần áp dụng các nguyên tắc khi chuyển đổi

- Cho phép chuyển đổi thêm các cơ sở dữ liệu khác như: Access, SQL …

Với những kết quả đạt được như trên mong rằng phần mềm này có thể giúp cho việc truyền và chuyển đổi dữ liệu được nhanh chóng và an toàn hơn.

TÀI LIỆU THAM KHẢO Tài liệu tiếng Việt:

[1] PGS.TSKH Trần Quốc Chiến (2010). Hệ quản trị cơ sở dữ liệu. Đại học Sư Phạm – Đại học Đà Nẵng,

[2] Lê Thị Bích Hồng(2011). Giáo trình truyền và bảo mật thông tin. Đại học Sư Phạm – Đại học Đà Nẵng,

[3] Ngô Đình Thưởng (2010). Tài liệu XML. Đại học Sư Phạm – Đại học Đà Nẵng.

Tài liệu tiếng Anh

[4] Brett McLaughlin (2001). Java & XML, 2nd Edition. O'Reilly,

[5] Joshua Bloch (2001). Effective Java: Programming Language Guide. Addison Wesley,

[6] Michael Morrison (1999). Java™ 2 GUI Fundamentals with Swing. Digitalthink.

Địa chỉ trang web

http://vi.wikipedia.org/wiki/Trang_Ch%C3%ADnh

http://w3schools.com/

http://www.roseindia.net/java/

PHỤ LỤC 1. Code chuyển file Excel sang XML

try {

File fExcel = new File(urlfileExcel); Workbook w;

File tg = new File(urlfiletxt);

FileOutputStream fos = new FileOutputStream(tg); PrintWriter pw = new PrintWriter(fos);

w = Workbook.getWorkbook(fExcel); // Get the first sheet

Sheet sheet = w.getSheet(0); // Loop over first 10 column and lines

pw.println("<?XML version=\"1.0\" encoding=\"UTF-8\"?>"); pw.println("<Excel>");

//System.out.println("<?XML version=\"1.0\" encoding=\"ISO-8859-1\"?>"); //System.out.println("<Excel>");

for (int i = 0; i < sheet.getRows(); i++) {

pw.println("<row numid = \""+i+"\">");

//System.out.println("<row numid = \""+i+"\">"); for (int j = 0; j < sheet.getColumns(); j++) {

Cell cell = sheet.getCell(j, i);

pw.println("<column numid = \""+j+"\" type = \""+cell.getType().toString()+ "\">"+cell.getContents()+"</column>");

System.out.println(cell.getType().toString());

//System.out.println("<column numid = \""+j+"\">"+cell.getContents()+"</column>"); }

pw.println("</row>");

//System.out.println("</row>"); }

//System.out.println("</Excel>"); pw.close(); fos.close(); } catch (Exception e) { System.out.println("ERROR : "+e); }

2. Code chuyển CSDL MySQL sang XML

Connection con = null;

String url = "jdbc:mysql://localhost:3306/"; String db = dbf;

String driver ="com.mysql.jdbc.Driver"; String user = userf; // nguoi dung nhap String pass = passf; // nguoi dung nhap String tablename; //String tg; int i; int colnum; try { Class.forName(driver).newInstance(); con = DriverManager.getConnection(url+db,user,pass);

File tg = new File(urlf);

FileOutputStream fos = new FileOutputStream(tg); PrintWriter pw = new PrintWriter(fos);

pw.println("<?XML version=\"1.0\" encoding=\"ISO-8859-1\"?>"); pw.println("<mysql>");

try{

Statement stm = con.createStatement(); DatabaseMetaData dbm = con.getMetaData();

String[] types = {"TABLE"};

ResultSet rstb = dbm.getTables(null, null,"%", types); while (rstb.next()) { tablename=rstb.getString("TABLE_NAME"); //enc.encode pw.println("<table name=\""+tablename+"\">");

ResultSet rs = stm.executeQuery("select *from "+tablename); ResultSetMetaData rsm = rs.getMetaData();

colnum = rsm.getColumnCount(); //System.out.println("Minh : "+colnum); for ( i = 1; i <= colnum; i++)

{

String column = rsm.getColumnName(i);

pw.println("<column name = \""+column+"\" type =

\""+rsm.getColumnTypeName(i)+"("+rsm.getColumnDisplaySize(i) +")" +"\">"); // get data in each column

while(rs.next()) { String s = rs.getString(column); pw.println("<data>"+s+"</data>"); //System.out.println(s); }

rs = stm.executeQuery("select *from "+tablename); pw.println("</column>"); } pw.println("</table>"); } pw.println("</mysql>"); pw.close(); fos.close(); }catch(SQLException s) { System.out.println("khong co table : "+s); }

}

catch(Exception e) {

System.out.println(" ERROR CONNECT : "+e); } finally { if (con != null) { try { con.close (); }

catch (Exception e) { /* bo qua loi luc dong csdl */ } }

}

3. Code chuyển XML sang file Excel

try{

// Create XML file

File fin = new File(urlfiletxt);

File fXMLFile = new File(fin.getParent()+"\\"+"temp.XML");

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

Document doc = dBuilder.parse(fXMLFile); doc.getDocumentElement().normalize(); // Creat Excel file

File file = new File(urlfileExcel);

WorkbookSettings wbSettings = new WorkbookSettings(); wbSettings.setLocale(new Locale("en", "EN"));

WritableWorkbook workbook = Workbook.createWorkbook(file, wbSettings);

// Config Font Excel

WritableFont times13pt = new WritableFont(WritableFont.TIMES, 13); // Define the cell format

// Create create a bold font with unterlines

WritableFont times13ptBoldUnderline = new WritableFont(WritableFont.TIMES, 13, WritableFont.BOLD, false,UnderlineStyle.SINGLE);

timesBoldUnderline = new WritableCellFormat(times13ptBoldUnderline); // Lets automatically wrap the cells

timesBoldUnderline.setWrap(true);

CellView cv = new CellView(); cv.setFormat(times); cv.setFormat(timesBoldUnderline); //cv.setAutosize(true); // translate txt to Excel

NodeList nlist = doc.getElementsByTagName("table"); // get node table = sheel int nsheet= 0;

for(int i = 0; i < nlist.getLength(); i++) {

Node nodesheet = nlist.item(i); // get sheet

if (nodesheet.getNodeType() == Node.ELEMENT_NODE) {

Element esheet = (Element) nodesheet;

workbook.createSheet(esheet.getAttribute("name"), nsheet); // create sheet WritableSheet sheet = workbook.getSheet(nsheet++);

NodeList listcolumn = esheet.getChildNodes(); // get list column int ncolumn = 0;

for(int j = 0; j < listcolumn.getLength(); j++) // duyet list column {

Node nodecolumn = listcolumn.item(j);

if(nodecolumn.getNodeType() == Node.ELEMENT_NODE) {

System.out.println("column : "+ncolumn); Element ecolumn = (Element) nodecolumn;

label = new Label(ncolumn,0, ecolumn.getAttribute("name"), timesBoldUnderline);

sheet.addCell(label);

int nrow = 1;

if(ecolumn.getAttribute("type") == "FLOAT(12)" || ecolumn.getAttribute("type").charAt(0) == 'D') // column label

{

for(int r = 0; r < listrows.getLength(); r++) {

Node noderow = listrows.item(r);

if(noderow.getNodeType() == Node.ELEMENT_NODE) {

Element erow = (Element) noderow; System.out.println("row : "+nrow);

number = new Number(ncolumn, nrow, Double.parseDouble(erow.getXMLContent()), times); sheet.addCell(number); nrow++; } } } else {

for(int r = 0; r < listrows.getLength(); r++) // column number {

Node noderow = listrows.item(r);

if(noderow.getNodeType() == Node.ELEMENT_NODE) {

Element erow = (Element) noderow; System.out.println("row : "+nrow);

label = new Label(ncolumn,nrow, erow.getXMLContent(), times); sheet.addCell(label);

} } ncolumn++; } } } } fXMLFile.delete(); workbook.write(); workbook.close(); }catch (Exception ex) {

System.out.println("ERROR : "+ex); }

4. Code chuyển XML sang CSDL MySQL public void run(String userf, String passf, String dbf, String urlf) {

Connection con = null; String URLConnection = "jdbc:mysql://localhost:3306/musicdb?useUnicode=true&characterEncoding=UTF-8"; String url = "jdbc:mysql://localhost:3306/"; String db = dbf; String driver = "com.mysql.jdbc.Driver"; String user = userf; String pass = passf; tool tl = new tool(); tl.create_db(db, user, pass); tl.translatefile(urlf); File fin = new File(urlf); File fXMLFile = new File(fin.getParent()+"\\"+"temp.XML"); try { Class.forName(driver).newInstance(); con = (Connection) DriverManager.getConnection(url+db+"?useUnicode=true&characterEncoding=UTF-8",user,pass);

Statement st = (Statement) con.createStatement();

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

Document doc = dBuilder.parse(fXMLFile); doc.getDocumentElement().normalize(); // Create table in database

NodeList nlist = doc.getElementsByTagName("table");

// create SQL query to create table for(int i = 0; i < nlist.getLength(); i++) {

String sqltable = "CREATE TABLE "; Node ntable = nlist.item(i);

int first = 0;

if (ntable.getNodeType() == Node.ELEMENT_NODE) { Element etable = (Element) ntable;

//System.out.println("Table name : "+element.getAttribute("name")); sqltable = sqltable + etable.getAttribute("name")+"(";

NodeList listcolum = etable.getChildNodes();

for(int j = 0; j < listcolum.getLength(); j++) {

Node ncolumn = listcolum.item(j);

if (first ==0 && ncolumn.getNodeType() == Node.ELEMENT_NODE) {

Element lelement = (Element) ncolumn;

sqltable = sqltable + lelement.getAttribute("name") + "

"+lelement.getAttribute("type")+",PRIMARY KEY("+lelement.getAttribute("name")+"),"; first = 1;

}

else if (ncolumn.getNodeType() == Node.ELEMENT_NODE && j != listcolum.getLength()-2) {

Element lelement = (Element) ncolumn;

}

else if(ncolumn.getNodeType() == Node.ELEMENT_NODE ) {

Element lelement = (Element) ncolumn;

sqltable = sqltable + lelement.getAttribute("name") + " "+lelement.getAttribute("type") + ")"; first = 0; } } } System.out.println(sqltable); st.executeUpdate(sqltable); }

// Add data into column

NodeList listtable = doc.getElementsByTagName("table"); boolean firstcl = true;

int savej = 0;

for(int i = 0; i < listtable.getLength(); i++) // review table {

Node tabnode = listtable.item(i); // get node table

if (tabnode.getNodeType() == Node.ELEMENT_NODE ) {

Element etable = (Element) tabnode; // get element table NodeList listcloumn = etable.getChildNodes(); // get list column

for(int j = 0; j < listcloumn.getLength(); j++)// review column {

Node nodecolumn = listcloumn.item(j); // get node column if (nodecolumn.getNodeType() == Node.ELEMENT_NODE ) {

Element ecolumn = (Element) nodecolumn; // get element column NodeList listdata = ecolumn.getChildNodes(); // get list data of column for(int k = 0; k < listdata.getLength(); k++)

{

Node nodedata = listdata.item(k); //System.out.println(firstcl);

if(nodedata.getNodeType() == Node.ELEMENT_NODE && firstcl == true) {

Element edata = (Element) nodedata;

String sql = "INSERT INTO "+etable.getAttribute("name") + "("+ecolumn.getAttribute("name")+") VALUES ('"+edata.getXMLContent()+"')";

//System.out.println(sql); st.executeUpdate(sql); }

else if(nodedata.getNodeType() == Node.ELEMENT_NODE && firstcl == false)

{

Element edata = (Element) nodedata;

Node Fnode = listcloumn.item(savej); // get Node trước node column đang chạy

Element Felement = (Element) Fnode;

NodeList ListDataFnode = Fnode.getChildNodes(); Element EdataFnode = (Element) ListDataFnode.item(k); String sql = "UPDATE "+etable.getAttribute("name")+" SET "+ecolumn.getAttribute("name")+"='"+edata.getXMLContent()+"' WHERE "+Felement.getAttribute("name")+"='"+EdataFnode.getXMLContent()+"'"; //System.out.println(sql); st.executeUpdate(sql); } // chuyen data } savej = j; firstcl = false; } // chuyen column } firstcl = true; } } fXMLFile.delete(); } catch (Exception ex) {

System.out.println("ERROR : "+ex); }

Node nValue = (Node) nlList.item(0);

return nValue.getNodeValue();

}

5. Code mã hóa file Excel

encoding enc = new encoding(key); try

{

File fexcel = new File(urlfileexcel); Workbook w;

File tg = new File(urlfiletxt);

FileOutputStream fos = new FileOutputStream(tg); PrintWriter pw = new PrintWriter(fos);

w = Workbook.getWorkbook(fexcel); // Get the first sheet

Sheet[] listsheet = w.getSheets(); // Loop over first 10 column and lines

pw.println(enc.encode("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")); pw.println(enc.encode("<mysql>"));

//System.out.println("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>"); //System.out.println("<excel>");

for(int i = 0; i < listsheet.length; i++)// duyet cac sheet {

pw.println(enc.encode("<table name = \""+listsheet[i].getName()+"\">"));// table == sheet

for (int j = 0; j < listsheet[i].getColumns(); j++) {

Cell namecl = listsheet[i].getCell(j, 0); Cell typecl = listsheet[i].getCell(j, 1); String type;

if( typecl.getType().toString() == "Number") type = "FLOAT(12)";

pw.println(enc.encode("<column name =\""+namecl.getContents()+"\" type = \""+type+"\" >"));

for (int k = 1; k < listsheet[i].getRows(); k++) // hang dau tien la column // hang thu >2 data

{

Cell cell = listsheet[i].getCell(j, k);

pw.println(enc.encode("<data>"+cell.getContents()+"</data>")); } pw.println(enc.encode("</column>")); } pw.println(enc.encode("</table>")); } pw.println(enc.encode("</mysql>")); pw.close(); fos.close(); return 1; } catch (Exception e) { System.out.println("ERROR : "+e); return 0; }

6. Code mã hóa CSDL MySQL

Connection con = null;

String url = "jdbc:mysql://localhost:3306/"; String db = dbf;

String driver ="com.mysql.jdbc.Driver"; String user = userf; // nguoi dung nhap String pass = passf; // nguoi dung nhap String tablename;

//String tg; int i;

{

Class.forName(driver).newInstance();

con = DriverManager.getConnection(url+db,user,pass);

File tg = new File(urlf);

FileOutputStream fos = new FileOutputStream(tg); PrintWriter pw = new PrintWriter(fos);

encoding enc = new encoding(key);

pw.println(enc.encode("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")); pw.println(enc.encode("<mysql>")); try{ Statement stm = con.createStatement(); DatabaseMetaData dbm = con.getMetaData();

String[] types = {"TABLE"};

ResultSet rstb = dbm.getTables(null, null,"%", types); while (rstb.next()) { tablename=rstb.getString("TABLE_NAME"); //enc.encode pw.println(enc.encode("<table name=\""+tablename+"\">"));

ResultSet rs = stm.executeQuery("select *from "+tablename); ResultSetMetaData rsm = rs.getMetaData();

colnum = rsm.getColumnCount(); //System.out.println("Minh : "+colnum); for ( i = 1; i <= colnum; i++)

{

String column = rsm.getColumnName(i);

pw.println(enc.encode("<column name = \""+column+"\" type = \""+rsm.getColumnTypeName(i)+"("+rsm.getColumnDisplaySize(i) +")" +"\">"));

while(rs.next()) { String s = rs.getString(column); pw.println(enc.encode("<data>"+s+"</data>")); //System.out.println(s); }

rs = stm.executeQuery("select *from "+tablename); pw.println(enc.encode("</column>")); } pw.println(enc.encode("</table>")); } pw.println(enc.encode("</mysql>")); pw.close(); fos.close(); return 1; }catch(SQLException s) { System.out.println("khong co table : "+s); return 0; } } catch(Exception e) {

System.out.println(" ERROR CONNECT : "+e); return 0; } finally { if (con != null) { try { con.close (); }

catch (Exception e) { /* bo qua loi luc dong csdl */ } }

7. Code giải mã chuyển sang file excel

Label label = null;

Number number = null; tool tl = new tool();

tl.translatefile(urlfiletxt,key); try{

// Create XML file

File fin = new File(urlfiletxt);

File fXmlFile = new File(fin.getParent()+"\\"+"temp.xml");

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

Document doc = dBuilder.parse(fXmlFile); doc.getDocumentElement().normalize(); // Creat Excel file

File file = new File(urlfileexcel);

WorkbookSettings wbSettings = new WorkbookSettings(); wbSettings.setLocale(new Locale("en", "EN"));

WritableWorkbook workbook = Workbook.createWorkbook(file, wbSettings);

// Config Font excel

WritableFont times13pt = new WritableFont(WritableFont.TIMES, 13); // Define the cell format

times = new WritableCellFormat(times13pt); // Lets automatically wrap the cells

times.setWrap(true);

// Create create a bold font with unterlines

WritableFont times13ptBoldUnderline = new WritableFont(WritableFont.TIMES, 13,

Một phần của tài liệu Xây dựng phần mềm mã hóa và chuyển đổi dữ liệu giữa Excel và MySQL. (Trang 28)

Tải bản đầy đủ (PDF)

(64 trang)