2011-01-21 3 views
0

для Ex:ВЫБРАТЬ запрос с использованием executeUpdate() вместо ExecuteQuery()

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 
+0

Непонятный вопрос –

+0

Какое исключение вы получаете? – Nishant

+0

Исключение: java.sql.SQLExcetion, executeUpdate() возвращает более одной строки. – Kiran

ответ

1

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

+1

и каждый executeUpdate() и executeQuery() предназначен только для представления оператора SQL, будь то select или inset или delete.if, если он успешно выполняет select satement (он показывает исключение, что java.sql.SQLExcetion, executeUpdate() возвращая более одного ряда), он выполняется правильно правильно. – Kiran

1
String str = "Slect * from EMP"; 

Должно быть

String str = "Select * from EMP";

, а также.

+0

хорошо, я думаю, что это орфографическая ошибка, и 'str' вообще не используется здесь! – lweller

3

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

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

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

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

1

код ниже exlpains, что выполнить обновление заявление дает исключение в случае

JdbcOdbcDriver, но не в случае OracleDriver
, так что не всегда necesarry, что оператор выбора будет давать исключение в 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); 


} 

} 
Смежные вопросы