SQL und Java

duermer

Mitglied
Hi hab folgendes Problem.

Und zwar wenn ich in Java einer SQL-Datenbank einen Datensatz hinzufügen will, dann mach ich das so:
Code:
stmt.executeUpdate("INSERT INTO table_stempel " + 
VALUES ("+sql.User + ","+sql.Projekt_ID+"," + sql.Work_ID + ",'" + date + "','','"+sql.imei+"',"+sql.Projekt_Number+",'0',0,'0')");

Aber bei mir hat das erste Feld, die Index Spalte einen AutoWert.

Wie kann ich heruasfinden, welchen AutoWert der gerade hinzugefügt Datensatz hat?

Wäre um jede Hilfe dankbar.

Mit freundlichen Grüßen
Patrick Hennig
 
Hallo!

Normalerweise macht man das so...:
Code:
package de.tutorials;

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

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

public class JdbcTest {

	public static void main(String[] args) {
		try {
			Class.forName("com.mysql.jdbc.Driver").newInstance();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

/*

use test;
Database changed
mysql> create Table content (id int auto_increment primary key, content varchar(128));
Query OK, 0 rows affected (0.25 sec)


*/

		MysqlDataSource mds = new MysqlDataSource();
		mds.setUser("root");
		mds.setPassword("");
		mds.setUrl("jdbc:mysql://localhost/test");

		try {
			Connection con = mds.getConnection();

			PreparedStatement ps = con.prepareStatement(
					"INSERT INTO content(content) VALUES (?)",
					Statement.RETURN_GENERATED_KEYS);
			ps.setString(1, "Hallo" + System.currentTimeMillis());

			ps.execute();

			ResultSet rs = ps.getGeneratedKeys();
			while (rs.next()) {
				System.out.println(rs.getString(1));
			}

			rs.close();
			ps.close();
			con.close();
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
	}
}
aber nicht jedes DBMS / nicht jeder JDBC Treiber bietet diese Funktionalität an.
(MySQL 4.1.7 und mysql-connector-java-3.1.4-beta-bin.jar können es zumindest)

Der sun.jdbc.JdbcOdbcDriver z.Bsp. kann das meines erachtens nicht...

Gruß Tom
 
Hallo,

mit dem sun.jdbc.JdbcOdbcDriver kann man den zuletzt generierten Autoindex so ermitteln:
Code:
st.executeUpdate("INSERT INTO " + tab +" (Tbez, Tzahl) VALUES ('Test', 1)");
ResultSet rs = st.executeQuery("SELECT @@IDENTITY as pKey FROM " + tab);
long pKey = 0;
if(rs.next())
	   pKey = rs.getLong("pKey");
rs.close();
Damit bekommt man die ID des letzten Datensatzes.
 
du kannst folgendes verwenden:
Code:
  st.executeUpdate(sqlQuery, Statement.RETURN_GENERATED_KEYS);

nach erfolgreichem query bekommst du mithilfe von getGeneratedKeys ein ResultSet geliefert indem die generierten IDs zu finden sind.
Code:
  ResultSet rs = st.getGeneratedKeys();
 
Hallo!

@ Aufziehvogel ... siehe mein Post.

@Bernd ich habs mit dem JdbcOdbcDriver nur in Verbindnung mit MS Access versucht und da bekam ich eine UnsupportedOperationException ...

Gruß Tom
 
Zurück