CDatabase.java
上传用户:shunchung
上传日期:2013-04-07
资源大小:438k
文件大小:8k
源码类别:

手机短信编程

开发平台:

Java

  1. // jSMSEngine API.
  2. // An open-source API package for sending and receiving SMS via a GSM device.
  3. // Copyright (C) 2002-2006, Thanasis Delenikas, Athens/GREECE
  4. // Web Site: http://www.jsmsengine.org
  5. //
  6. // jSMSEngine is a package which can be used in order to add SMS processing
  7. // capabilities in an application. jSMSEngine is written in Java. It allows you
  8. // to communicate with a compatible mobile phone or GSM Modem, and
  9. // send / receive SMS messages.
  10. //
  11. // jSMSEngine is distributed under the LGPL license.
  12. //
  13. // This library is free software; you can redistribute it and/or
  14. // modify it under the terms of the GNU Lesser General Public
  15. // License as published by the Free Software Foundation; either
  16. // version 2.1 of the License, or (at your option) any later version.
  17. // This library is distributed in the hope that it will be useful,
  18. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  20. // Lesser General Public License for more details.
  21. // You should have received a copy of the GNU Lesser General Public
  22. // License along with this library; if not, write to the Free Software
  23. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  24. //
  25. //
  26. // jSMSServer GUI Application.
  27. // This application is based on the old jSMSServer GUI, and provides a general purpose
  28. // graphical interface. It can be used for a quick-start, if you don't want
  29. // to mess around with the API itself.
  30. // Please read jSMSServer.txt for further information.
  31. //
  32. import java.io.*;
  33. import java.util.*;
  34. import java.net.*;
  35. import java.sql.*;
  36. import org.jsmsengine.*;
  37. class CDatabase
  38. {
  39. private CSettings settings;
  40. private CMainThread mainThread;
  41. private Connection connection;
  42. public CDatabase(CSettings settings, CMainThread mainThread)
  43. {
  44. this.settings = settings;
  45. this.mainThread = mainThread;
  46. connection = null;
  47. }
  48. public Connection getConnection() { return connection; }
  49. public boolean isOpen() { return (connection != null ? true : false); }
  50. public void open() throws Exception
  51. {
  52. Class.forName(settings.getDatabaseSettings().getDriver());
  53. connection = DriverManager.getConnection(settings.getDatabaseSettings().getUrl(), settings.getDatabaseSettings().getUsername(), settings.getDatabaseSettings().getPassword());
  54. connection.setAutoCommit(false);
  55. }
  56. public void close()
  57. {
  58. if (connection != null) try { connection.close(); } catch (Exception e) {}
  59. connection = null;
  60. }
  61. public void saveMessage(CIncomingMessage message) throws Exception
  62. {
  63. Statement sqlCmd;
  64. sqlCmd = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
  65. sqlCmd.executeUpdate("insert into sms_in (originator, message_date, text) values ('" + message.getOriginator() + "', " + escapeDate(message.getDate(), true) + ", '" + message.getText() + "')");
  66. connection.commit();
  67. sqlCmd.close();
  68. }
  69. public void saveSentMessage(COutgoingMessage message) throws Exception
  70. {
  71. Statement sqlCmd;
  72. if (connection != null)
  73. {
  74. sqlCmd = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
  75. sqlCmd.executeUpdate("insert into sms_out (recipient, text, dispatch_date) values ('" + message.getRecipient() + "', '" + message.getText() + "', " + escapeDate(message.getDate(), true) + ")");
  76. connection.commit();
  77. sqlCmd.close();
  78. }
  79. }
  80. public void checkForOutgoingMessages() throws Exception
  81. {
  82. Statement sqlCmd1, sqlCmd2;
  83. ResultSet rs;
  84. LinkedList messageList = new LinkedList();
  85. COutgoingMessage message;
  86. int batchLimit;
  87. batchLimit = settings.getPhoneSettings().getBatchOutgoing();
  88. sqlCmd1 = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
  89. rs = sqlCmd1.executeQuery("select count(*) as cnt from sms_out where dispatch_date is null");
  90. rs.next();
  91. if (rs.getInt("cnt") != 0)
  92. {
  93. rs.close();
  94. sqlCmd2 = connection.createStatement();
  95. rs = sqlCmd1.executeQuery("select * from sms_out where dispatch_date is null");
  96. while (rs.next())
  97. {
  98. if (messageList.size() > batchLimit) break;
  99. message = new COutgoingMessage(rs.getString("recipient").trim(), rs.getString("text").trim());
  100. message.setId("" + rs.getInt("id"));
  101. if (settings.getPhoneSettings().getMessageEncoding().equalsIgnoreCase("7bit")) message.setMessageEncoding(CMessage.MESSAGE_ENCODING_7BIT);
  102. else if (settings.getPhoneSettings().getMessageEncoding().equalsIgnoreCase("8bit")) message.setMessageEncoding(CMessage.MESSAGE_ENCODING_8BIT);
  103. else if (settings.getPhoneSettings().getMessageEncoding().equalsIgnoreCase("unicode")) message.setMessageEncoding(CMessage.MESSAGE_ENCODING_UNICODE);
  104. else message.setMessageEncoding(CMessage.MESSAGE_ENCODING_7BIT);
  105. messageList.add(message);
  106. }
  107. rs.close();
  108. mainThread.service.sendMessage(messageList);
  109. for (int i = 0; i < messageList.size(); i ++)
  110. {
  111. message = (COutgoingMessage) messageList.get(i);
  112. if (message.getDispatchDate() != null)
  113. {
  114. settings.getGeneralSettings().rawOutLog(message);
  115. if (mainThread.mainWindow != null)
  116. {
  117. mainThread.mainWindow.setOutTo(message.getRecipient());
  118. mainThread.mainWindow.setOutDate(message.getDispatchDate().toString());
  119. mainThread.mainWindow.setOutText(message.getText());
  120. }
  121. else
  122. {
  123. System.out.println(CConstants.TEXT_OUTMSG);
  124. System.out.println("t" + CConstants.LABEL_OUTGOING_TO + message.getRecipient());
  125. System.out.println("t" + CConstants.LABEL_OUTGOING_DATE + message.getDate());
  126. System.out.println("t" + CConstants.LABEL_OUTGOING_TEXT + message.getText());
  127. }
  128. sqlCmd2.executeUpdate("update sms_out set dispatch_date = " + escapeDate(message.getDispatchDate(), true) + " where id = " + message.getId());
  129. }
  130. }
  131. sqlCmd2.close();
  132. connection.commit();
  133. }
  134. else
  135. {
  136. rs.close();
  137. connection.rollback();
  138. }
  139. sqlCmd1.close();
  140. }
  141. private String escapeDate(java.util.Date date, boolean includeTime)
  142. {
  143. String dateStr = "";
  144. Calendar calendar = Calendar.getInstance();
  145. calendar.setTime(date);
  146. switch (settings.getDatabaseSettings().getType())
  147. {
  148. case CSettings.CDatabaseSettings.DB_TYPE_SQL92:
  149. if (includeTime) dateStr = "{ts ?";
  150. else dateStr = "{d ?";
  151. dateStr += "" + calendar.get(Calendar.YEAR);
  152. dateStr += "-";
  153. dateStr += "" + (calendar.get(Calendar.MONTH) + 1);
  154. dateStr += "-";
  155. dateStr += "" + calendar.get(Calendar.DAY_OF_MONTH);
  156. if (includeTime)
  157. {
  158. }
  159. else dateStr += "?}";
  160. break;
  161. case CSettings.CDatabaseSettings.DB_TYPE_MSSQL:
  162. dateStr = "'";
  163. dateStr += calendar.get(Calendar.YEAR) + "-";
  164. dateStr += (calendar.get(Calendar.MONTH) + 1) + "-";
  165. dateStr += calendar.get(Calendar.DAY_OF_MONTH);
  166. if (includeTime)
  167. {
  168. dateStr += " ";
  169. dateStr += calendar.get(Calendar.HOUR_OF_DAY) + ":";
  170. dateStr += calendar.get(Calendar.MINUTE) + ":";
  171. dateStr += calendar.get(Calendar.SECOND);
  172. dateStr += "'";
  173. }
  174. else dateStr += "'";
  175. break;
  176. case CSettings.CDatabaseSettings.DB_TYPE_MYSQL:
  177. dateStr = "'";
  178. dateStr += calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" + calendar.get(Calendar.DAY_OF_MONTH);
  179. if (includeTime)
  180. dateStr += " " + calendar.get(Calendar.HOUR_OF_DAY) + ":" + calendar.get(Calendar.MINUTE) + ":" + calendar.get(Calendar.SECOND);
  181. dateStr += "'";
  182. break;
  183. }
  184. return dateStr;
  185. }
  186. }