要每隔24小时运行java数据库连接中的线程吗

要每隔24小时运行java数据库连接中的线程吗,java,mysql,database,jdbc,thread-sleep,Java,Mysql,Database,Jdbc,Thread Sleep,这是我用来将从本地数据库获取的值插入在线数据库的代码。我从一个本地数据库获取数据,并将其中的每条记录上传到17个不同的在线表格中。代码正在成功运行,但在24小时结束时,代码会自动终止,并在线程睡眠时间后第二次停止运行。我不知道为什么会这样。请给我一个每24小时运行一次代码的解决方案 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statem

这是我用来将从本地数据库获取的值插入在线数据库的代码。我从一个本地数据库获取数据,并将其中的每条记录上传到17个不同的在线表格中。代码正在成功运行,但在24小时结束时,代码会自动终止,并在线程睡眠时间后第二次停止运行。我不知道为什么会这样。请给我一个每24小时运行一次代码的解决方案

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;

class online_data
{
    public static void main(String args[])
    {
        MyThread1 thread1 = new MyThread1();
        thread1.start();
    }
}
class MyThread1 extends Thread
{

    public void run()
    {
        try{  
          Class.forName("com.mysql.jdbc.Driver"); 

          //Connection1
          Connection con=DriverManager.getConnection("jdbc:mysql://sql124.main-hosting.eu/u678426119_kcg","u678426119_kcg","deepak"); 
          Statement stmt=con.createStatement();

          //Connection2
          Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/kcg","root","icdipl"); 
          Statement stmt2=conn.createStatement();
          int i = 1;
          String s = "online_data";

          while(true)
          {
            String s1 = s+i;
            //Date & Time
            Date dNow = new Date( );
            SimpleDateFormat ft = new SimpleDateFormat ("yyyy.MM.dd");
            SimpleDateFormat ft1 = new SimpleDateFormat ("hh:mm:ss");
            ResultSet rs=stmt2.executeQuery("select * from online_data");  
            while(rs.next())
            {
                String q="INSERT INTO "+s1+" VALUES ("+rs.getInt(1)+","+rs.getInt(2)+",'"+rs.getString(3)+"',"+rs.getFloat(4)+","+rs.getFloat(5)+","+rs.getFloat(6)+","+rs.getFloat(7)+","+rs.getFloat(8)+","+rs.getFloat(9)+","+rs.getFloat(10)+","+rs.getFloat(11)+","+rs.getFloat(12)+","+rs.getFloat(13)+","+rs.getFloat(14)+","+rs.getFloat(15)+","+rs.getFloat(16)+","+rs.getFloat(17)+","+rs.getFloat(18)+","+rs.getFloat(19)+","+rs.getFloat(20)+","+rs.getFloat(21)+","+rs.getFloat(22)+","+rs.getFloat(23)+",'"+rs.getString(24)+"',"+rs.getFloat(25)+",'"+rs.getString(26)+"',"+rs.getFloat(27)+",'"+rs.getString(28)+"',"+rs.getFloat(29)+","+rs.getFloat(30)+","+rs.getFloat(31)+","+rs.getFloat(32)+","+rs.getFloat(33)+","+rs.getFloat(34)+","+rs.getFloat(35)+",'"+rs.getString(36)+"',"+rs.getFloat(37)+",'"+rs.getString(38)+"','"+rs.getString(39)+"',"+rs.getFloat(40)+","+rs.getFloat(41)+","+rs.getFloat(42)+","+rs.getFloat(43)+","+rs.getFloat(44)+","+rs.getFloat(45)+","+rs.getFloat(46)+","+rs.getFloat(47)+","+rs.getFloat(48)+",'"+rs.getString(49)+"','"+rs.getString(50)+"',"+rs.getFloat(51)+","+rs.getFloat(52)+",'"+rs.getString(53)+"',"+rs.getFloat(54)+","+rs.getFloat(55)+","+rs.getFloat(56)+","+rs.getFloat(57)+","+rs.getFloat(58)+","+rs.getFloat(59)+","+rs.getFloat(60)+","+rs.getFloat(61)+","+rs.getFloat(62)+","+rs.getFloat(63)+","+rs.getFloat(64)+","+rs.getFloat(65)+","+rs.getFloat(66)+","+rs.getFloat(67)+","+rs.getFloat(68)+","+rs.getFloat(69)+","+rs.getFloat(70)+","+rs.getFloat(71)+","+rs.getFloat(72)+","+rs.getFloat(73)+","+rs.getFloat(74)+","+rs.getFloat(75)+","+rs.getFloat(76)+","+rs.getFloat(77)+","+rs.getFloat(78)+","+rs.getFloat(79)+","+rs.getFloat(80)+","+rs.getFloat(81)+","+rs.getFloat(82)+","+rs.getFloat(83)+","+rs.getFloat(84)+","+rs.getFloat(85)+","+rs.getFloat(86)+",'"+rs.getString(87)+"',"+rs.getFloat(88)+",'"+rs.getString(89)+"',"+rs.getFloat(90)+",'"+rs.getString(91)+"',"+rs.getFloat(92)+",'"+rs.getString(93)+"',"+rs.getFloat(94)+",'"+rs.getString(95)+"',"+rs.getFloat(96)+",'"+rs.getString(97)+"',"+rs.getFloat(98)+",'"+rs.getString(99)+"',"+rs.getFloat(100)+",'"+rs.getString(101)+"','"+ft.format(dNow)+"','"+ft1.format(dNow)+"')";
                stmt.executeUpdate(q);
                i+=1;
            }

            randomWait();
            i=1;
          }
          }catch(Exception e){ System.out.println(e);}  
    }


    void randomWait()
    {

        try {
           sleep((long)(1000*60*60*24));
        } catch (InterruptedException x) {
            System.out.println("Interrupted!");
         }
     }
 }

对于初学者,尝试将数据库连接移动到while循环中,并在处理完后(即线程进入睡眠之前)关闭它们


而不是在一个睡眠24小时的线程中执行所有这些操作,而是考虑在一个静态方法中这样做,封装一个类似的或类似的调用,并使用一个或相当于调度的东西。

尝试打开“Irrue(true)”中的连接,并在while循环结束时关闭连接。这样,您的连接将每24小时打开一次,然后执行选择/插入,然后连接将在执行所有数据库操作后立即关闭


如果希望程序在数据库操作失败期间(引发异常时)不终止,并在失败24小时后再次尝试选择/插入-则需要内部try/catch/finally块来捕获并记录/忽略异常。理想情况下,关闭连接应该在finally块中完成(在内部try/catch/finally块中)-在任何情况下关闭连接-无论数据库操作是否成功。

您真的只是在两个打开的数据库连接中睡了24小时吗?!?在这一点上,你可能会得到一个打印出来的异常,告诉你无限循环终止的确切原因,它可能涉及一个无效的连接…或者安排一个每24小时运行一次的cron作业我的意思是我只是试图回答这个问题。但是是的,我觉得这真的是错误的方式™.