JDBC + ScriptRunner: ошибка с runScript - PullRequest
1 голос
/ 16 марта 2011

Я хочу использовать ScriptRunner для выполнения файла сценария sql с драйвером JDBC.Я могу запустить ScriptRunner, но не могу выполнить строку runScript:

ScriptRunner runner = new ScriptRunner(c, false, false);
runner.runScript("C:/Users/Pierre/Documents/create.sql");

Ошибка:

не удается найти метод символа runScript (java.lang.String) ||строка 41

Связь с базой данных в порядке.

import java.sql.*;

public class ConnectPostgreSQL {
  public static void main(String[] argv) {
  System.out.println("Checking if Driver is registered with DriverManager.");

  try {
    Class.forName("org.postgresql.Driver");
  } catch (ClassNotFoundException cnfe) {
    System.out.println("Couldn't find the driver!");
    System.out.println("Let's print a stack trace, and exit.");
    cnfe.printStackTrace();
    System.exit(1);
  }

  System.out.println("Registered the driver ok, so let's make a connection.");

  Connection c = null;

  try {
    // The second and third arguments are the username and password,
    // respectively. They should be whatever is necessary to connect
    // to the database.
    c = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres", "passroot");
  } catch (SQLException se) {
    System.out.println("Couldn't connect: print out a stack trace and exit.");
    se.printStackTrace();
    System.exit(1);
  }

  if (c != null)
    System.out.println("Hooray! We connected to the PostgreSQL database!");
  else
    System.out.println("We should never get here.");

  //temps t1
  long begin = System.currentTimeMillis();
  System.out.println(begin);

  ScriptRunner runner = new ScriptRunner(c, false, false);
  runner.runScript("C:/Users/Pierre/Documents/create.sql");

  //temps t2
  long end = System.currentTimeMillis();
  System.out.println(end);

  //différence de t2 - t1
  float time = ((float) (end-begin)) / 1000f;
  System.out.println(time);
  }
}

Кто-нибудь может мне помочь?Спасибо!

Ответы [ 3 ]

0 голосов
/ 16 марта 2011

Метод runScript ScriptRunner принимает Reader в качестве аргумента, поэтому вам нужно изменить строку 41 на

try {
runner.runScript(new BufferedReader(new FileReader("C:/Users/Pierre/Documents/create.sql")));
} catch (FileNotFoundException e) {
e.printStackTrace();
}

и добавьте импорт как

import java.io.BufferedReader;
import java.io.FileReader;
0 голосов
/ 16 марта 2015

ScriptRunner отправляет построчно в БД.Когда в скрипте есть разделитель ($$, &&, ||), строка выполняется автоматически.Чтобы это исправить, вам нужно использовать последнюю версию ScriptRunner и установить отправку полного сценария (runner.setSendFullScript (true)).

0 голосов
/ 16 марта 2011

Это потому, что метод runScript не имеет аргумента String, посмотрите Код ScriptRunner

public void runScript(Reader reader)

Измените

runner.runScript("C:/Users/Pierre/Documents/create.sql");

На:

try {
    FileReader reader = new FileReader("C:/Users/Pierre/Documents/create.sql");
    runner.runScript(reader);
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

и добавьте импорт как

import java.io.BufferedReader;
import java.io.FileReader;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...