Почему (1) код JDBC работает, а (2) нет? - PullRequest
0 голосов
/ 23 апреля 2011

(1)

import java.sql.*;

public class jdbcDemo

{static Connection con=null;

    public static void main(String args[])
    { int id = 0;
    try
    { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      con = DriverManager.getConnection("jdbc:odbc:login");

      Statement stat = con.createStatement();
      System.out.println("got connection");
      ResultSet rs = stat.executeQuery("Select max(UID) from mytable");
      while(rs.next())
      { id=rs.getInt(1);
      }
      id++;
      System.out.println(id);
      PreparedStatement ps = con.prepareStatement("INSERT into mytable(UID,Username,Password) values(?,?,?)");
      ps.setInt(1,id);
      ps.setString(2,"abhi");
      ps.setString(3,"bindra");


       ps.executeUpdate();





        }
    catch(Exception e)
    {

       e.printStackTrace();
    }



}
}

(2)

import java.sql.*;

public class jdbcDemo

{static Connection con=null;

    public static void main(String args[])
    { int id = 0;
    try
    { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      con = DriverManager.getConnection("jdbc:odbc:login");

      Statement stat = con.createStatement();
      System.out.println("got connection");
      ResultSet rs = stat.executeQuery("Select max(UID) from mytable");
      while(rs.next())
      { id=rs.getInt(1);
      }
      id++;
      System.out.println(id);
      PreparedStatement ps = con.prepareStatement("INSERT into mytable(UID,Username,Password) values(?,?,?)");
      ps.setInt(1,id);
      ps.setString(2,"abhi");
      ps.setString(3,"bindra");


       ps.executeUpdate();
       String s1,s2;
       ResultSet rs1 = stat.executeQuery("Select  * from mytable where UID="+id+"");
        while(rs1.next())
        {
            s1=rs1.getString(2);
            s2=rs1.getString(3);
            System.out.print(s1+s2);
        }





        }
    catch(Exception e)
    {

       e.printStackTrace();
    }



}
}

деталь

ResultSet rs1 = stat.executeQuery("Select  * from mytable where UID="+id+"");
    while(rs1.next())
    {
        s1=rs1.getString(2);
        s2=rs1.getString(3);
        System.out.print(s1+s2);
    }

почему деталь так важна?почему ps.executeUpdate () вставляет строку в таблицу.? Запись не отображается в таблице без вставки части в (1).

Ответы [ 2 ]

1 голос
/ 23 апреля 2011

ЗАКРЫВАЕТЕ ли вы когда-нибудь свои утверждения, наборы результатов и связи?Они должны быть, в заключительном пункте.

0 голосов
/ 23 апреля 2011

Автоматическое принятие не произойдет, пока вы не получите набор результатов, даже в операторе INSERT, UPDATE или DELETE. Смотри: http://download.oracle.com/javase/tutorial/jdbc/basics/transactions.html

по умолчанию оператор SQL фиксируется при его завершении, а не при выполнении. Оператор завершается, когда все его наборы результатов и количество обновлений были получены.

Попробуйте отправить коммит в базу данных через con.commit() сразу после его выполнения, если вас не интересует результат обновления.

...