2009-04-17 2 views
0

Ich habe ein Buchstabenspiel in Java erstellt und ich muss eine Highscore-Funktion darin enthalten, die eine Microsoft Access-Datenbank über JDBC verwendet. Die Tabelle in der Datenbank enthält die folgenden FelderWie füge ich Werte in eine Microsoft Access-Datenbank über JDBC ein?

Table Name: Scores 

Name  (Text) 
Difficulty (Text) 
Characters (Number) 
Accuracy (Text) 
Time  (Text) 
Score  (Text) 

Ich brauche eine SQL-Anweisung Werte von Java legen Sie die Microsoft Access-Datenbank-Tabelle zu aktualisieren.

Antwort

1

INSERT INTO Scores (Name, Difficulty, Characters, Accuracy, Time, Score) 
VALUES ('Name Value', 'Difficulty Value', 3, 'High', '10:30', '235'); 

einzufügen, um zu aktualisieren, müssen Sie ein PRIMARY KEY in dem Spieltisch, so dass Sie nur einen bestimmten Datensatz aktualisieren (es sei denn, es Ihre Absicht ist es mehr als ein Datensatz zu aktualisieren). Ich würde empfehlen, eine PK auf dem Tisch zu haben.

Darüber hinaus stelle ich fest, dass Schwierigkeit, Genauigkeit, Zeit und Punktzahl alle textbasierten Felder sind - Jetzt weiß ich nicht, wie Ihre Datenbankschema/Design ist, aber Schwierigkeit, Genauigkeit und Punktzahl als numerisch in der Natur, während die Zeit wie ein Datum/Zeit klingt. Werfen Sie einen Blick auf die MS Access (JET DB Engine) Data types für weitere Informationen.

EDIT: Genommen von den Kommentaren

here Blick sieht es aus wie der beste Weg, um eine SQL-Anweisung in JDBC zu parametrieren wäre eine gespeicherte Prozedur (vorbereitete Anweisung) unter Verwendung von JDBC-API zu schreiben und legen Sie dann die Werte fest, die Sie als Parameter in die vorbereitete Anweisung einfügen müssen.

Hier ist ein JDBC tutorial on updating und a tutorial on inserting.

+0

Ich habe einen Primärschlüssel in der Scores-Tabelle, die Werte, die eingefügt werden müssen, sind in JAVA variabel, wie werden sie eingefügt ?? –

+0

Die Werte werden jedes Mal geändert, wenn das Spiel gespielt wird. –

+0

Werte werden geändert, oder ein neuer Datensatz wird in die Tabelle eingefügt? Ich bin mit JDBC nicht vertraut, aber wenn es ähnlich wie DAO, ADO oder ADO.NET ist, dann sollten Sie in der Lage sein, ein Befehlsobjekt mit Parametern zu erstellen, deren Werte diejenigen sind, die Sie einfügen/aktualisieren und dann ausführen möchten Befehlsobjekt, mit einer Verbindung zum DB –

2

versuchen, etwas wie folgt aus:

String dataSourceName = "my_ODBC_DSN_name"; 
String username = "username"; 
String password = "password"; 
String url = "jdbc:odbc:" + dataSourceName; 

Connection con = null; 
try { 
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    con = DriverManager.getConnection(url, username, password); 

    PreparedStatement pst = con.prepareStatement("INSERT INTO Scores " 
      + "(Name, Difficulty, Characters, Accuracy, Time, Score) " 
      + "VALUES (?, ?, ?, ?, ?, ?)"); 

    pst.setString(1, "Name String"); 
    pst.setString(2, "Difficulty String"); 
    pst.setInt(3, 20); 
    pst.setString(4, "Acurracy String"); 
    pst.setString(5, "Time String"); 
    pst.setString(6, "Score String"); 

    pst.executeUpdate(); 
} catch (SQLException e) { 
    e.printStackTrace(); 
} catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
} finally { 
    if (con != null) 
    try { 
     con.close(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

Sie haben eine ODBC-DSN zuerst in der Windows-Systemsteuerung einzurichten. Es ist in Systemsteuerung -> Verwaltung -> Datenquellen.

Neben Ihrer Hauptfrage habe ich auch die Meinung von Russ Cam, dass Sie wahrscheinlich Ihr Datenbankschema überarbeiten sollten, so dass Sie die entsprechenden Spaltentypen für die Spalten Zeit und Punkte und möglicherweise für Genauigkeit und Schwierigkeit verwenden. In einem normalisierten Design wäre "Name" auch ein Fremdschlüssel (etwas wie player_id) zu einer anderen Tabelle, die die Details für jeden Spieler enthält.

Verwandte Themen