我有一个连接到2个数据库的代码(一个是MySQL,另一个是Sybase)。 它从sybase中检索数据并将其存储在mysql中,然后对数据进行一些操作并对其进行过滤。过滤的数据作为短信发送到存储在MySQL数据库的一个表中的人员列表。这个循环每5分钟重复一次。 以下是我的代码:
package my.withgui;
import java.sql.*;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import static java.util.concurrent.TimeUnit.*;
public class gui extends javax.swing.JFrame {
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/alarm";
static final String JDBC_DRIVER_SECOND = "net.sourceforge.jtds.jdbc.Driver";
static final String DB_URL_SECOND = "jdbc:jtds:sybase://10.159.252.29:4100/fmdb";
static final String USER = "root";
static final String PASS = "Itarcy123";
static final String USER_SECOND = "sa";
static final String PASS_SECOND = "Changeme_123";
String a;
String b;
String c;
String d;
String str;
String keep;
int counter = 0;
String f;
String g;
String h;
int a1, a2,a3,a4;
String a5;
Connection conn = null;
Connection conn_2 = null;
PreparedStatement stmt = null;
PreparedStatement stmt1 = null;
PreparedStatement stmt2 = null;
PreparedStatement stmt3 = null;
PreparedStatement stmt4 = null;
PreparedStatement stmt5 = null;
PreparedStatement stmt6 = null;
PreparedStatement stmt7 = null;
PreparedStatement stmt8 = null;
PreparedStatement stmt9 = null;
public gui() {
initComponents();
}
public void beepForAnHour() {
final Runnable beeper = new Runnable() {
public void run() {
try{
String sql = "delete from newtable";
stmt5 = conn.prepareStatement(sql);
stmt5.executeUpdate(sql);
sql = "delete from sms21";
stmt6 = conn.prepareStatement(sql);
stmt6.executeUpdate(sql);
sql = "delete from sms23";
stmt3 = conn.prepareStatement(sql);
stmt3.executeUpdate(sql);
sql = "delete from sms1";
stmt7 = conn.prepareStatement(sql);
stmt7.executeUpdate(sql);
sql = "delete from sms2";
stmt8 = conn.prepareStatement(sql);
stmt8.executeUpdate(sql);
Statement stmt_1= conn_2.createStatement();
//change needed
String sql_1 = "select distinct tbl_alm_log_2000000000.Csn, tbl_alm_log_2000000000.IsCleared, tbl_alm_log_2000000000.Id,tbl_alm_log_2000000000.NEType, tbl_alm_log_2000000000.OccurTime, tbl_alm_log_2000000000.hostIP, tbl_alm_log_2000000000.ExtendInfo From fmdb.dbo.tbl_alm_log_2000000000 Where IsCleared = 0";
ResultSet rs = stmt_1.executeQuery(sql_1);
String sql_2 = "insert into newtable (CSN, IsCleared, Id, NEType, OccurTime, hostIP) values(?,?,?,?,?,?)";
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement(sql_2);
final int batchSize = 1000;
int count = 0;
while (rs.next()){
a = rs.getString(3); //Id
if(a.equals("301"))
{
str = rs.getString(7);
keep = str.substring(str.indexOf("neIP=")+5,str.indexOf(", neBackupIP"));
ps.setString(1, rs.getString(1)); //csn
ps.setString(2, rs.getString(2)); //iscleared
ps.setString(3, rs.getString(3));//id
ps.setString(4, rs.getString(4));//netype
ps.setString(5, rs.getString(5));//occurtime
ps.setString(6, keep);//hostip
}else
{
ps.setString(1, rs.getString(1)); //csn
ps.setString(2, rs.getString(2)); //iscleared
ps.setString(3, rs.getString(3));//id
ps.setString(4, rs.getString(4));//netype
ps.setString(5, rs.getString(5));//occurtime
ps.setString(6, rs.getString(6));//hostip
}
ps.addBatch();
if(++count % batchSize == 0) {
ps.executeBatch();
}
}
ps.executeBatch(); // insert remaining records
conn.commit();
ps.close();
System.out.println("done1");
Statement stmt_3 = conn.createStatement();
sql = "select newtable.csn, newtable.Id, newtable.hostIP, newtable.OccurTime from newtable join list on newtable.Id = list.NEFDNId";
ResultSet rs_1 = stmt_3.executeQuery(sql);
Statement stmt_4 = conn.createStatement();
sql = "select list.Index_Name from list join newtable on newtable.Id = list.NEFDNId";
ResultSet rs_2 = stmt_4.executeQuery(sql);
sql_2 = "Insert into sms1 (Csn, Id, hostIP, alarm, OccurTime) values(?,?,?,?,?)";
conn.setAutoCommit(false);
PreparedStatement ps_1 = conn.prepareStatement(sql_2);
final int batchSize_1 = 1000;
int count_1 = 0;
while(rs_1.next()&&rs_2.next())
{
ps_1.setString(1, rs_1.getString(1));
ps_1.setString(2, rs_1.getString(2));
ps_1.setString(3, rs_1.getString(3));
ps_1.setString(4, rs_2.getString(1));
ps_1.setString(5, rs_1.getString(4));
ps_1.addBatch();
if(++count_1 % batchSize_1 == 0) {
ps_1.executeBatch();
}
}
ps_1.executeBatch(); // insert remaining records
conn.commit();
ps_1.close();
System.out.println("done2");
/////////////////////////////////////////////////////////////////////////
Statement stmt_5 = conn.createStatement();
sql = "Select sitelist.Site, sitelist.OAM_IP, sitelist.SMS_Infra, sitelist.SMS_Numbers_Telecom from sitelist join newtable on newtable.hostIP = sitelist.OAM_IP";
ResultSet rs_3 = stmt_5.executeQuery(sql);
sql_2 = "Insert into sms2 (Site, OAM_IP, SMS_Infra,SMS_Numbers_Telecom) values(?,?,?,?)";
conn.setAutoCommit(false);
PreparedStatement ps_2 = conn.prepareStatement(sql_2);
final int batchSize_2 = 1000;
int count_2 = 0;
while(rs_3.next())
{
ps_2.setString(1, rs_3.getString(1));
ps_2.setString(2, rs_3.getString(2));
ps_2.setString(3, rs_3.getString(3));
ps_2.setString(4, rs_3.getString(4));
ps_2.addBatch();
if(++count_2 % batchSize_2 == 0) {
ps_2.executeBatch();
}
// System.out.println(a+" "+b+" "+c);
}
ps_2.executeBatch(); // insert remaining records
conn.commit();
ps_2.close();
System.out.println("done3");
///////////////////////////////
Statement stmt_6 = conn.createStatement();
sql = "select distinct sms1.Csn, sms1.OccurTime, sms2.Site, sms2.OAM_IP, sms2.SMS_Infra, sms2.SMS_Numbers_Telecom, sms1.Id, sms1.alarm from sms2, sms1 where sms2.OAM_IP = sms1.hostIP";
ResultSet rs_4 = stmt_6.executeQuery(sql);
//////////////////// making current table ;
sql_2 = "Insert into sms21 (csn, OccurTime, Site, OAM_IP, SMS_Infra,SMS_Numbers_Telecom, alarmID, alarmName, overdue) values(?,?,?,?,?,?,?,?,?)";
conn.setAutoCommit(false);
PreparedStatement ps_3 = conn.prepareStatement(sql_2);
final int batchSize_3 = 1000;
int count_3 = 0;
while(rs_4.next())
{
a = rs_4.getString(3); //site name
b = rs_4.getString(6); //mobile no
c = rs_4.getString(8); // alarm name
ps_3.setString(1, rs_4.getString(1));
ps_3.setString(2, rs_4.getString(2));
ps_3.setString(3, rs_4.getString(3));
ps_3.setString(4, rs_4.getString(4));
ps_3.setString(5, rs_4.getString(5));
ps_3.setString(6, rs_4.getString(6));
ps_3.setString(7, rs_4.getString(7));
ps_3.setString(8, rs_4.getString(8));
ps_3.setString(9, "1");
ps_3.addBatch();
if(++count_3 % batchSize_3 == 0) {
ps_3.executeBatch();
}
}
ps_3.executeBatch(); // insert remaining records
conn.commit();
ps_3.close();
// System.out.println("all sms send");
System.out.println("done4");
////////////////////////////////////////////////////////////////////////// changes from here
Statement stmt_7 = conn.createStatement();
sql = "select sms21.csn, sms21.OccurTime, sms21.Site, sms21.OAM_IP, sms21.SMS_Infra, sms21.SMS_Numbers_Telecom, sms21.alarmID, sms21.alarmName, coalesce(sms22.overdue,sms21.overdue) as overdue from sms21 left join sms22 on(sms22.csn = sms21.csn)";
ResultSet rs_5 = stmt_7.executeQuery(sql);
sql_2 = "Insert into sms23 (csn, OccurTime, Site, OAM_IP, SMS_Infra,SMS_Numbers_Telecom, alarmID, alarmName, overdue) values(?,?,?,?,?,?,?,?,?)";
conn.setAutoCommit(false);
PreparedStatement ps_4 = conn.prepareStatement(sql_2);
final int batchSize_4 = 1000;
int count_4 = 0;
while(rs_5.next())
{
ps_4.setString(1, rs_5.getString(1));
ps_4.setString(2, rs_5.getString(2));
ps_4.setString(3, rs_5.getString(3));
ps_4.setString(4, rs_5.getString(4));
ps_4.setString(5, rs_5.getString(5));
ps_4.setString(6, rs_5.getString(6));
ps_4.setString(7, rs_5.getString(7));
ps_4.setString(8, rs_5.getString(8));
ps_4.setString(9, rs_5.getString(9));
ps_4.addBatch();
if(++count_4 % batchSize_4 == 0) {
ps_4.executeBatch();
}
}
ps_4.executeBatch(); // insert remaining records
conn.commit();
ps_4.close();
System.out.println("done!!");
conn.setAutoCommit(true);
System.out.println("done5");
//////sending alarm sms
Statement stmt_8 = conn.createStatement();
sql = "select OccurTime, Site, SMS_Infra, SMS_Numbers_Telecom, alarmName, overdue, alarmID from sms23";
ResultSet rs_6 = stmt_8.executeQuery(sql);
while(rs_6.next())
{
a = rs_6.getString(1); //time
b = rs_6.getString(2); //site
c = rs_6.getString(3); //sms_infra
d = rs_6.getString(4); //sms no
f = rs_6.getString(5); //alarm name
g = rs_6.getString(6); // overdue
h = rs_6.getString(7); //perungudi alarm mains fail
// System.out.println(g);
a1 = Integer.valueOf(a) % 86400;
a2 = a1/3600;
a3 = a1 % 3600;
a4 = a3/60;
a5 = Integer.toString(a2)+"Hrs "+Integer.toString(a4)+" Mins";
if (g.equals("1"))
{
//alarm in site at time
// f+" in "+b+" at "+a5
try{
String z = "\u2193 "+f+" in "+b+" at "+a5;
String encodedURL = java.net.URLEncoder.encode(z, "utf-8");
String link;
if(b.equals("CBE_MSC_Coimbatore_Idea_Crit")||b.equals("CHN_Perungudi_BSC_Idea"))
{
link = "sms link";
}
else
{
link = "sms link";
}
URL myURL = new URL(link);
URLConnection myURLConnection = myURL.openConnection();
myURLConnection.connect();
myURLConnection.getInputStream();
// System.out.println("restoration send");
}catch(IOException e)
{
e.printStackTrace();
}
}
// overdue
}
System.out.println("done6");
Statement stmt_9 = conn.createStatement();
sql = "select * from sms22 where sms22.csn not in (select sms21.csn from sms21 group by sms21.csn)";
ResultSet rs_7 = stmt_9.executeQuery(sql);
while(rs_7.next())
{
d = rs_7.getString(2); //time
a = rs_7.getString(3);
b = rs_7.getString(6);
c = rs_7.getString(8);
a1 = Integer.valueOf(d) % 86400;
a2 = a1/3600;
a3 = a1 % 3600;
a4 = a3/60;
a5 = Integer.toString(a2)+"Hrs "+Integer.toString(a4)+" Mins";
try{
d = "\u2191 "+c+" is cleared in "+a;
String encodedURL = java.net.URLEncoder.encode(d, "utf-8");
String link1;
if(a.equals("CBE_MSC_Coimbatore_Idea_Crit")||a.equals("CHN_Perungudi_BSC_Idea"))
{
link1 = "sms link";
}
else
{
link1 = "sms link";
}
URL myURL = new URL(link1);
URLConnection myURLConnection = myURL.openConnection();
myURLConnection.connect();
myURLConnection.getInputStream();
//System.out.println("restoration send");
}catch(IOException e)
{
e.printStackTrace();
}
}
sql = "delete from sms22";
stmt1 = conn.prepareStatement(sql);
stmt1.executeUpdate(sql);
System.out.println("done!!");
sql = "Insert into sms22 select * from sms23";
stmt2 = conn.prepareStatement(sql);
stmt2.executeUpdate(sql);
System.out.println("done!!");
sql = "delete from sms23";
stmt3 = conn.prepareStatement(sql);
stmt3.executeUpdate(sql);
sql = "update sms22 set overdue = overdue+1";
stmt4 = conn.prepareStatement(sql);
stmt4.executeUpdate(sql);
sql = "delete from newtable";
stmt5 = conn.prepareStatement(sql);
stmt5.executeUpdate(sql);
sql = "delete from sms21";
stmt6 = conn.prepareStatement(sql);
stmt6.executeUpdate(sql);
sql = "delete from sms1";
stmt7 = conn.prepareStatement(sql);
stmt7.executeUpdate(sql);
sql = "delete from sms2";
stmt8 = conn.prepareStatement(sql);
stmt8.executeUpdate(sql);
System.out.println("done!!");
}catch(SQLException se){
se.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
System.out.println("beep"); }
};
final ScheduledFuture<?> beeperHandle =
scheduler.scheduleAtFixedRate(beeper, 5, 5, MINUTES);
/*scheduler.schedule(new Runnable() {
public void run() { beeperHandle.cancel(true); }
},24*60, MINUTES);*/
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText("START");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton2.setText("STOP");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(154, 154, 154)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap(181, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(85, 85, 85)
.addComponent(jButton1)
.addGap(67, 67, 67)
.addComponent(jButton2)
.addContainerGap(102, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try{
Class.forName(JDBC_DRIVER);
System.out.println("connecting to database mysql");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
System.out.println("connected to database successfully");
Class.forName(JDBC_DRIVER_SECOND);
System.out.println("connecting to database SYBASE");
conn_2 = DriverManager.getConnection(DB_URL_SECOND, USER_SECOND, PASS_SECOND);
System.out.println("connected to database successfully");
}catch(SQLException se){
se.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
beepForAnHour();
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(gui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(gui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(gui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(gui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new gui().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
// End of variables declaration
}
我正在通过java执行SQL查询,因为我的gole是自动化我的进程,即向相关人员发送短信警报。有一次我得到了Java堆空间错误(但只有一次),现在netbeans刚刚进入。 我是java语言的新手,想要改进我的代码的建议。我删除了一些代码以保持简短,因此可能会引入一些语法错误。
我使用的系统具有以下规格: 奔腾双核 2GB内存 Windows 7