2016-05-11 14 views
0

Ich versuche, eine Tabelle zu erstellen, in die Tabelle einzufügen und den Inhalt der Tabelle mit Derby (wie unten gezeigt) zu drucken.Problem beim Implementieren der eingebetteten Derby-Datenbank im Eclipse-Projekt?

Testproject Klasse:

package com.user.DerbyTest; 

public class TestProject { 

    public static void main(String[] args) { 
     DBConnection db = new DBConnection(); 
     db.createTable(); 
     db.insertIntoTable("todd", 23, 'M'); 
     db.insertIntoTable("wayne", 54, 'M'); 
     db.printAll(); 
    } 
} 

DBConnection Klasse:

package com.user.DerbyTest; 

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


public class DBConnection { 
    private static final String DRIVER = "org.apache.derby.jdbc.*"; 
    private static final String JDBC_URL = "jdbc:derby:derbytest;create=true"; 

    Connection conn; 

    public DBConnection(){ 
     try { 
      this.conn = DriverManager.getConnection(JDBC_URL); 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     if (this.conn != null){ 
      System.out.println("Connected to database."); 
     } 
    } 

    public void createTable(){ 
     try { 
      conn.createStatement().execute("Create TABLE MyDerbytable(Name varchar(50), Age INT, Gender char(1))"); 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 


    public void insertIntoTable(String name, int age, char gender){ 
     try { 
      conn.createStatement().execute("INSERT INTO MyDerbytable Values ("+name+","+age+","+gender+")"); 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    public void printAll(){ 
     try { 
      Statement statement = this.conn.createStatement(); 
      ResultSet res = statement.executeQuery("Select * FROM MyDerbytable"); 

      while(res.next()){ 
       System.out.println(res.getString("Name") + res.getString("Age") + res.getString("Gender")); 
      } 


     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

Ich bin eine ganze plethra von Störungen zu erhalten, wenn diese zu laufen versuchen:

enter image description here

Irgendwelche Ideen?

EDIT: Ändern Fehler löschen:

enter image description here

Antwort

1

Ihre Tabelle bereits beendet. Probieren Sie DROP TABLE aus myderbytable;

+0

danke! aber immer noch Fehler .. siehe meine Bearbeitung – vkapustin

+0

Zeigen Sie die vollständige Fehlermeldung. – Tassu

+0

@vkapustin Können Sie Ihre Drop-Tabelle-Anweisung anzeigen? – Tassu

0

Ihre erste INSERT-Anweisung wird am Ende wird:

INSERT INTO MyDerbytable Values (todd,23,M) 

Sie haben keine Anführungszeichen um die todd und M Werte so dort als Verweise auf die Spaltennamen behandelt werden, so dass Sie die Fehler, den Sie sehen. Sie müssen Literalwerte wie dies in einfache Anführungszeichen setzen:

INSERT INTO MyDerbytable Values ('todd',23,'M') 

Also Ihr Einsatz Code könnte sein:

"INSERT INTO MyDerbytable Values ('"+name+"','"+age+"','"+gender+"')" 

(Hinweis Extra "Zeichen).

Aber Verkettung Strings wie Sie tun, lässt Sie weit offen zu SQL Injection Attacks. Es gibt auch Probleme, wenn eine Ihrer Eingaben ein Anführungszeichen enthält. Erfahren Sie mehr über die Verwendung von PreparedStatement.

+0

Ich benutze zwar Zitate? Und wenn ich "Todd" zu "Todd" ändere, erhalte ich den Fehler "Ungültige Zeichenkonstante". Ich mache mir mehr Sorgen darüber, dass ich nur so arbeiten kann, als ob irgendwas sonst. – vkapustin

+0

Nein, Sie verwenden keine Anführungszeichen. Verwechseln Sie die Anführungszeichen für Java-Zeichenfolgen nicht mit den Anführungszeichen, die Derby benötigt. Beispielcode zum Antworten hinzugefügt. –