&引用;“连接太多”;Java中的错误(MYSQLNonTransientConnectionException)

&引用;“连接太多”;Java中的错误(MYSQLNonTransientConnectionException),java,mysql,jdbc,Java,Mysql,Jdbc,我想将本地驱动器的每个文件名插入mysql数据库 当我执行这段代码时,它会完美地启动 读取目录中文件名的代码: public void main(String[] args)throws IOException { JOptionPane.showMessageDialog(null, "IT MAY TAKE SOMETIME TO LOAD \n PLEASE WAIT FOR CLOSING POPUP!!"); String s="D:\\"; Path sta

我想将本地驱动器的每个文件名插入mysql数据库

当我执行这段代码时,它会完美地启动

读取目录中文件名的代码:

public void main(String[] args)throws IOException {
    JOptionPane.showMessageDialog(null, "IT MAY TAKE SOMETIME TO LOAD \n PLEASE WAIT FOR CLOSING POPUP!!");
    String s="D:\\";

    Path startingDir = Paths.get(s);        
    String pattern="*";
    Finder finder = new Finder(pattern);
    Files.walkFileTree(startingDir, finder);

    JOptionPane.showMessageDialog(null,"close\n NOW PLEASE CLICK\nSEARCH MY FILE! BUTTON");
这是将结果插入数据库的代码:

public void find(Path file) {

Path name = file.getFileName();
String st = file.toString();
if (name != null && matcher.matches(name)) {
    try {

        Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/login","root","");
        conn.createStatement();
        String query =" INSERT INTO `search`(`path`) VALUES (?)";
        PreparedStatement pst=conn.prepareStatement(query);
        pst.setString(1,st );
        pst.execute();

        //myst.executeUpdate(query);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        JOptionPane.showMessageDialog(null, e);
    }
一段时间后,脚本停止,出现此异常

com.mysql.jdbc.exception.jdbc4.MYSQLNonTransientConnectionException:
Data source rejected establishment of connection,
message from server:"Too Many connections"

有什么方法可以解决这个问题吗?

对于创建新连接的每个插入。如果您继续这样做,它们就会堆积起来,最终会耗尽与数据库的连接。此限制可能非常小,例如20

相反,你可以

  • 关闭已使用的资源。这意味着关闭
    PreparedStatement
    连接
  • 或者更有效地创建一个连接和一个PrepareStatement并重用它。节省了创建和清理资源的成本(除非司机为您进行回收)

对于创建新连接的每次插入。如果您继续这样做,它们就会堆积起来,最终会耗尽与数据库的连接。此限制可能非常小,例如20

相反,你可以

  • 关闭已使用的资源。这意味着关闭
    PreparedStatement
    连接
  • 或者更有效地创建一个连接和一个PrepareStatement并重用它。节省了创建和清理资源的成本(除非司机为您进行回收)

简单的解决方法是在执行查询后关闭连接

pst.close();
conn.close();
这应该可以完成工作。
但是最好重用连接。

简单的解决方法是在执行查询后关闭连接

pst.close();
conn.close();
这应该可以完成工作。
但是最好重用连接。

您正在为每个insert语句创建一个新连接。你不需要那样做。创建一个连接,并将其用于所有insert语句。此外,如果要为每个insert语句创建新连接,还可以增加连接限制。你不需要那样做。创建一个连接,并将其用于所有insert语句。此外,还可以增加连接限制