How to run a MySQL Script using Java

java mysql

In this tutorial, I will show you how to run a MySQL script file using ibatis ScriptRunner class. First, download the ibatis and Mysql JDBC Driver, and add the jar files into your classpath.

Now, run below code. It will execute a script.sql file.

RunSqlScript.java

package com.mkyong;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.Reader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

import com.ibatis.common.jdbc.ScriptRunner;

/**
 * 
 @author Dhinakaran Pragasam
 */
public class RunSqlScript {
	/**
	 * @param args
	 *            the command line arguments
	 */
	public static void main(String[] args) throws ClassNotFoundException,
		SQLException {
		
		String aSQLScriptFilePath = "path/to/sql/script.sql";
		
		// Create MySql Connection
		Class.forName("com.mysql.jdbc.Driver");
		Connection con = DriverManager.getConnection(
			"jdbc:mysql://localhost:3306/database", "username", "password");
		Statement stmt = null;

		try {
			// Initialize object for ScripRunner
			ScriptRunner sr = new ScriptRunner(con, false, false);

			// Give the input file to Reader
			Reader reader = new BufferedReader(
                               new FileReader(aSQLScriptFilePath));

			// Exctute script
			sr.runScript(reader);

		} catch (Exception e) {
			System.err.println("Failed to Execute" + aSQLScriptFilePath
					+ " The error is " + e.getMessage());
		}
	}
}
Note

  1. sql script should have an semi colen (;) for each end of the statement.
  2. You sql script does not have any select statement.

References

  1. ibatis ScriptRunner JavaDoc

17 comments on “How to run a MySQL Script using Java

  1. When you say that the SQL script should not have any SELECT statements, I’m assuming you are referring to a SELECT statement where the results are being expected to be returned, but that a statement like this one would be perfectly OK to execute inside the script:

    INSERT INTO MyTable (col1, col2) SELECT col3, col4 FROM MyOtherTable;

    Where the SELECT is not returned to the console.

    Reply
  2. Hi , It will work with oracle database ?? kindly please answer my question

    Reply
  3. Si sirve muy bien para tablas y vistas, el problema es que estaba buscando un código que permita crear de manera correcta los triggers y procedures, la cuestión es que si los crea pero sin contenido el problema es al momento de colocar algún contenido en el cuerpo después del BEGIN no funciona.

    Reply
  4. How can i store the logs of script… my requirement is I have multiple sql files for each run I need to store the logs separately. can you please suggest??

    Reply
  5. after execution mysql.sql file special charaters like german, chaines are not working

    Reply
  6. Awesome.
    “stmt” variable is not used by the way.

    Reply
  7. It looks like the ibatis project has been abandoned. Is there a modern way to read in a complicated SQL file and run it in its entirety?

    Reply
  8. my project is Maven based. here i am not able to fine maven dependency for ‘ibatis ScriptRunner’

    Reply
    1. Hi,

      Thenks, but where we can put the file? I am always have file not found exception, I trying run it from JSF managed bean.

      Best Regards

      Reply
      1. yes i am also getting same “The system cannot find the file specified” error. could u please help on this

        Reply
    2. That source blog is now marked private, so this link is dead.

      Reply

Leave a Comment

Your email address will not be published. Required fields are marked *