view tests/BugSetQueryTimeout_Bug_3357.java @ 249:46385d8ff8c9

Improve the implementation of Statement methods getQueryTimeout() and setQueryTimeout(). Previously the timeout would be set directly on the server implying all next statements within the connection session would use the new timeout setting. However the timeout in JDBC can be set per Statement and be different for different Statements. This behavior is now implemented. The implementation is now similar to the implementation in the ODBC driver code.
author Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
date Thu, 30 Aug 2018 16:55:04 +0200 (2018-08-30)
parents c38d4eaf5479
children d4baf8a4b43a
line wrap: on
line source
/*
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0.  If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * Copyright 1997 - July 2008 CWI, August 2008 - 2018 MonetDB B.V.
 */

import java.sql.*;

public class BugSetQueryTimeout_Bug_3357 {
	public static void main(String[] args) throws Exception {
		// Class.forName("nl.cwi.monetdb.jdbc.MonetDriver");	// not needed anymore for self registering JDBC drivers
		Connection con = DriverManager.getConnection(args[0]);
		Statement st = con.createStatement();
		try {
			System.out.println("QueryTimeout = " + st.getQueryTimeout());

			testTimeout(st, 123);
			testTimeout(st, 123);
			testTimeout(st, 2134567890);
			testTimeout(st, 0);
			testTimeout(st, 0);
			testTimeout(st, -1);	// to generate an SQLException as negative timeouts are invalid
		} catch (SQLException se) {
			System.out.println("setQueryTimeout(timeout_value) throws: " + se);
		} finally {
			st.close();
		}
		con.close();
	}

	private static void testTimeout(Statement st, int secs) throws SQLException {
		st.setQueryTimeout(secs);
		// as the call to set the timeout is delayed till a statement is executed, issue a select statment
		ResultSet rs = st.executeQuery("SELECT " + secs);
		if (rs != null)
			rs.close();
		System.out.println("QueryTimeout = " + st.getQueryTimeout());
	}
}