首页 > 解决方案 > 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();
    }
}

标签: javajdbcodbc

解决方案


推荐阅读