我需要在tomcat启动之后不停的执行某些操作,所以写了三个servlet,都是在服务器启动的时候加载的,然后在servlet中开线程,自动的执行。但是出现一个问题,tomcat一启动,在servlet中连接数据库的时候,有时候会出现如下错误:
java.sql.SQLException: No suitable driver found for jdbc:sqlserver://192.168.1.23; DatabaseName=RFIDPTLSM
at java.sql.DriverManager.getConnection(DriverManager.java:602)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at net.superrfid.common.dataMaintain.thread.DataMaintain.run(DataMaintain.java:48)
at java.lang.Thread.run(Thread.java:619)
但是前两个servlet中连接数据库就不会出现这个问题,代码都是一样的,线程类中的run()方法如下:
public void run() {
this.xmlP();
Connection dbConn;
DataMaintainDao dao;
while (true) {
try {
dbConn = DriverManager.getConnection(DB_URL,DB_USERNAME,DB_PASSWORD);
dbConn.setAutoCommit(true);
dao = new DataMaintainDao();
dao.maintainRealtimeData(dbConn);
// 每8秒钟运行一次
Thread.sleep(8*1000);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
但是有时候就不会有上面的异常,很郁闷。最后我在servlet中开启线程之前先sleep()三四秒,这就没有问题了。不知道到底怎么回事儿。劳烦各位看看!
java.sql.SQLException: No suitable driver found for jdbc:sqlserver://192.168.1.23; DatabaseName=RFIDPTLSM
at java.sql.DriverManager.getConnection(DriverManager.java:602)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at net.superrfid.common.dataMaintain.thread.DataMaintain.run(DataMaintain.java:48)
at java.lang.Thread.run(Thread.java:619)
但是前两个servlet中连接数据库就不会出现这个问题,代码都是一样的,线程类中的run()方法如下:
public void run() {
this.xmlP();
Connection dbConn;
DataMaintainDao dao;
while (true) {
try {
dbConn = DriverManager.getConnection(DB_URL,DB_USERNAME,DB_PASSWORD);
dbConn.setAutoCommit(true);
dao = new DataMaintainDao();
dao.maintainRealtimeData(dbConn);
// 每8秒钟运行一次
Thread.sleep(8*1000);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
但是有时候就不会有上面的异常,很郁闷。最后我在servlet中开启线程之前先sleep()三四秒,这就没有问题了。不知道到底怎么回事儿。劳烦各位看看!
解决方案 »
- invalid OCI operation
- 问个非常基础的问题
- Servlet中如何建立可多次访问的对象?
- 用javamail做了一个邮件系统,收发都实现了,怎么实现注册?(邮件服务器是CMailServer)
- jsp考试系统怎么随机出题
- 高手请进,新闻发布的问题!!!!!!!
- 我现在正做一个项目,遇到点儿棘手的问题,不知道怎么解决,希望高手们帮我出出主意。
- 一个连接池(DBConnectionManager.class)的数据库操作operate.class,但是,我不会修改。怎么办?有什么好的办法。谢谢!
- 设置了404出错页面但是怎么也跳不过去?
- mybatis错误求助
- MyEclipse8.5中使用Struts2的问题
- 大家界面都怎么做?哪里有插件下载?
SQLServerDriver drv = new SQLServerDriver();
Properties p = new Properties();
String url = DB_URL+";user="+DB_USERNAME+";password="+DB_PASSWORD+";";
Connection dbConn = drv.connect(url, p);
采用这种方式连接数据库之后,servlet中不使用sleep(3*1000)也没有问题了。之前要在同一个方法中连接两个数据库,用JDBC不能实现,就直接使用了如上的方式连接两个数据库。现在这个问题中又试用上述方式连接数据库从而避免了java.sql.SQLException: No suitable driver found for jdbc:sqlserver这样的异常。
采用JDBC和直接试用SQLServerDriver包连接数据库到底有何区别?劳烦各位说说。
我猜你先前用的是forName动态加载Driver类的。
web.xml中如下:
<servlet>
<servlet-name>DataMaintainServlet</servlet-name>
<servlet-class>net.superrfid.common.dataMaintain.servlet.DataMaintainServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>