private final Scheduler scheduler = new Scheduler(); private final SimpleDateFormat dateFormat = new SimpleDateFormat("dd MMM yyyy HH:mm:ss.SSS"); private final int hourOfDay, minute, second; private final String sqlUp="SELECT wellid,yiled FROM CurrentRec";} 这是一个定时启动的线程,每天定时执行一次! 看看可能是什么问题? 数据库当然还有别的线程和进程在访问!
Connection conUp=DriverManager.getConnection("jdbc:odbc:SqlHandle");
Statement stmtUp=conn.createStatement();
stmtUp.executeUpdate("UPDATE CurrentRec SET yiled=0");
stmtUp.close();
conUp.close();
第二句的异常,程序直接退出.
我测试过,同一个表,同时多线程写入和读出没问题啊!
是 什么 意思?
也没有用到什么jar啊,用到的控制串口的comm.jar必须放到lib目录下呀!
劳烦大家都帮我想一下,java forume也有人提过此类问题,但是没人回答,不知是不是被
报告过bug.
import java.net.URL;
import java.io.*;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.StringTokenizer;
import java.util.*;import timer.Scheduler;
import timer.SchedulerTask;
import timer.DailyIterator;class ServerTask{
public ServerTask(int hourOfDay, int minute, int second) {
this.hourOfDay = hourOfDay;
this.minute = minute;
this.second = second;
System.out.println("ServerTask thread was started!\n" +
"The time is "+hourOfDay+":"+minute+":"+second+".");
}
public void start(){
scheduler.schedule(new SchedulerTask(){
public void run(){
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(java.lang.Exception ex){ex.printStackTrace();}
//---------------
//SqlHandle sqlHndl=new SqlHandle();
dayDeal();
//---------------
}
private void dayDeal(){
System.out.println("Data update! " +
"It's " + dateFormat.format(new Date()));
dayRecUpdate();
dayState();
}
private void dayRecUpdate(){
String dateVal=Utility.getDate();
try{
Connection conn=DriverManager.getConnection("jdbc:odbc:SqlHandle");
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(sqlUp);
while(rs.next()){
String newDay="INSERT INTO DayRec VALUES('"+rs.getString("wellid")+"','"+dateVal+"','"+rs.getInt("yiled")+"')";
Connection conIner=DriverManager.getConnection("jdbc:odbc:SqlHandle");
Statement stmtIner=conn.createStatement();
stmtIner.executeUpdate(newDay);
stmtIner.close();
conIner.close();
}
if(rs!=null) rs.close();
stmt.close();
conn.close();
}catch(SQLException e){e.printStackTrace();}
}
private void dayState(){
Vector vMsgQue=new Vector();
Vector vPrint=new Vector();
try{
Connection conn=DriverManager.getConnection("jdbc:odbc:SqlHandle");
Statement stmt=conn.createStatement();
ResultSet rss=stmt.executeQuery(sqlUp);
while(rss.next()){
String id=rss.getString("wellid");
int timeLen=(int)rss.getInt("yiled")/60;
String idArea=id.substring(0,2);
String areaName=Utility.queryAreaName(idArea);
String sqlNo="SELECT number FROM cellphone WHERE district='"+idArea+"'";
Connection conIner=DriverManager.getConnection("jdbc:odbc:SqlHandle");
Statement stmtIner=conn.createStatement();
ResultSet rsNo=stmtIner.executeQuery(sqlNo);
String sendCon=areaName+":"+id+"今日产油"+Integer.toString(timeLen)+"小时!";
while(rsNo.next()){
String cellNo=rsNo.getString("number");
vMsgQue.addElement(cellNo+"/"+sendCon);
}
vPrint.addElement(sendCon);
rsNo.close();
stmtIner.close();
conIner.close();
}
rss.close();
stmt.close();
conn.close();
Connection conUp=DriverManager.getConnection("jdbc:odbc:SqlHandle");
Statement stmtUp=conn.createStatement();
stmtUp.executeUpdate("UPDATE CurrentRec SET yiled=0");
-------------------------------------出问题的语句;
stmtUp.close();
conUp.close();
}catch(SQLException e){e.printStackTrace();} PrintMsg printObj=new PrintMsg(vPrint);
Thread printThrd=new Thread(printObj);
printThrd.start();
SndThrd sndObj=new SndThrd(vMsgQue);
Thread sndThrd=new Thread(sndObj);
sndThrd.start(); }
},new DailyIterator(hourOfDay,minute,second));
}
private final Scheduler scheduler = new Scheduler();
private final SimpleDateFormat dateFormat =
new SimpleDateFormat("dd MMM yyyy HH:mm:ss.SSS");
private final int hourOfDay, minute, second;
private final String sqlUp="SELECT wellid,yiled FROM CurrentRec";}
这是一个定时启动的线程,每天定时执行一次!
看看可能是什么问题?
数据库当然还有别的线程和进程在访问!