2011-01-21 80 views
0

防爆:SELECT查询()代替的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

不明确的问题 – 2011-01-21 06:46:28

+0

你得到的例外是什么? – Nishant 2011-01-21 06:49:00

+0

异常是:java.sql.SQLExcetion,executeUpdate()返回多行。 – Kiran 2011-01-21 07:16:14

回答

1

executeUpdate旨在用于语句修改数据(更新,插入)。这就是为什么你会得到一个异常/用你想在这里使用executeUpdate为什么呀?)

1
String str = "Slect * from EMP"; 

应该

String str = "Select * from EMP";

为好。

3

正如其他人指出的:executeUpdate()不能用于运行查询。

如果您正在寻找一种执行语句的方式而不知道他们在做什么,那么您应该查看execute()方法。
http://download.oracle.com/javase/6/docs/api/java/sql/Statement.html#execute%28java.lang.String%29

返回的布尔值将告诉您它是返回结果还是更新计数。然后可以使用getResultSet()获取结果或getUpdateCount()来获取受影响的行数。

请注意,允许语句返回多个结果和/或udpate计数。请参阅getMoreResults()中的示例。

1

下面的代码exlpains的执行UPDATE语句给出例外的

JdbcOdbcDriver的情况下,但不是在OracleDriver
这样情况下,它并不总是necesarry是select语句将给予例外executeUpdate("Select * ..."); 但要看在驱动器上,我们在DriverManager.registerDriver(Driver ob);

注册一些驱动程序可能给异常,而有些则不会

但回答你的问题是你不应该使用的executeUpdate(“SEL ..”) 的SELECT语句,即使不给例外阅读下面的代码并和评论,你会更好地了解

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); 


} 

}