这似乎相当简单(不对我来说)...
如何使用JDBC ping一个mysql服务器?我已经成功地使用JDBC和MySQL执行了select和insert查询,但如何ping?
谢谢。
如何使用JDBC ping一个mysql服务器?我已经成功地使用JDBC和MySQL执行了select和insert查询,但如何ping?
谢谢。
MySQL JDBC驱动程序(Connector/J)提供了一种ping机制。
如果您执行以/* ping */
开头的SQL查询,例如:
"/* ping */ SELECT 1"
这将导致驱动程序向服务器发送一个ping并返回一个虚假、轻量级的结果集。
(您可以在Connector/J文档中深入查找“ping”;请仔细阅读:这个机制对使用的语法非常敏感。与大多数SQL不同,“ping”标记的“解析”发生在客户端JDBC驱动程序本身中。)
SELECT 1
相比,这个“轻量级”的特点是什么会很有帮助。我在那个页面上找不到任何记录ping比较“轻”的程度的文档。 - user330315http://download.oracle.com/javase/6/docs/api/java/net/InetAddress.html#isReachable%28int%29
编辑:InetAddress addr = InetAddress.getByName("your.server.com"); int port = 3306; SocketAddress sockaddr = new InetSocketAddress(addr, port); Socket sock = new Socket(); sock.connect(sockaddr, 2000); // 使用2秒超时打开连接如果connect()没有抛出异常,则表示端口3306上有进程在运行。
我不知道如何在JDBC中实现这一点,但是您可以使用连接池来验证您的连接,就像这样(这是Tomcat的context.xml
(在应用程序的META-INF
目录中找到)):
<Resource name="jdbc/My_DS" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="USERNAME" password="PASSWORD" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/MYDB?autoReconnect=true"
removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"
testOnBorrow="true" validationQuery="SELECT 1" />
validationQuery
用于验证连接是否成功。