java - JDBC java代码中的客户端任务太多错误
问题描述
我正在使用 Access 数据库我正在创建一个日历应用程序。当我尝试获取任务和事件的提醒时出现错误。我的问题是我没有关闭连接,但是如果我关闭连接,那么它将如何检查提醒。我应该如何继续关闭连接
这是错误:
获取当前事件数据时出错。java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 客户端任务过多。在 sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6964) 在 sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7121) 在 sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3080) ) 在 sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323) 在 sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174) 在 java.sql.DriverManager.getConnection(DriverManager.java:571)在 java.sql.DriverManager.getConnection(DriverManager.java:233) 在 database.DatabaseConnection.createConnection(DatabaseConnection.java:22) 在 database.DatabaseConnection.getCurrentTaskData(DatabaseConnection.java:71) 在 Home.TaskCheckThread。run(TaskCheckThread.java:24) 获取当前事件数据时出错。java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 客户端任务过多。在 sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6964) 在 sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7121) 在 sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3080) ) 在 sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323) 在 sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174) 在 java.sql.DriverManager.getConnection(DriverManager.java:571)获取当前事件数据时出错。在 java.sql.DriverManager.getConnection(DriverManager.java:233) 在 database.DatabaseConnection.createConnection(DatabaseConnection.java:22) 在 database.DatabaseConnection。
我的代码DatabaseConnection:
package database;
import javax.swing.JOptionPane;
public class DatabaseConnection
{
public Connection con;
public PreparedStatement ps,ps1;
public ResultSet rs,rs1;
private SimpleDateFormat simpleDateFormat;
public static Connection createConnection() throws Exception
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:Calendar");
return con;
}
public void closeConnection(Connection con)throws SQLException
{
con.close();
}
public ResultSet selectStatement(String sql)throws Exception
{
this.createConnection();
ps=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs=ps.executeQuery();
return rs;
}
public ResultSet getCurrentEventData() {
try {
con = this.createConnection();
} catch(Exception e) {
System.out.println("Error while getting current event data.");
e.printStackTrace();
}
String query = "SELECT * FROM Event where e_from_date like ? AND e_status like 'Not Viewed'";
simpleDateFormat = new SimpleDateFormat("dd-MMMMM-yyyy");
Calendar cal = Calendar.getInstance();
try {
ps = con.prepareStatement(query,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
ps.setString(1, simpleDateFormat.format(cal.getTime()));
rs = ps.executeQuery();
return rs;
}
catch (SQLException e) {
System.out.println("Failed while executing getAllReminders.");
e.printStackTrace();
}
return null;
}
public ResultSet getCurrentTaskData() {
try {
con = this.createConnection();
} catch(Exception e) {
System.out.println("Error while getting current event data.");
e.printStackTrace();
}
String query = "SELECT * FROM Task where t_date like ? AND t_rem_status like 'Not Viewed'";
simpleDateFormat = new SimpleDateFormat("dd-MMMMM-yyyy");
Calendar cal = Calendar.getInstance();
try {
ps = con.prepareStatement(query,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
ps.setString(1, simpleDateFormat.format(cal.getTime()));
rs = ps.executeQuery();
return rs;
} catch (SQLException e) {
System.out.println("Failed while executing TaskgetAllReminders.");
e.printStackTrace();
}
return null;
}
public void insertRecord(String table, String[] cols) {
String sql = "insert into " + table + " values(";
try {
this.createConnection();
} catch(Exception e) {
e.printStackTrace();
}
for(int i=0;i<cols.length;i++) {
if(i == cols.length-1) {
sql = sql + "'" + cols[i] + "')";
} else {
sql = sql + "'" + cols[i] + "',";
}
}
try {
ps = con.prepareStatement(sql);
if(ps.execute() == false) {
JOptionPane.showMessageDialog(null, "Record inserted successfully!");
} else {
JOptionPane.showMessageDialog(null, "Record not inserted.");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public void updateRecord(String table,String field,String sat,Object custid,String date)
{
String sql="update "+ table +" set "+ field +" = "+ "'" + sat + "'" + ",Date_c='"+date+"' where Cust_Id = " +custid;
try {
this.createConnection();
ps=con.prepareStatement(sql);
ps.executeUpdate();
if(ps.execute()==false)
{
JOptionPane.showMessageDialog(null, "Record Updated successfully!");
} else {
JOptionPane.showMessageDialog(null, "Record not Update");
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}
这是TaskCheckThread.java
package Home;
import java.sql.ResultSet;
import java.util.Calendar;
import javax.swing.JOptionPane;
import database.DatabaseConnection;
public class TaskCheckThread extends Thread
{
private DatabaseConnection dataWriter;
private ResultSet rs;
public TaskCheckThread()
{
dataWriter = new DatabaseConnection();
}
public void run()
{
while(true)
{
rs = dataWriter.getCurrentTaskData();
Calendar cal = Calendar.getInstance();
String tokens[] = null, str="";
try
{
if(rs != null)
{
while(rs.next())
{
tokens = rs.getString(7).split("-");
cal = Calendar.getInstance();
if(tokens[0].equals(""+cal.get(Calendar.HOUR)))
{
if((Integer.parseInt(tokens[1]) - cal.get(Calendar.MINUTE)) <= rs.getInt(11))
{
str += rs.getString(2) + rs.getString(3) + rs.getString(4);
JOptionPane.showMessageDialog(null, str);
rs.updateString(12, "Viewed");
rs.updateRow();
}
}
}
}
Thread.sleep(5000);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
}
这是ReminderCheckThread.java
package Home;
import java.sql.ResultSet;
import java.util.Calendar;
import javax.swing.JOptionPane;
import database.DatabaseConnection;
public class ReminderCheckThread extends Thread
{
private DatabaseConnection dataWriter;
private ResultSet rs;
public ReminderCheckThread()
{
dataWriter = new DatabaseConnection();
}
public void run()
{
while(true)
{
rs = dataWriter.getCurrentEventData();
Calendar cal = Calendar.getInstance();
String tokens[] = null, str="";
try {
if(rs != null)
{
while(rs.next())
{
tokens = rs.getString(13).split("-");
cal = Calendar.getInstance();
if(tokens[0].equals(""+cal.get(Calendar.HOUR)))
{
if((Integer.parseInt(tokens[1]) - cal.get(Calendar.MINUTE)) <= rs.getInt(15))
{
str += ""+"Title :-"+rs.getString(2)+"Location :-" + rs.getString(3)+"Description :-" + rs.getString(4);
JOptionPane.showMessageDialog(null, str);
rs.updateString(17, "Viewed");
rs.updateRow();
}
}
}
}
}
catch(Exception ex)
{
}
try
{
Thread.sleep(5000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
public static void main(String args[])
{
new ReminderCheckThread();
}
}
解决方案
推荐阅读
- java - 为什么 return 语句不退出 while 循环,而是返回到 while 循环的第一行?
- java - 将多个数组写入 Arraylist
- c++ - 从 C++ 更新 QML 对象的正确方法?
- python - 如何在seaborn的散点图中设置顶部(重叠)的色调
- python - 分配前引用的变量,但已正确分配
- python - 熊猫数据帧之间的 if 和语句
- python - 为什么函数调用在字典中的python中不起作用
- javascript - 无法删除/更新 ajax laravel 中的新项目
- reactjs - jsx中的条件和数组的映射
- html - 使用 Bootstrap 的响应式 img