# SQL Datenbank an Java Code anbinden



## Feras (22. Okt 2015)

Hi, ich habe ein "Lagerverwaltungssystem" programmiert, samt GUI und so. Nun möchte ich die Daten, die man eingeben kann dauerhaft speichern. Bisher geht dies ja nur, solange, wie das Programm an ist. Wie funktioniert das? Bisher habe ich noch nichts richtiges gefunden, wie ich eine SQL Datenbank in meinen Java Code einfüge?

MfG 
Feras


----------



## Joose (22. Okt 2015)

Hier ein Link wie man SQLite in Java verwendet.
http://www.tutorialspoint.com/sqlite/sqlite_java.htm
Kleiner Tipp: Bau es nicht gleich in deinem Projekt ein! Teste es erstmal mit einer Dummy Tabelle und ein paar Testdaten, damit du ein Gefühl dafür bekommst.

Natürlich gibt es mehrere verschiedene Datenbanken (mySQL, Oracle, Firebird, SQLite, H2Database, MSSQL, .....) welche du nun wirklich verwendest hängt von der Anforderung ab. Aber SQLite oder MySql sollte für den Anfang reichen.

SQLite speichert die Daten in einer Datenbankdatei. Und man muss nicht extra etwas installieren bzw. laufen lassen.
Bei MySql muss eben einen Server laufen damit man auf die DB Zugriff hat.


----------



## Feras (29. Okt 2015)

ja, das habe ich nun auch geschafft und mit auch eine Datenbank zum laufen bekommen. Bloß wie kann ich jetzt Daten von z.B. einer Datenbank in eine JTable übertragen und anders herum?


----------



## Joose (29. Okt 2015)

Sorry aber sowas ist kann man einfach per Google finden: https://www.google.at/search?q=java...s_rd=cr&ei=V0YyVrDJB8O0Uffrj6gH#q=java+sqlite
Gleich der 1.Link zeigt einem ein Beispiel wie man eine Verbindung zur Datenbank aufbaut und dann Daten einer Tabelle abfragt.

Tipp: Teste den Aufbau der Verbindung und das Auslesen von Daten einfach mal Anhand von Dummy Daten in einer kleinen Konsolenapplikation. Fange nicht direkt an die Daten auf einer GUI ausgeben zu wollen.

Und bezüglich JTable: https://www.google.at/search?q=java+jtable&ie=utf-8&oe=utf-8&gws_rd=cr&ei=2kYyVoXPO8WHU8rEq5gK
Auch hier einer der ersten Links mit Beispielen wie man die Daten in eine JTable bekommt.


----------



## Feras (31. Okt 2015)

So das habe ich mir nun angeschaut. Allerdings erhalte ich den Fehler: "java.sql.SQLException: UNIQUE constraint failed: COMPANY.ID" und weiß nicht, was ich jetzt machen soll?


```
import java.sql.*;

import javax.swing.table.DefaultTableModel;

public class SQLiteJDBC
{  
   public static DefaultTableModel model = new DefaultTableModel();
  
  public static void main( String args[] )
  {
  Connection c = null;
  Statement stmt = null;
  try {
  Class.forName("org.sqlite.JDBC");
  c = DriverManager.getConnection("jdbc:sqlite:test.db");
  c.setAutoCommit(false);
  System.out.println("Opened database successfully");
  
  stmt = c.createStatement();
  String sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " +
  "VALUES (7, 'xy', 66, 'California', 20000.00 );";
  stmt.executeUpdate(sql);
  c.commit();
  ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" );

  while ( rs.next() ) {
      
      int id = rs.getInt("id");
      String  name = rs.getString("name");
      int age  = rs.getInt("age");
      String  address = rs.getString("address");
      float salary = rs.getFloat("salary");
      
       model.addColumn("id");
       model.addColumn("name");
       model.addColumn("age");
       model.addColumn("address");
       model.addColumn("salary");
      
       model.addRow(new Object[] { id + name + age + address + salary});

  }
  rs.close();
  stmt.close();
  c.close();
  } catch ( Exception e ) {
  System.err.println( e.getClass().getName() + ": " + e.getMessage() );
  System.exit(0);
  }
  System.out.println("Operation done successfully");
  }
}
```


----------



## Joose (2. Nov 2015)

Bitte schaue dir die Grundlagen von SQL genauer an 
Auch dieser ist einfach durch Google und Grundlagen herauszufinden 

Dein Spalte "ID" in der Tabelle Company dürfte ein PrimaryKey sein. Sprich jeder Wert darf in dieser Spalte nur 1x vorkommen, damit man den Datensatz eben eindeutig identifizieren kann.
Da du immer genau die gleiche Company mit der gleichen ID eintragen willst bekommst du den Fehler. 

Entweder löscht du am Ende deines Testprogrammes immer wieder diesen Datensatz, oder aber du verwendest AUTO INCREMENT um deine Id automatisch hochzählen zu lassen.


----------

