codestory

Holen Sie sich die automatisch erhöhenden Wert der Spalte bei dem Insert eines Rekord, der JDBC benutzt

  1. Das Problem
  2. Die Wert von Spalte ID von dem eingefügten Rekord entnehmen
  3. Die Wert von der eingefügten Spalten entnehmen

1. Das Problem

In einigen Database kann die Spalte ID von einer Tabelle das automatisch erhöhenden Wertstyp. Bei Einfügen eines Rekord in der Tabelle wird die Wert der Spalte durch die Database angewiesen . Sie können die Wert für sie nicht bestimmen. Ihre Frage liegt darin, wie im Fall die ID von dem eingefügten Rekord zu entnehmen
Außerdem können einigen Spalte an den Befehl Insert nicht teilnehmen. In diesem Fall wird ihre Wert standardmäßig nach der Database angewiesen. Sie möchten ohne die Erstellung eines Abfragebefehl die Werte entnehmen
PostGres
Im PostGres hat die Spalte das Typ vom Serial, deren Wert sich durch die Database automatisch erhöht
** Employees (PostGres) **
CREATE TABLE Employees
(
    ID serial NOT NULL,
    Full_Name character varying(50) NOT NULL,
    Gender character varying(1) default 'M' NOT NULL,
    Hire_Date date NOT NULL,
    PRIMARY KEY (ID)
);
MySQL
Im MySQL um eine Spalte mit der automatisch erhöhenden Wert zu haben, soll sie das Attribut (attribute) "Auto_Increase" angewiesen.
** Employees (MySQL) **
CREATE TABLE Employees
(
    ID Int Auto_Increase NOT NULL,
    Full_Name Varchar(50) NOT NULL,
    Gender Varchar(1) default 'M' NOT NULL,
    Hire_Date date NOT NULL,
    PRIMARY KEY (ID)
);

2. Die Wert von Spalte ID von dem eingefügten Rekord entnehmen

Wenn Sie JDBC benutzen um einen Rekord in Database zu Insert . Die Spalte ID kann an den Befehl Insert nicht teilnehmen. Die Position von der Spalte ID wird durch die Design der Tabelle bestimmt. Die erste Spalte hat die Index 1, die zweite Spalte hat die Index 2...
GeneratedIDValueExample.java
package org.o7planning.tutorial.jdbc.others;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.o7planning.tutorial.jdbc.ConnectionUtils;

public class GeneratedIDValueExample {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		// Die Verbindung nach der Database entnehmen.
		Connection conn = ConnectionUtils.getMyConnection();

		// Employees (id, full_name, gender, hire_date)
		// ID: Auto Increase
		String sql = "Insert into Employees " //
				+ " (full_name, gender, hire_date) " //
				+ " values " //
				+ " (?, ?, ?)";

		// Ein Objekt PreparedStatement erstellen.
		PreparedStatement pstm = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

		pstm.setString(1, "Tran");
		pstm.setString(2, "M");
		pstm.setDate(3, new java.sql.Date(System.currentTimeMillis()));

		// Execute!
		pstm.execute();

		ResultSet rs = pstm.getGeneratedKeys();

		int idValue = 0;
		if (rs.next()) {
			// Die Wert von ID
			idValue = rs.getInt(1);
		}

		System.out.println("ID value: " + idValue);

	}
}
Die Index der Spalte ID der Tabelle kann 1 nicht sein (von der Design von der Tabelle abhängig). Im Fall ist es besten, dass Sie ihre Wert nach dem Name zugreifen sollen
GeneratedIDValueExample2.java
package org.o7planning.tutorial.jdbc.others;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.o7planning.tutorial.jdbc.ConnectionUtils;

public class GeneratedIDValueExample2 {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {

		Connection conn = ConnectionUtils.getMyConnection();

		// Employees (id, full_name, gender, hire_date)
		// ID: Auto Increase
		String sql = "Insert into Employees " //
				+ " (full_name, gender, hire_date) " //
				+ " values " //
				+ " (?, ?, ?)";

		// Create a PreparedStatement object.
		PreparedStatement pstm = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

		pstm.setString(1, "Tran");
		pstm.setString(2, "M");
		pstm.setDate(3, new java.sql.Date(System.currentTimeMillis()));

		// Execute!
		pstm.execute();

		ResultSet rs = pstm.getGeneratedKeys();

		int idValue = 0;
		if (rs.next()) {
			// Value of ID.
			// Note, for some DB, column names are case sensitive.
			// (eg Postgres, column names are always lowercase).
			idValue = rs.getInt("id");
		}

		System.out.println("ID value: " + idValue);

	}
}

3. Die Wert von der eingefügten Spalten entnehmen

Einige Zahlen können an Ihren Befehl Insert nicht teilnehmen. Ihre Wert werden durch die Database angewiesen. Sie können ihre Wert ohne die Erstellung eines Abfrage-Befehl entnehmen
GetGeneratedValueExample2.java
package org.o7planning.tutorial.jdbc.others;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.o7planning.tutorial.jdbc.ConnectionUtils;

public class GetGeneratedValueExample2 {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {

		Connection conn = ConnectionUtils.getMyConnection();

		// Employees (id, full_name, gender, hire_date)
		// ID: Auto Increase
		// gender: Default
		String sql = "Insert into Employees " //
				+ " (Full_Name,  Hire_Date) " //
				+ " values " //
				+ " (?,  ?)";

		// Ein Objekt  PreparedStatement erstellen.
		// Und den Outputparameter nach dem Name ("id", "gender", "hire_date") registrieren
		PreparedStatement pstm = conn.prepareStatement(sql, new String[] { "id", "gender", "hire_date" });

		pstm.setString(1, "Tran");
		pstm.setDate(2, new java.sql.Date(System.currentTimeMillis()));

		// Execute!
		pstm.execute();

		ResultSet rs = pstm.getGeneratedKeys();

		int idValue = 0;
		String gender = null;
		java.sql.Date hireDate = null;
		if (rs.next()) {
			idValue = rs.getInt("ID");
			gender = rs.getString("Gender");
			hireDate = rs.getDate("Hire_Date");
		}

		System.out.println("ID value: " + idValue + " Gender: " + gender + ", Hidedate: " + hireDate);

	}
}

Java Grundlagen

Show More