Не удается обнаружить ошибку в следующем коде JDBC - PullRequest
0 голосов
/ 23 апреля 2011

с заменой на

package p1;



import java.sql.*;

public class jdbcDemo

{

    public static void main(String args[])
    { int id = 0;
    try
    { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
       Connection con = DriverManager.getConnection("jdbc:odbc:loginDSN");
       Connection con1 = DriverManager.getConnection("jdbc:odbc:loginDSN");
      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 = con1.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();
    }



}
}

вывод

есть соединение 6

но изменения не отражены: (

Ответы [ 2 ]

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

Вы пытаетесь вставить новый UID с текущим MAX (UID).Я полагаю, что UID является первичным ключом, поэтому требует уникальности.Либо добавьте единицу к id во время вставки (также используя предложение WhiteFang34), используйте последовательность или какой-либо другой механизм для автообновления столбца (например, autonumber в MySQL).

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

Поскольку вы читаете UID как int, вам может потребоваться установить его как единое целое. Вам также, вероятно, потребуется увеличить его на единицу, поскольку в настоящее время вы используете max(UID), который уже существует.

ps.setInt(1, id + 1);

Или, возможно, вам вообще не нужно его указывать, потому что это столбец с автоинкрементом?

...