diff example/SQLImport.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 073ee535234b b9b35ca2eec2
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/example/SQLImport.java
@@ -0,0 +1,79 @@
+/*
+ * 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.*;
+import java.io.*;
+
+/**
+ * This simple example somewhat emulates the mclient command. However in
+ * it's simpleness it only supports SQL queries which entirely are on one line.
+ *
+ * This program reads a file line by line, and feeds the line into a running
+ * Mserver on the localhost. Upon error, the error is reported and the program
+ * continues reading and executing lines.
+ * A very lousy way of implementing options is used to somewhat configure the
+ * behaviour of the program in order to be a bit more verbose or commit after
+ * each (sucessfully) executed line.
+ *
+ * The program uses a debuglog in which the exact conversation between the
+ * JDBC driver and Mserver is reported. The log file is put in the current
+ * working directory and names like monet_[unix timestamp].log
+ *
+ * @author Fabian Groffen
+ */
+
+public class SQLImport {
+	public static void main(String[] args) throws Exception {
+		if (args.length < 1) {
+			System.out.println("synopsis: java SQLImport filename [autocommit] [verbose]");
+			System.exit(-1);
+		}
+
+		// open the file
+		BufferedReader fr = new BufferedReader(new FileReader(args[0]));
+
+		// make sure the driver is loaded
+		Class.forName("nl.cwi.monetdb.jdbc.MonetDriver");
+		// request a connection suitable for Monet from the driver manager
+		// note that the database specifier is currently not implemented, for
+		// Monet itself can't access multiple databases.
+		// turn on debugging
+		Connection con = DriverManager.getConnection("jdbc:monetdb://localhost/database?debug=true", "monetdb", "monetdb");
+
+		boolean beVerbose = false;
+		if (args.length == 3) {
+			// turn on verbose mode
+			beVerbose = true;
+		}
+		if (args.length < 2) {
+			// disable auto commit using the driver
+			con.setAutoCommit(false);
+		}
+
+		// get a statement to execute on
+		Statement stmt = con.createStatement();
+
+		String query;
+		for (int i = 1; (query = fr.readLine()) != null; i++) {
+			if (beVerbose) System.out.println(query);
+			try {
+				// execute the query, no matter what it is
+				stmt.execute(query);
+			} catch (SQLException e) {
+				System.out.println("Error on line " + i + ": " + e.getMessage());
+				if (!beVerbose) System.out.println(query);
+			}
+		}
+
+		// free resources, close the statement
+		stmt.close();
+		// close the connection with the database
+		con.close();
+		fr.close();
+	}
+}