Запрос SELECT с использованием executeUpdate () вместо executeQuery () - PullRequest
0 голосов
/ 21 января 2011

для примера:

class sample {

    public static void main(String a[]) {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection con = DriverManager.getConnection("jdbc:odbc:orcl", "", "");
        String str = "Slect * from EMP";
        Statement st = con.createStatement();
        try {
            st.executeUpdate("select * from EMP"); //gives us Exception } catch(SQLException ex) { // I want actuval code here.......... //CODE here............

        }//catch}//try}//main}//class

Ответы [ 4 ]

3 голосов
/ 21 января 2011

Как уже отмечали другие: executeUpdate() нельзя использовать для выполнения запросов.

Если вы ищете способ выполнить оператор, не зная, что он делает, вы должны взглянуть на метод execute ().http://download.oracle.com/javase/6/docs/api/java/sql/Statement.html#execute%28java.lang.String%29

Возвращенное логическое значение сообщит вам, вернул ли он результат или просто обновляет счет.Затем вы можете использовать getResultSet () для получения результата или getUpdateCount () для получения количества затронутых строк.

Обратите внимание, что оператору разрешено возвращать более одного результата и / или счетчик обновлений.Смотрите пример в getMoreResults ().

1 голос
/ 01 июля 2014

приведенный ниже код объясняет, что оператор execute update выдает исключение в случае

JdbcOdbcDriver, но не в случае OracleDriver
, поэтому не всегда необходимо, чтобы оператор select выдавал исключениев executeUpdate("Select * ...");, но это зависит от диска, который мы регистрируем в DriverManager.registerDriver(Driver ob);

, некоторые водители могут дать исключение, в то время как некоторые не будут

, но ответ на ваш вопросВы не должны использовать executeUpdate ("Sel ..") для оператора выбора, даже если не дает исключения, прочитайте приведенный ниже код и, комментируя, вы поймете лучше

import java.sql.*;

import sun.jdbc.odbc.*;
import oracle.jdbc.driver.*;

public class MyDb {
    public static void main(String args[]) throws Exception {
        //drive is oracle.jdbc.driver.OracleDriver;
        OracleDriver od = new OracleDriver();

        DriverManager.registerDriver(od);
        Connection conn;
        conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "system", "system");

        Statement stm = conn.createStatement();
        int val = stm.executeUpdate("select * from mylog");
        System.out.println(val);

        //output for above code is 10  actually the table had 15 rows 
        //but when table had 7 rows output was 7 ,when number of rows where 9 output was 9
        //but when the number of row in table were more than or equal to 10 the out put was 10
        //so actually it is no meaning to use select statement within executeQuery 
        //even if it doesn't give exception

        //driver is sun.jdbc.odbc.JdbcOdbcDriver;
        JdbcOdbcDriver od2 = new JdbcOdbcDriver();
        DriverManager.registerDriver(od2);
        Connection conn2 = DriverManager.getConnection("jdbc:odbc:swap", "system", "system");
        Statement stm2 = conn2.createStatement();
        int val2 = stm2.executeUpdate("select * from mylog");

        //while this code gives exception
        //Exception in thread "main" java.sql.SQLException: No row count was produced
        //        at sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(Unknown Source)
        //        at MyDb.main(MyDb.java:19)
        System.out.println(val2);
    }
}
1 голос
/ 21 января 2011
String str = "Slect * from EMP";

Должно быть

String str = "Select * from EMP";

также.

1 голос
/ 21 января 2011

executeUpdate предназначен для операторов, которые изменяют данные (обновление, вставка). Вот почему вы получаете исключение / кстати, почему вы хотите использовать executeUpdate здесь?)

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