Запускать несколько запросов postgres с параметрами в java [duplicate]

Это сообщение об ошибке отображается при возникновении ошибки в запросе, которая привела к сбою. Он проявится при использовании:

  • mysql_fetch_array / mysqli_fetch_array()
  • mysql_fetch_assoc() / mysqli_fetch_assoc()
  • mysql_num_rows() / mysqli_num_rows()

Примечание. Эта ошибка вызывает не , если на ваш запрос не влияет строка. Только запрос с недопустимым синтаксисом генерирует эту ошибку.

Шаги устранения неполадок

  • Убедитесь, что ваш сервер разработки настроен на отображение всех ошибок. Вы можете сделать это, разместив это в верхней части своих файлов или в вашем файле конфигурации: error_reporting(-1); . Если у вас есть какие-либо синтаксические ошибки, это укажет вам.
  • Используйте mysql_error() . mysql_error() сообщит о любых ошибках MySQL, возникающих при выполнении вашего запроса. Пример использования:
    mysql_connect($host, $username, $password) or die("cannot connect"); 
    mysql_select_db($db_name) or die("cannot select DB");
    
    $sql = "SELECT * FROM table_name";
    $result = mysql_query($sql);
    
    if (false === $result) {
        echo mysql_error();
    }
    
  • Запустите запрос из командной строки MySQL или с помощью инструмента, такого как phpMyAdmin . Если у вас есть синтаксическая ошибка в вашем запросе, это скажет вам, что это такое.
  • Убедитесь, что ваши кавычки верны. Отсутствие цитаты вокруг запроса или значения может привести к сбою запроса.
  • Убедитесь, что вы избегаете своих значений. Цитаты в вашем запросе могут привести к сбою запроса (а также оставить вас открытым для SQL-инъекций). Используйте mysql_real_escape_string() , чтобы избежать ввода.
  • Убедитесь, что вы не смешиваете функции mysqli_* и mysql_*. Они не то же самое и не могут использоваться вместе.

Другие советы

mysql_* функции не должны для нового кода. Они больше не поддерживаются, и сообщество приступило к процессу осушки . Вместо этого вы должны узнать о подготовленных операторах и использовать либо PDO , либо MySQLi . Если вы не можете решить, эта статья поможет выбрать. Если вы хотите узнать, вот хороший учебник PDO .

25
задан BalusC 27 January 2016 в 13:28
поделиться

2 ответа

вы можете достичь этого, используя следующий пример: addBatch & amp; executeBatch для выполнения нескольких SQL-команд одновременно.

Пакетная обработка позволяет группировать связанные операторы SQL в пакет и отправлять их одним вызовом в базу данных. reference

Когда вы отправляете сразу несколько операторов SQL в базу данных, вы уменьшаете объем служебных данных связи, тем самым повышая производительность.

  • JDBC драйверы не обязаны поддерживать эту функцию. Вы должны использовать метод DatabaseMetaData.supportsBatchUpdates(), чтобы определить, поддерживает ли целевая база данных обработку пакетного обновления. Метод возвращает true, если ваш драйвер JDBC поддерживает эту функцию.
  • Метод addBatch () Statement, PreparedStatement и CallableStatement используется для добавления отдельных операторов в пакет. executeBatch() используется для запуска всех операторов, сгруппированных вместе.
  • executeBatch () возвращает массив целых чисел, и каждый элемент массива представляет собой обновление count для соответствующего оператора обновления.
  • Так же, как вы можете добавлять инструкции к пакету для обработки, вы можете удалить их с помощью метода clearBatch (). Этот метод удаляет все заявления, добавленные вами с помощью метода addBatch(). Тем не менее, вы не можете выборочно выбирать, какую инструкцию удалить.

ПРИМЕР:

import java.sql.*;

public class jdbcConn {
   public static void main(String[] args) throws Exception{
      Class.forName("org.apache.derby.jdbc.ClientDriver");
      Connection con = DriverManager.getConnection
      ("jdbc:derby://localhost:1527/testDb","name","pass");

      Statement stmt = con.createStatement
      (ResultSet.TYPE_SCROLL_SENSITIVE,
      ResultSet.CONCUR_UPDATABLE);
      String insertEmp1 = "insert into emp values
      (10,'jay','trainee')";
      String insertEmp2 = "insert into emp values
      (11,'jayes','trainee')";
      String insertEmp3 = "insert into emp values
      (12,'shail','trainee')";
      con.setAutoCommit(false);
      stmt.addBatch(insertEmp1);//inserting Query in stmt
      stmt.addBatch(insertEmp2);
      stmt.addBatch(insertEmp3);
      ResultSet rs = stmt.executeQuery("select * from emp");
      rs.last();
      System.out.println("rows before batch execution= "
      + rs.getRow());
      stmt.executeBatch();
      con.commit();
      System.out.println("Batch executed");
      rs = stmt.executeQuery("select * from emp");
      rs.last();
      System.out.println("rows after batch execution= "
      + rs.getRow());
   }
} 

см. http://www.tutorialspoint.com/javaexamples/ jdbc_executebatch.htm

35
ответ дан Akib Bagwan 25 August 2018 в 05:53
поделиться

Я не уверен, что вы хотите отправить два оператора SELECT в один запрос, потому что вы не сможете получить доступ к ним ResultSet s. База данных может возвращать только последний набор результатов.

Несколько ResultSets

Однако, если вы вызываете хранимую процедуру, которая, как вы знаете, может возвращать несколько наборов результатов, что-то вроде этого будет работать

CallableStatement stmt = con.prepareCall(...);
try {
...

boolean results = stmt.execute();

while (results) {
    ResultSet rs = stmt.getResultSet();
    try {
    while (rs.next()) {
        // read the data
    }
    } finally {
        try { rs.close(); } catch (Throwable ignore) {}
    }

    // are there anymore result sets?
    results = stmt.getMoreResults();
}
} finally {
    try { stmt.close(); } catch (Throwable ignore) {}
}

Несколько операторов SQL

Если вы говорите о нескольких операторах SQL и только одном SELECT, ваша база данных должна поддерживать один String SQL. Например, я использовал что-то вроде этого в Sybase

StringBuffer sql = new StringBuffer( "SET rowcount 100" );
sql.append( " SELECT * FROM tbl_books ..." );
sql.append( " SET rowcount 0" );

stmt = conn.prepareStatement( sql.toString() );

Это будет зависеть от синтаксиса, поддерживаемого вашей базой данных. В этом примере обратите внимание на добавление spaces, дополняющее высказывания, чтобы между элементами было пустое пространство.

4
ответ дан Community 25 August 2018 в 05:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: