使用executeUpdate()而不是executeQuery()进行SELECT查询

时间:2011-01-21 06:39:35

标签: java jdbc

代表:

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 个答案:

答案 0 :(得分: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 :(得分:1)

executeUpdate适用于修改数据的语句(更新,插入)。这就是为什么你得到一个例外/为什么你想在这里使用executeUpdate?)

答案 2 :(得分:1)

String str = "Slect * from EMP";

应该是

String str = "Select * from EMP";

答案 3 :(得分:1)

以下代码表示执行更新语句在

的情况下给出异常

JdbcOdbcDriver但不是OracleDriver的情况   所以select executeUpdate("Select * ...");中的select语句不会总是必要的 但这取决于我们在DriverManager.registerDriver(Driver ob);

中注册的云端硬盘

某些驱动程序可能会出现异常,而有些则不会

  

但问题的答案是你不应该使用executeUpdate(" Sel ..")    对于select语句,即使没有给出Exception,请阅读下面的代码并评论你会更好地理解

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