#眉標=Java #副標=智慧型樂高機器人與Java程式開發(7) #大標=實作NXT資料記錄與分析功能 #作者=文/圖 何致億 ============= 程式1:FileDAO.java 01. package persistence; 02. import java.io.*; 03. 04. public class FileDAO { 05. private File file = null; 06. private PrintWriter out; 07. 08. public FileDAO(String filename, boolean append) { 09. openFile(filename,append); 10. } 11. 12. private void openFile(String filename, boolean append) { 13. try { 14. file = new File(filename); 15. out = new PrintWriter(new FileWriter(file,append)); 16. } catch (IOException e) { 17. e.printStackTrace(); 18. } 19. } 20. 21. public void writeData(int data) { 22. out.println(data); 23. } 24. 25. public void closeFile() { 26. out.close(); 27. } 28. } ================ ============= 程式2:TestFileDAO.java 01. package persistence; 02. 03. public class TestFileDAO { 04. public static void main(String[] args) { 05. FileDAO file = new FileDAO("TestFileDAO.txt", false); 06. file.writeData(1); 07. file.writeData(2); 08. file.writeData(3); 09. file.closeFile(); 10. } 11. } ================ ============= 程式3:SaveLightValueToFile.java 01. package persistence; 02. import icommand.nxtcomm.NXTCommand; 03. import icommand.platform.nxt.*; 04. 05. public class SaveLightValueToFile { 06. public static void main(String[] args) { 07. int counts = 100; 08. long start = 0; 09. long end = 0; 10. String filename = "Light1.txt"; 11. 12. Light light1 = new Light(Sensor.S1); 13. FileDAO file = new FileDAO(filename,false); 14. 15. start = System.currentTimeMillis(); 16. 17. for(int i=0; i < counts ; i++) { 18. file.writeData(light1.getLightPercent()); 19. } 20. 21. end = System.currentTimeMillis(); 22. 23. System.out.println("讀取 "+counts+" 次, 經過 "+ 24. (end-start)+" 毫秒"); 25. System.out.println(counts +"筆資料已儲存至檔案:" + filename); 26. file.closeFile(); 27. NXTCommand.close(); 28. } 29. } ================ ============= 程式4 01. package persistence; 02. import java.sql.*; 03. 04. public class OracleDAO { 05. private String driver = "oracle.jdbc.driver.OracleDriver"; 06. private String url = "jdbc:oracle:thin:@localhost:1521:XE"; 07. private Connection conn = null; 08. private Statement stmt = null; 09. private ResultSet rs = null; 10. private String selectCmd = "SELECT * FROM LightSensor"; 11. private String deleteCmd = "DELETE LightSensor"; 12. private String insertCmd = null; 13. 14. public OracleDAO() { 15. createConnection(); 16. } 17. 18. private void createConnection() { 19. try { 20. Class.forName(driver); 21. conn = DriverManager.getConnection(url, "nxt", "nxt"); 22. stmt = conn.createStatement(); 23. } catch (ClassNotFoundException e) { 24. e.printStackTrace(); 25. } catch (SQLException e) { 26. e.printStackTrace(); 27. } 28. } 29. 30. public void insertData(String nxtname,int port,int value) { 31. insertCmd="INSERT INTO LightSensor(nxtname,port,value)"+ 32. "VALUES ('"+nxtname+"',"+port+","+value+")"; 33. try { 34. stmt.executeUpdate(insertCmd); 35. } catch (SQLException e) { 36. e.printStackTrace(); 37. } 38. } 39. 40. public void deleteTable() { 41. try { 42. stmt.executeUpdate(deleteCmd); 43. } catch (SQLException e) { 44. e.printStackTrace(); 45. } 46. } 47. 48. public void queryTable() { 49. try { 50. rs = stmt.executeQuery(selectCmd); 51. while (rs.next()) { 52. System.out.println(rs.getString("value")); 53. } 54. rs.close(); 55. } catch (SQLException e) { 56. e.printStackTrace(); 57. } 58. } 59. 60. public void closeConnection(){ 61. try { 62. stmt.close(); 63. conn.close(); 64. } catch (SQLException e) { 65. e.printStackTrace(); 66. } 67. } 68. } ================ ==<反灰>=========== 01. CREATE TABLE LightSensor( 02. nxtname VARCHAR2(10), 03. port NUMBER, 04. value NUMBER, 05. logtime TIMESTAMP DEFAULT LOCALTIMESTAMP 06. ); ================ ============= 程式5:SaveLightVauleToDB.java 01. package persistence; 02. import icommand.nxtcomm.NXTCommand; 03. import icommand.platform.nxt.*; 04. 05. public class SaveLightValueToDB { 06. public static void main(String[] args) { 07. int counts = 100; 08. long start = 0; 09. long end = 0; 10. Light light1 = new Light(Sensor.S1); 11. OracleDAO db = new OracleDAO(); 12. 13. db.deleteTable(); 14. start = System.currentTimeMillis(); 15. 16. for(int i=0; i < counts ; i++) { 17. db.insertData("Rich", 1, light1.getLightPercent()); 18. } 19. 20. end = System.currentTimeMillis(); 21. 22. System.out.println("讀取 "+counts+" 次, 經過 "+ 23. (end-start)+" 毫秒"); 24. System.out.println(counts +"筆資料已儲存至資料庫"); 25. NXTCommand.close(); 26. } 27. } ================