Problem mit Access abfrage

Status
Nicht offen für weitere Antworten.

Dagobert

Bekanntes Mitglied
So ich habe auch nochmal ein par Fragen zu der DB.
Ich habe versucht die ID als rückgabewert zu bekommen, soblad ich ein neuen Datensatz einfüge. Nur leider geht jetzt gar nichts mehr mit folgender Fehlermeldung:
Exception in thread "main" java.sql.SQLException: Invalid Cursor Type.
at sun.jdbc.odbc.JdbcOdbcStatement.initialize(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcConnection.createStatement(Unknown Source)
at Datenbank.HDR_Datenbank.openDB(HDR_Datenbank.java:17)
at Datenbank.HDR_Datenbank.main(HDR_Datenbank.java:60)
Und wie kann ich nur das Datum in einer Access Datenbank speichern?
Mein Code:
Code:
package Datenbank;

import java.sql.*;
import java.util.Date;
import java.util.Vector;

public class HDR_Datenbank {
	private static Connection con;
	private static Statement stmt;
	private static ResultSet rs;
	// Methode zum Verbinden mit der Herr der Ringe Datenbank
	public static void openDB() throws SQLException, ClassNotFoundException {
		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		con = DriverManager
				.getConnection("jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=resourcen/hdr.mdb");

		stmt = con.createStatement(Statement.CLOSE_ALL_RESULTS, Statement.RETURN_GENERATED_KEYS);
	}
	// Methoden zur Abfrage der Optionen
	public static String[] abfrageOptionen() {
		try {
			rs = stmt.executeQuery("SELECT * FROM Optionen");
			ResultSetMetaData rsmd = rs.getMetaData();
	  		int clmCnt = rsmd.getColumnCount();
	  		String[] erg = new String[clmCnt];
			while(rs.next()){
				for(int i = 0; i < erg.length; i++){
					erg[i] = rs.getString(i+1);
				}
			}
			return erg;
		} catch (SQLException e) {
			System.out.println("Fehler beim laden der Datenbank!");
			e.printStackTrace();
			return null;
		}
	}
	// Methode zum hinzufügen eines neuen Profils
	public static void addNewProfil(String name){
		try {
			Date date = new Date();
			System.out.println(date);
			int key = -1;
			stmt.execute("INSERT INTO Profil VALUES ('"+name+"','0','0','"+date+"','"+date+"'))", key);
			System.out.println("Key: " + key);
			stmt.executeUpdate("UPDATE Optionen SET LastProfil = " + key);
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("Fehler beim laden der Datenbank!");
		}
	}
	
	public static void closeDB() throws SQLException {
		rs.close();
		stmt.close();
		con.close();
	}
	
	public static void main(String argv[]) throws SQLException, ClassNotFoundException{
		HDR_Datenbank.openDB();
		HDR_Datenbank.addNewProfil("Test");
		HDR_Datenbank.closeDB();
	}
}
 
G

Guest

Gast
Die Fehlermeldung beschreibt doch, was falsch ist. Der folgende Aufruf ist falsch. Lese in der Beschreibung
zu createStatement, was die Parameter zu bedeuten haben und welche Werte möglich sind.
Code:
stmt = con.createStatement(Statement.CLOSE_ALL_RESULTS, Statement.RETURN_GENERATED_KEYS);
Verwende am besten PreparedStatements, dann hast du den Ärger mit unterschiedlicher Formattierung nicht,
das ganze wird auch übersichtlicher. Bennen auch alle Spalten, die du bei Insert einfügst, das schützt dich vor
bösen Überraschungen, wenn du die Datenbank änderst und es ist auch besser sofort im Code erkennen zu
können, was gespeicher wird.
 

Dagobert

Bekanntes Mitglied
Ja der Fehler liegt da.
Ich weis nur nicht wie ich ihn umgehen kann. Ich brauche ja eingetlich nur
Code:
Statement.RETURN_GENERATED_KEYS
aber wie stelle ich das an. Ich kann den anderen Parameter ja nicht null oder 0 setzten. Aber was soll ich denn da reinschreiben.
Ich habe in der API geguckt, aber ich weis trozdem nichts passendes.

mfg Dagobert

auchja hast du auch ne lösung für mein Datum ;) ?
 

Dagobert

Bekanntes Mitglied
So ich habe schonmal eine Methode mit PreparedStatment angepasst.
Ist dies nun besser?
Code:
// Methode zum hinzufügen eines neuen Profils
	public static void addNewProfil(String name){
		try {
			int key = -1;
			Date date = new Date();
			Timestamp timestamp = new Timestamp(date.getTime());
			PreparedStatement updateProfiel = con.prepareStatement(
			"INSERT INTO Profil (Name, Siege, Niederlagen, Anlegedatum, LetzterLogin) VALUES (?,0,0,?,?)");
			updateProfiel.setString(1, name);
			updateProfiel.setTimestamp(2, timestamp);
			updateProfiel.setTimestamp(3, timestamp);
			updateProfiel.executeUpdate();
			System.out.println(key);
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("Fehler beim laden der Datenbank!");
		}
	}
Nur leider scheiterts noch immer an der Rückgabe der ID. Kann das sein das der Treiber keine
Code:
PreparedStatement.RETURN_GENERATED_KEYS.
unterstüzt.
Ich bekommen immer sobald ich ihn jetzt einbaue eine
java.lang.UnsupportedOperationException
Stimmt meine vermutung? Habe dazu auch schon hinweise im Forum gefunden.
Wie kann ich den dann an meinene letzte ID kommen?
 

yajp

Mitglied
Hallo Hagobert,
stimmt kannst Du da nicht verwenden.
Um bei M$ Access an den gerade generierten Autowert zu kommen kannst Du
Code:
SELECT @@IDENTITY
verwenden.
Einfach mit Statement.executeQuery() ausfuehren und das Ergebnis auslesen.


Soviel ich weiss musst Du das aber vor einem Commit machen (hab mit Access jetzt länger nicht mehr gearbeitet).
hth

Grüsse
 
G

Gast

Gast
In der createStatement-Anweisung solltest Du Konstante von "ResultSet" und nicht von "Statement" verwenden, dadurch hast Du ungewollte Zahlwerte.

Gruß wicki
 

Dagobert

Bekanntes Mitglied
So läuft läuft

vielen Dank für eure Hilfe
Ist der Code den so in ordnung oder hab ihr noch ein par Anmerkungen?
Code:
// Methode zum hinzufügen eines neuen Profils
	public static void addNewProfil(String name){
		try {
			int key = -1;
			Date date = new Date();
			Timestamp timestamp = new Timestamp(date.getTime());
			PreparedStatement updateProfiel = con.prepareStatement(
				"INSERT INTO Profil (Name, Siege, Niederlagen, Anlegedatum, LetzterLogin) VALUES (?,0,0,?,?)");
			updateProfiel.setString(1, name);
			updateProfiel.setTimestamp(2, timestamp);
			updateProfiel.setTimestamp(3, timestamp);
			updateProfiel.executeUpdate();
			updateProfiel.clearParameters();
			rs = stmt.executeQuery("SELECT @@IDENTITY");
			rs.next();
			key = rs.getInt(1);
			updateProfiel = con.prepareStatement("UPDATE Optionen Set LastProfil = ?");
			updateProfiel.setInt(1, key);
			updateProfiel.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("Fehler beim laden der Datenbank!");
		}
	}
mfg. Dagobert
 
G

Guest

Gast
Verwende direkt die generierten PKs, statt irgendwelche Exoten aus MS-Access zu verwemden
Code:
public static int addNewProfil(String name) throws DaoException {
   PreparedStatement stmt = null;
   try {
      stmt = con.prepareStatement(
         "INSERT INTO Profil (Name, Siege, Niederlagen, Anlegedatum, LetzterLogin) "
        +"VALUES (?,0,0,CURRENT_TIMESTAMP(),CURRENT_TIMESTAMP())"
        , Statement.RETURN_GENERATED_KEYS
      );
      stmt.setString(1, name);
      stmt.executeUpdate();
      ResultSet rs = stmt.getGeneratedKeys();
      if(!rs.next()) {
         // Kein PK, dann läuft hier was schief
         throw new DaoException("007", "Fehler beim Erstellen von ....");
      }
      return rs.getInt(1);
   }
   catch(SQLException e) {
      Logger
      throw new DaoException(e);
   }
   finally {
      if(stmt != null) {
         try {
            stmt.close();
         }
         catch(SQLException e) {
            // Sollte nie kommen und wenn, dann hast du an zig anderen Stellen ein Problem.
            throw new DaoException(e);
         }
      }
   }
}
Das Update für Optionenen gehört in eine getrennte Methode.
 

Dagobert

Bekanntes Mitglied
Hm... mein Access weigert sich immer noch
Code:
Statement.RETURN_GENERATED_KEYS
azunehmen.
Und auch
Code:
CURRENT_TIMESTAMP()
nimmt er nicht. oO
Ich habe als DB nur eine Access mappe XD und kein SQL Server o.a. ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Access 32bit on Win7 64Bit ODBC Problem Datenbankprogrammierung 1
R MS Access mit Java Problem mit Update Statment Datenbankprogrammierung 13
M Problem mit Hibernate und Access Datenbankprogrammierung 9
T Problem bei Zugriff auf Access Datenbank Datenbankprogrammierung 7
T Problem beim Update in die Access DB Datenbankprogrammierung 9
alexpetri Problem mit jdbc MS Access / nach 670 inserts ist schluss. Datenbankprogrammierung 4
K Problem mit datenbankanbindung unter access 2003 Datenbankprogrammierung 3
J Problem bei ODBC Verbindung mit Access Datenbankprogrammierung 4
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
C Problem mit Apache Poi Datenbankprogrammierung 6
N HSQLDB Problem mit Eclipselink in runnable Jar Datenbankprogrammierung 10
P GroupLayout-Problem Datenbankprogrammierung 12
F XAMPP max connections problem Datenbankprogrammierung 6
C MySQL Problem in phpMyAdmin Oberfläche Datenbankprogrammierung 5
C Problem with INSERT.............ON DUPLICATE KEY Datenbankprogrammierung 3
C Problem with insertion in database. Datenbankprogrammierung 7
F Problem mit Hibernate c3p0 Datenbankprogrammierung 2
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
A kleines Problem Datenbankprogrammierung 6
T Problem mit Datenbankverbindung Datenbankprogrammierung 22
V Derby/JavaDB updateRow Problem Datenbankprogrammierung 0
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
Nuiton EmbeddedDriver Problem Datenbankprogrammierung 6
A MongoDB Passwort Problem Datenbankprogrammierung 0
O HSQLDB Hibernate Criteria Problem Datenbankprogrammierung 3
F MySQL JDBC Problem Datenbankprogrammierung 5
Anfänger2011 Datenbankstruktur/aufbau (theoretisches Problem) Datenbankprogrammierung 5
M Derby/JavaDB Drop Database problem Datenbankprogrammierung 3
M Derby/JavaDB NOT LIKE problem Datenbankprogrammierung 19
N HSQLDB Problem mit EntityManager Datenbankprogrammierung 7
B MySQL JPAContainer Problem Datenbankprogrammierung 4
K Eclipse Apache Derby Treiber Problem Datenbankprogrammierung 4
C Problem oder Denkfehler mit H2-Database Datenbankprogrammierung 3
E Wie kann man das Problem mit der BLOB-Spalte lösen? Datenbankprogrammierung 1
M Problem mit jcouchdb und CouchDB - UTF8 kein gültiger Zeichentyp Datenbankprogrammierung 4
T MySQL Problem mit Datenbankanbindung Datenbankprogrammierung 4
M INSERT-Problem = integrity constraint violation: foreign key no parent Datenbankprogrammierung 5
P SQL Query Problem Datenbankprogrammierung 14
A MySQL Problem bei Tabelle ausgeben Datenbankprogrammierung 3
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
B SQLite Problem bei Planung der Datenbank [Jeopardy] Datenbankprogrammierung 3
A Problem mit dem Import und Export von Bildern Datenbankprogrammierung 4
P Oracle Problem mit Umlauten Datenbankprogrammierung 9
A Problem mit Create-Statement Datenbankprogrammierung 9
D Problem mit COLUMN_IDENTIFIERS Datenbankprogrammierung 8
Bluedaishi MySQL Abfrage Problem :-) Datenbankprogrammierung 21
M Problem mit mehreren Datasourcen Datenbankprogrammierung 3
R Resultset.last() Problem Datenbankprogrammierung 12
M Problem GroupBy Datenbankprogrammierung 3
S CURRENT_DATE problem Datenbankprogrammierung 2
M Problem mt JPA Id-Generators Datenbankprogrammierung 18
Gossi Oracle Problem mit group by... Datenbankprogrammierung 22
M MySQL SQL Abfrage Problem Datenbankprogrammierung 6
R MS-SQL Express Login-Problem Datenbankprogrammierung 8
P Lazy-Fetchig und Session-Problem mit Hibernate Datenbankprogrammierung 4
N HSQLDB Problem beim Treiberladen im Jar Datenbankprogrammierung 6
M Problem beim Erstellen einer Query Datenbankprogrammierung 7
C Hibernate ManyToMany zusammengesetzter Primärschlüssel, problem. Datenbankprogrammierung 3
M Problem mit HQL Syntax Datenbankprogrammierung 5
K Db4o Delete Problem Datenbankprogrammierung 11
Mike90 Deadlock/Lock Problem Datenbankprogrammierung 4
C unverständliches DB Problem (Es ist kein temporärer Systemtabellenbereich mit einer ausreichenden..) Datenbankprogrammierung 5
S ODBC Treiber Problem/oder unvermögen Datenbankprogrammierung 18
J Problem bei Boolean in PreparedStatement Datenbankprogrammierung 5
C MySQL Problem mit UPDATE Abfrage Datenbankprogrammierung 13
C Problem mit SQL-Abfrage Datenbankprogrammierung 5
K Problem mit Datenbankverbindung via Eclipse Datenbankprogrammierung 2
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
S Oracle Problem mit PreparedStatement.setString(1,"str") Datenbankprogrammierung 10
B MySQL Problem mit Datenbankanbindung an MySQL Datenbankprogrammierung 2
N Problem bei Erstellung eines Index Datenbankprogrammierung 12
C Hibernate Property-Problem Datenbankprogrammierung 5
J MyBatis - Update Problem Datenbankprogrammierung 4
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
c_sidi90 Hibernate Problem Table doesnt excist Datenbankprogrammierung 8
M Problem mit JPA - OneToMany-Relation Datenbankprogrammierung 3
I Hibernate: Composite Foreign Key Problem Datenbankprogrammierung 14
S JPA OptimisticLocking Problem Datenbankprogrammierung 11
I Derby/JavaDB Problem mit Befüllung von Tabelle Datenbankprogrammierung 7
JavaKaffee Derby/JavaDB Quartz-WebAnwendung - Connection/Treiber Problem Datenbankprogrammierung 47
I Problem mit ResultSet Datenbankprogrammierung 2
L Excel in MySQL importieren Problem Datenbankprogrammierung 5
S Problem beim Anlegen einer Tabelle Datenbankprogrammierung 5
S MySQL Problem mit SELECT bzw encoding Datenbankprogrammierung 4
T Problem beim schreiben von daten Datenbankprogrammierung 4
M MySQL getConnection - Verbindung Problem Datenbankprogrammierung 2
K Hibernate + MySQL Problem... Datenbankprogrammierung 2
I MySQL MySQL – Proxy Problem Datenbankprogrammierung 4
M Problem mit Hibernate und Named Query Datenbankprogrammierung 1
C firebird problem Datenbankprogrammierung 5
F Problem mit Datenbankabfrage Datenbankprogrammierung 7
K SQL Problem mit Date Datenbankprogrammierung 3
jeppi MySQL Design-Problem: DB-Verbindung herstellen und halten - JdbcRowSet / Idle-Timeout? Datenbankprogrammierung 9
J sql abfrage ... Problem mit Datumswert Datenbankprogrammierung 3
G MySQL Connection Problem Datenbankprogrammierung 3
O MySQL Problem mit Umlauten?! Datenbankprogrammierung 2
E Hibernate Problem bei bidirektionaler 1:n Verbindung Datenbankprogrammierung 2
D MySQL Problem beim einfügen von Double-Zahlen Datenbankprogrammierung 4
M Oracle Problem mit Resultset Datenbankprogrammierung 11

Ähnliche Java Themen

Neue Themen


Oben