Как получить идентификатор вставки в JDBC? - PullRequest
349 голосов
/ 16 декабря 2009

Я хочу INSERT запись в базе данных (в моем случае это Microsoft SQL Server) с использованием JDBC в Java В то же время я хочу получить идентификатор вставки. Как я могу добиться этого, используя JDBC API?

Ответы [ 12 ]

0 голосов
/ 18 января 2018

Вместо комментария , я просто хочу ответить на пост.


Интерфейс java.sql.PreparedStatement

  1. columnIndexes «Вы можете использовать функцию prepareStatement, которая принимает columnIndexes и оператор SQL. Там, где допустимыми константами columnIndexes являются флаги Statement.RETURN_GENERATED_KEYS 1 или Statement.NO_GENERATED_KEYS [2], оператор SQL, который может содержать один или несколько символов «?» Заполнители параметра IN.

    SYNTAX «

    Connection.prepareStatement(String sql, int autoGeneratedKeys)
    Connection.prepareStatement(String sql, int[] columnIndexes)
    
    * 1 028 * Пример:
    PreparedStatement pstmt = 
        conn.prepareStatement( insertSQL, Statement.RETURN_GENERATED_KEYS );
    

  1. columnNames « Перечислите столбцыNames как 'id', 'uniqueID', .... в целевой таблице, которая содержит автоматически сгенерированные ключи, которые должны быть возвращены. Драйвер будет игнорировать их, если оператор SQL не является оператором INSERT.

    SYNTAX «

    Connection.prepareStatement(String sql, String[] columnNames)
    

    Пример: * 1 047 *

    String columnNames[] = new String[] { "id" };
    PreparedStatement pstmt = conn.prepareStatement( insertSQL, columnNames );
    

Полный пример:

public static void insertAutoIncrement_SQL(String UserName, String Language, String Message) {
    String DB_URL = "jdbc:mysql://localhost:3306/test", DB_User = "root", DB_Password = "";

    String insertSQL = "INSERT INTO `unicodeinfo`( `UserName`, `Language`, `Message`) VALUES (?,?,?)";
            //"INSERT INTO `unicodeinfo`(`id`, `UserName`, `Language`, `Message`) VALUES (?,?,?,?)";
    int primkey = 0 ;
    try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        Connection conn = DriverManager.getConnection(DB_URL, DB_User, DB_Password);

        String columnNames[] = new String[] { "id" };

        PreparedStatement pstmt = conn.prepareStatement( insertSQL, columnNames );
        pstmt.setString(1, UserName );
        pstmt.setString(2, Language );
        pstmt.setString(3, Message );

        if (pstmt.executeUpdate() > 0) {
            // Retrieves any auto-generated keys created as a result of executing this Statement object
            java.sql.ResultSet generatedKeys = pstmt.getGeneratedKeys();
            if ( generatedKeys.next() ) {
                primkey = generatedKeys.getInt(1);
            }
        }
        System.out.println("Record updated with id = "+primkey);
    } catch (InstantiationException | IllegalAccessException | ClassNotFoundException | SQLException e) {
        e.printStackTrace();
    }
}
0 голосов
/ 15 марта 2017
Connection cn = DriverManager.getConnection("Host","user","pass");
Statement st = cn.createStatement("Ur Requet Sql");
int ret  = st.execute();
...