diff example/MJDBCTest.java @ 0:a5a898f6886c

Copy of MonetDB java directory changeset e6e32756ad31.
author Sjoerd Mullender <sjoerd@acm.org>
date Wed, 21 Sep 2016 09:34:48 +0200 (2016-09-21)
parents
children b9b35ca2eec2
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/example/MJDBCTest.java
@@ -0,0 +1,101 @@
+/*
+ * 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 - 2016 MonetDB B.V.
+ */
+
+import java.sql.*;
+
+/**
+ * This example assumes there exists tables a and b filled with some data.
+ * On these tables some queries are executed and the JDBC driver is tested
+ * on it's accuracy and robustness against 'users'.
+ *
+ * @author Fabian Groffen
+ */
+public class MJDBCTest {
+	public static void main(String[] args) throws Exception {
+		// make sure the driver is loaded
+		Class.forName("nl.cwi.monetdb.jdbc.MonetDriver");
+		// turn on debugging (disabled)
+		//nl.cwi.monetdb.jdbc.MonetConnection.setDebug(true);
+		Connection con = DriverManager.getConnection("jdbc:monetdb://localhost/notused", "monetdb", "monetdb");
+		Statement st = con.createStatement();
+		ResultSet rs;
+
+		rs = st.executeQuery("SELECT a.var1, COUNT(b.id) as total FROM a, b WHERE a.var1 = b.id AND a.var1 = 'andb' GROUP BY a.var1 ORDER BY a.var1, total;");
+		// get meta data and print columns with their type
+		ResultSetMetaData md = rs.getMetaData();
+		for (int i = 1; i <= md.getColumnCount(); i++) {
+			System.out.print(md.getColumnName(i) + ":" +
+				md.getColumnTypeName(i) + "\t");
+		}
+		System.out.println("");
+		// print the data: only the first 5 rows, while there probably are
+		// a lot more. This shouldn't cause any problems afterwards since the
+		// result should get properly discarded on the next query
+		for (int i = 0; rs.next() && i < 5; i++) {
+			for (int j = 1; j <= md.getColumnCount(); j++) {
+				System.out.print(rs.getString(j) + "\t");
+			}
+			System.out.println("");
+		}
+		
+		// tell the driver to only return 5 rows, it can optimize on this
+		// value, and will not fetch any more than 5 rows.
+		st.setMaxRows(5);
+		// we ask the database for 22 rows, while we set the JDBC driver to
+		// 5 rows, this shouldn't be a problem at all...
+		rs = st.executeQuery("select * from a limit 22");
+		// read till the driver says there are no rows left
+		for (int i = 0; rs.next(); i++) {
+			System.out.print("[" + rs.getString("var1") + "]");
+			System.out.print("[" + rs.getString("var2") + "]");
+			System.out.print("[" + rs.getInt("var3") + "]");
+			System.out.println("[" + rs.getString("var4") + "]");
+		}
+		
+		// this close is not needed, should be done by next execute(Query) call
+		// however if there can be some time between this point and the next
+		// execute call, it is from a resource perspective better to close it.
+		//rs.close();
+		
+		// unset the row limit; 0 means as much as the database sends us
+		st.setMaxRows(0);
+		// we only ask 10 rows
+		rs = st.executeQuery("select * from b limit 10;");
+		// and simply print them
+		while (rs.next()) {
+			System.out.print(rs.getInt("rowid") + ", ");
+			System.out.print(rs.getString("id") + ", ");
+			System.out.print(rs.getInt("var1") + ", ");
+			System.out.print(rs.getInt("var2") + ", ");
+			System.out.print(rs.getString("var3") + ", ");
+			System.out.println(rs.getString("var4"));
+		}
+		
+		// this close is not needed, as the Statement will close the last
+		// ResultSet around when it's closed
+		// again, if that can take some time, it's nicer to close immediately
+		// the reason why these closes are commented out here, is to test if
+		// the driver really cleans up it's mess like it should
+		//rs.close();
+
+		// perform a ResultSet-less query (with no trailing ; since that should
+		// be possible as well and is JDBC standard)
+		// Note that this method should return the number of updated rows. This
+		// method however always returns -1, since Monet currently doesn't
+		// support returning the affected rows.
+		st.executeUpdate("delete from a where var1 = 'zzzz'");
+
+		// closing the connection should take care of closing all generated
+		// statements from it...
+		// Don't forget to do it yourself if the connection is reused or much
+		// longer alive, since the Statement object contains a lot of things
+		// you probably want to reclaim if you don't need them anymore.
+		//st.close();
+		con.close();
+	}
+}