我想问一个很基础的问题:java.sql.Connection中的prepareStatement(String sql,String[] columnNames)方法如何使用?最好能举个例子!
(创建一个能返回由给定数组指定的自动生成键的默认 PreparedStatement 对象。此数组包含目标表中列的名称,而目标表包含应该返回的自动生成键。)文档中的解释我还是看不懂!
拜托!

解决方案 »

  1.   

    PreparedStatement:表示预编译的SQL对象Statement和PreparedStatement的主要区别
    Statement是一个普通的SQL分析容器,Statement在executeQuery或者executeUpdate
    的时候,才指定我们要分析的SQL语句是谁PreparedStatement是一个预编译的分析容器,它在容器在创建的同时即指定要分析的SQL语句
    PreparedStatement使用场合
    PreparedStatement是一个预编译的容器,对于一条将会被重复执行的代码来说,它只是被分析一次
    而statement容器将会分析多次
    /**
    * 注意:使用了statement分析容器,这条写入的语句将会被分析10次
    */
    for(int i=0;i<10;i++){
    String sql = "INSERT INTO EMP(EMPNO,ENAME) VALUES(SEQ.NEXTVAL,'ZHANGSHAN')";
    ps.executeUpdate(sql);
    }
    //这里,制定要分析的sql语句,预分析的
    ps = con.prepareStatement("INSERT INTO EMP(EMPNO,ENAME) VALUES(SEQ.NEXTVAL,?)");
    /**
    * 在上面的SQL语句中的问号(?)表示的是预插入的值,在下面的确ps.setString(1, "zhangshan"+i)里的这个1就表示
    * SQL语句中出现的第一个问号,如果在条SQL语句中会出现第二个问号,那个就是ps.setString(2, "")
    * 注意:使用了PreparedStatement分析容器,这条写入的语句将会被分析1次
    */
    for(int i=0;i<10;i++){
    ps.setString(1, "zhangshan"+i);
    ps.executeUpdate();
    }希望对你有帮助
      

  2.   

    Connection con=DriverManager.getConnection(url,name,pwd);
    PreparedStatement pstmt=con.prepareStatement(sql);
    pstmt.execute();
      

  3.   

    参数:
        sql - 可能包含一个或多个 '?' IN 参数占位符的 SQL 语句
        columnNames - 指示应该从一个或多个插入行中返回的那些列的列名称组成的数组 
    返回:
        一个包含预编译语句的新 PreparedStatement 对象,该对象能够返回由给定列名称数组指定的自动生成键
      

  4.   

    自动生成键:比如mysql中的autoincreament还有oracle中的叫ide什么来,能返回这东西
    如果未指定表示自动生成键的列,则驱动自己确定最能表示自动生成键的列,然后返回。
      

  5.   

    补充:
    prepareStatement(String sql,String[] columnNames)这个方法中的第一个参数是SQL语句,这个SQL语句是带有问号的那种,
    第二个参数是对SQL语句中的问号的赋值。
    case: 
        String sql = "INSERT INTO EMP(EMPNO,ENAME) VALUES(?,?)";
        String[] array = { "1", "Dawei"};
        con.prepareStatement(sql, array); 
    如果我没有记错的话,这样应该是没有问题的
      

  6.   

    好像不是吧。。columnNames - 指示应该从一个或多个插入行中返回的那些列的列名称组成的数组 ,这个是字段名,怎么可能去赋值呢。
      

  7.   


    可能是吧,好久不用JDBC,记性不太好