为什么第一次连接mysql数据库很慢? 我是使用JDBC + 数据库连接池 访问局域网里的数据库的,不知道为什么当程序启动后第一次打开网页,页面上需要从数据库取数据的地方需要等待10秒左右才能显示出来,如果把数据放到我本机上访问没有问题,分析了半天,试了很多办法就是没能解决解决,请大家帮我分析分析到底是什么原因? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你用MYSQL的客户端执行SQL也会很慢吗? tomcat 需要加载 第一次都是这样的 转换成缓存后 就快了 第一次很慢, 有可能是java编译问题. 你给程序调用数据库部分加上时间看看了吗?是在执行SQL的时候慢,还是具体哪一部分慢.在程序里面可以加long startTime=System.currentTimeMillis(); //开始时间....... 你的source codelong endTime=System.currentTimeMillis(); //结束时间最后打印这2个时间. 你可以给多个地方加.看看具体哪一部分执行的慢.你这样提问,可能性太多. 要先把问题最小化. 从那里开始入手吧. 这样会不会更好啊? 什么都可以的啊.你可以在控制台打 mysql -u 用户 -p 密码 -h host -P 端口(如果不是默认端口)再connect 数据库. 试试快不快啊. 这是连接数据库的代码package com.csrme.util;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.naming.Context;import javax.naming.InitialContext;import javax.sql.DataSource;public class DataBaseConnection { private static DataBaseConnection dbPool; private DataSource dataSource; static { dbPool = new DataBaseConnection(); } public DataBaseConnection() { try { Context initCtx = new InitialContext(); if (initCtx == null) throw new Exception("连接池异常 001"); Context ctx = (Context) initCtx.lookup("java:comp/env"); if (ctx != null) dataSource = (DataSource) ctx.lookup("Csrme_System_DBpool"); if (dataSource == null) throw new Exception("连接池异常 002"); } catch (Exception e) { e.printStackTrace(); } } public final static DataBaseConnection getInstance() { return dbPool; } public final Connection getConnection() { try { return dataSource.getConnection(); } catch (SQLException e) { throw new RuntimeException("连接数据库错误异常 003", e); } } public static void close(ResultSet rs, Statement st, Connection conn) {// 关闭连接 try { if (null != rs) { rs.close(); } if (null != st) { st.close(); } if (null != conn) { conn.close(); } } catch (SQLException sql) { sql.printStackTrace(); } }} 或者你试试用MYSQL的随意客户端连接试试吧. 是不是很慢.如果很慢, 那是数据库那边的问题了. 这是数据库连接池代码<?xml version="1.0" encoding="UTF-8"?><Context path="/Csrme_System" docBase="Csrme_System" debug="5"> <!-- 数据源配置,放在tomcat下conf/catalina/localhost包下 --> <Resource name="Csrme_System_DBpool" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.0.222:3306/csrme?useUnicode=true&characterEncoding=utf-8" username="root" password="111111" maxActive="10" maxIdle="20" maxWait="1000" /> </Context> 如果是数据库问题.可以看一下以下的连接.http://translate.googleusercontent.com/translate_c?hl=zh-CN&langpair=en%7Czh-CN&u=http://mirrors.dotsrc.org/mysql/doc/refman/4.1/en/dns.html&rurl=translate.google.com.hk&usg=ALkJrhj9QwoQhrPJcLG7zMoETNYoZUEzIA my.ini 文件 [mysqld] 下 skip-name-resolve 在数据库查到了数据,在页面迭代不出??起了怪了.只能看到分页标签的记录条数 jfreechart折线图为横坐标换一种显示的问题 关于ArrayList取值问题 文件上传抛空指针异常 JSP里保存数组的错误,求救 mysql 如何进入shell> 提示符下面 100分求救! 查询某位用户id的数据库后自动给次用户发送一个email如何实现? 登陆问题! JSP:include中显示的一些错误求救 关于ssh整合后的问题 Extjs 如何在panel的标题处添加图片,图片要在文字前(不是背景图片),最好给个示例,小弟先谢过啦
你给程序调用数据库部分加上时间看看了吗?
是在执行SQL的时候慢,还是具体哪一部分慢.在程序里面可以加long startTime=System.currentTimeMillis(); //开始时间....... 你的source codelong endTime=System.currentTimeMillis(); //结束时间最后打印这2个时间. 你可以给多个地方加.看看具体哪一部分执行的慢.你这样提问,可能性太多. 要先把问题最小化. 从那里开始入手吧. 这样会不会更好啊?
你可以在控制台打 mysql -u 用户 -p 密码 -h host -P 端口(如果不是默认端口)再connect 数据库. 试试快不快啊.
这是连接数据库的代码package com.csrme.util;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;public class DataBaseConnection {
private static DataBaseConnection dbPool;
private DataSource dataSource;
static {
dbPool = new DataBaseConnection();
} public DataBaseConnection() {
try {
Context initCtx = new InitialContext();
if (initCtx == null)
throw new Exception("连接池异常 001");
Context ctx = (Context) initCtx.lookup("java:comp/env");
if (ctx != null)
dataSource = (DataSource) ctx.lookup("Csrme_System_DBpool");
if (dataSource == null)
throw new Exception("连接池异常 002");
} catch (Exception e) {
e.printStackTrace();
}
} public final static DataBaseConnection getInstance() {
return dbPool;
} public final Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException("连接数据库错误异常 003", e);
}
} public static void close(ResultSet rs, Statement st, Connection conn) {// 关闭连接 try {
if (null != rs) {
rs.close();
}
if (null != st) {
st.close();
}
if (null != conn) {
conn.close();
}
} catch (SQLException sql) {
sql.printStackTrace();
}
}}
如果很慢, 那是数据库那边的问题了.
这是数据库连接池代码
<?xml version="1.0" encoding="UTF-8"?><Context path="/Csrme_System" docBase="Csrme_System" debug="5"> <!-- 数据源配置,放在tomcat下conf/catalina/localhost包下 -->
<Resource name="Csrme_System_DBpool"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.0.222:3306/csrme?useUnicode=true&characterEncoding=utf-8"
username="root"
password="111111"
maxActive="10"
maxIdle="20"
maxWait="1000" />
</Context>
可以看一下以下的连接.http://translate.googleusercontent.com/translate_c?hl=zh-CN&langpair=en%7Czh-CN&u=http://mirrors.dotsrc.org/mysql/doc/refman/4.1/en/dns.html&rurl=translate.google.com.hk&usg=ALkJrhj9QwoQhrPJcLG7zMoETNYoZUEzIA
skip-name-resolve