MySql 连接数过多

2024-02-15

我不想提出一个网络上广泛提出的问题,但我似乎无法解决它。

我不久前开始了一个项目,经过一个月的测试后,我遇到了“连接太多”错误。我调查了它,并通过增加 max_connections 来“解决”它。这然后就起作用了。

从那时起,越来越多的人开始使用它,它再次受到关注。当我是该网站上的唯一用户时,我输入“show processlist”,它会显示大约 50 个仍处于打开状态的连接(在命令中显示“睡眠”)。现在,我不知道为什么这些是打开的,但在我的代码中我进行了三次检查,并且我打开的每个连接都会关闭。

ie.

public int getSiteIdFromName(String name, String company)throws DataAccessException,java.sql.SQLException{

Connection conn = this.getSession().connection();
Statement smt = conn.createStatement();
ResultSet rs=null;
String query="SELECT id FROM site WHERE name='"+name+"' and company_id='"+company+"'";

rs=smt.executeQuery(query);
rs.next();

int id=rs.getInt("id");

rs.close();
smt.close();
conn.close();
return id;
}

每次我在网站上执行其他操作时,都会打开而不是关闭另一批连接。 我的代码有问题吗?如果不是,可能是什么问题?


按照你的方法,如果抛出任何异常,连接将永远不会关闭before the conn.close()叫做。您需要以以下方式获取它(以及语句和结果集)try阻止并关闭它finally堵塞。中的任何代码finally will always无论是否抛出异常都会执行。有了这个你可以ensure昂贵的资源将被关闭。

这是一个重写:

public int getSiteIdFromName(String name, String company) throws DataAccessException, java.sql.SQLException {
    Connection conn = null;
    Statement smt = null;
    ResultSet rs = null;
    int id = 0;
    try {
        conn = this.getSession().connection();
        smt = conn.createStatement();
        String query = "SELECT id FROM site WHERE name='" + name + "' and company_id='" + company + "'";
        rs = smt.executeQuery(query);
        rs.next();
        id = rs.getInt("id");
    } finally {
        if (rs != null) try { rs.close(); } catch (SQLException logOrIgnore) {}
        if (smt != null) try { smt.close(); } catch (SQLException logOrIgnore) {}
        if (conn != null) try { conn.close(); } catch (SQLException logOrIgnore) {}
    }
    return id;
}

也就是说,这段代码对SQL注入 http://en.wikipedia.org/wiki/SQL_injection attacks http://unixwiz.net/techtips/sql-injection.html. Use a PreparedStatement代替Statement.

See also:

  • Sun 异常教程:Finally 块 http://java.sun.com/docs/books/tutorial/essential/exceptions/finally.html
  • Sun JDBC 教程:简介 http://java.sun.com/docs/books/tutorial/jdbc/basics/index.html
  • Sun JDBC 教程:如何使用PreparedStatement http://java.sun.com/docs/books/tutorial/jdbc/basics/prepared.html
  • DAO 教程:如何正确使用基本 JDBC 代码 http://balusc.blogspot.com/2008/07/dao-tutorial-data-layer.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySql 连接数过多 的相关文章

随机推荐

  • 防病毒软件说我的程序可疑

    我在 wpf Visual Studios 中构建了一个程序 当我运行它时 avast 说检测到可疑程序 然后关闭我的程序 我可以采取任何措施来验证它 还是必须进入 avast 并将其设置为不阻止我的程序 您当然可以在大多数主要防病毒软件包
  • 获取 json 数组的下一个和上一个元素

    我的代码需要帮助 我想要一个上一个和一个下一个按钮 这些按钮将调用函数 viewBlogItem direction cat blogid 在该函数中 我将读出 json 文件 并按 类别 进行分类 每个 blogItem 都有一个arti
  • 机器码对齐

    我正在尝试了解机器代码对齐的原理 我有一个汇编器实现 可以在运行时生成机器代码 我在每个分支目标上使用 16 字节对齐 但看起来这不是最佳选择 因为我注意到 如果我删除对齐 有时相同的代码会运行得更快 我认为这与缓存线宽度有关 因此某些命令
  • 使用C#播放MP3文件

    我正在寻找一种无需任何第三方播放 MP3 文件的方法 媒体播放器等 有什么方法可以做到这一点吗 谢谢 我写了一个开源库 名为NAudio http naudio codeplex com可以做到这一点 private IWavePlayer
  • boost::graph 中的 DFS 更改图形内容

    最小的例子 include
  • 是否可以禁用应用程序而不隐藏它们?

    背景 最终用户可以通过操作系统内置的应用程序管理器禁用某些应用程序 该屏幕看起来像这样 在某些设备上它显示 关闭 一旦禁用应用程序 它就不会处于活动状态 并且不会以任何方式运行 直到您再次重新启用它 不过 为了重新启用它 您仍然可以在应用程
  • 即使具有 INTERNET 权限,连接到页面时仍显示“权限被拒绝”

    从 Android 连接到任何页面时 我收到此异常 06 09 12 50 42 725 WARN System err 1080 java net SocketException Permission denied 06 09 12 50
  • python的sphinx中var、cvar和ivar有什么区别?

    我正在阅读 sphinx 文档页面 讽刺的是发现关于 var ivar 和 cvar 之间差异的文档非常缺乏 我想知道是否有人可以解释内联代码中每个不同名称空间之间的区别 Example class foo object var str f
  • 替换/删除与正则表达式 (.NET) 不匹配的字符

    我有一个正则表达式来验证字符串 但现在我想删除所有与我的正则表达式不匹配的字符 E g regExpression w text This is a sample text with some invalid characters Remo
  • 为什么我的 IdentityRoles 和 ApplicationUsers 没有填充到我的数据库中?

    我在 net core 3 1 Web 应用程序中播种用户时遇到问题 正在 SQL Server 上创建相应的表 但当我运行应用程序时没有创建任何行 我不知道为什么数据库没有被填充 有人能发现这个问题吗 DBInitializer 文件将用
  • 如何通过路径访问多维数组元素? [复制]

    这个问题在这里已经有答案了 可能的重复 PHP 使用字符串作为数组索引路径来检索值 https stackoverflow com questions 1677099 php use a string as an array index p
  • 从信号器 js 客户端向集线器功能传递连接令牌是安全的还是黑客的

    我读了这篇文章http www asp net signalr overview security introduction to security connectiontoken http www asp net signalr over
  • VisualVM 校准步骤在 Windows 10 中挂起

    情况 我已在 Windows 10 周年纪念版上安装了 VisualVM 1 3 8 并且没有使用 JDK 8 附带的版本 我想用它来分析 Java Play 应用程序 会发生什么 当启动 CPU 分析时 它首先询问我需要校准 当发生这种情
  • 在数据表列中查找最长的字符串

    我想知道是否可以创建一个 单行 Linq 来检索特定数据表列的最长字符串值 这意味着所有列数据 数字 日期 字符串 都应转换为字符串 然后返回最长的字符串 我发现的只是如何从列表中获取最长的字符串或最大长度值 这是我到目前为止所尝试的 长度
  • 点击列表视图、视图单元格内的其他按钮即可更改按钮的图像

    我有一个listview This list view有 5 行 其中有 2 行buttons namely A B 当我点击button A on a row 我想改变图像A也B在同一行 反之亦然 我可以单独点击并更改同一图像button
  • 包含文件中的 CGO 未定义引用

    在 Go 中包装 OpenJtalk 成功包含文件并引用类型 没有出现问题 但函数会触发undefined reference error jtalk go package main cgo CFLAGS I home vagrant op
  • 导航拱门组件是否会造成误报内存泄漏?

    我对内存泄漏以及导致内存泄漏的原因有基本的了解 这就是为什么我不明白我的代码是否有问题或者是误报 由于项目不小 我不知道应该分享哪部分代码 但请在评论中告诉我 我将添加所需的代码 我使用导航拱门组件并遵循 MVVM 模式 我后来在项目开发中
  • 模板方法什么时候可以使用稍后定义的函数而不需要前向声明?

    我正在编写一个类似于 QDebug 的简单记录器类 它有一个将数据保存到 QStringList 中的模板方法 代码在这里 include
  • Asp.net TinyMCE 编辑器未显示在线 Windows 服务器,但它可以在本地主机上运行

    TinyMCE 编辑器在发布后未显示 不过 它可以在本地主机上运行 这是我所看到的 您需要提供baseURL在初始化之前到tinyMCE 你可以在之前这样做tinymce init 通常 如果没有这个 它可以在本地主机上工作 但在服务器上它
  • MySql 连接数过多

    我不想提出一个网络上广泛提出的问题 但我似乎无法解决它 我不久前开始了一个项目 经过一个月的测试后 我遇到了 连接太多 错误 我调查了它 并通过增加 max connections 来 解决 它 这然后就起作用了 从那时起 越来越多的人开始