ArrayList oder die Objekte in H2 Database speichern

somahu

Mitglied
Ich hab die ganze nacht und heute auch mich mit meiner Aufgabe und H2 Tutorial und beispiele beschäftigt, dass ich die ArrayList oder die Objekte in H2 Database speichern kann ..
Ich hab H2 installiert in eclipse auch, aber ich hab keine Ahnung, was ich in der Klasse schreiben soll.
Ich hab einen beispiel gefunden. aber ich verstehe es nicht .. wenn ich zu erst datenbank erstellen soll oder nun dass alles nur in der klasse "Database" schreiben soll.. Ich muss es bis morgen um 10 abschicken .. ich hab grade blackout, ich hoffe, dass jemand 10 minuten zeit hast um mir einen beispiel zu zeigen wie kann ich die ArrayList oder die Objekte die ich da hab in der Database speichern kann .. ich kann es gucken und verstehen und weiter machen ..

vielen vielen Dank, wenn ihr bisschen zeit hat und mir weiter helfen könntet. es wäre sehr nett.
Danke

meine code sieht jetzt so aus:

Main Klasse:

Java:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
 
public class Mainclass
{
	public static String input = null;
	public static List<Input> inputList = new ArrayList<Input>();
	public static Scanner scanner = new Scanner(System.in);
	
    public static void main(String[] args) throws Exception
 
    {
    	do
    	{
    
    	System.out.println("----------------------------------------------------------------------");
        System.out.println("Calculate your work time:  (1)  ");
        System.out.println("List all work times:       (2)  ");
        System.out.println("Save as Txt:               (3)  ");
        System.out.println("Save as Xml:               (4)  ");
        System.out.println("Save as Database:          (5)  ");
        System.out.println("Exit:                      (6)  ");
        System.out.println("----------------------------------------------------------------------");

        input = scanner.next();
    
  
        if (input.equals("1"))
        {
            calculateWork(inputList,scanner);
        }
        else if (input.equals("2"))
        {
            listWork(inputList);
        }
        else if (input.equals("3"))
        {
            Save.saveWorkTxt(inputList);
        }
        else if (input.equals("4"))
        {
        	Save.saveWorkXml(inputList);
        }
        else if (input.equals("5"))
        {
        	//Database.***(inputList);
        }
        
        else if (input.equals("6"))
        {
        	
        	System.out.println("Thank you for using The program.\n" +
        					   "Exit will Done !");
        	System.exit(0);
        }
        else
        {
            System.out.println("Incorrect entry!!!");
         
        }
    	}
        while (true);

    }
         

	private static void calculateWork( List<Input> inputList, Scanner scanner) 
    {
    	 double fulltime = 0.0;
    	 
        do
        {
            
            System.out.println("Please put your name:\n ");
            String name = scanner.next();
            System.out.println("Please put a date:\n");
            String date = scanner.next();
            System.out.println("Please put your start work time:\n");
            String starttime = scanner.next();
            System.out.println("Please put your end work time:\n");
            String endtime = scanner.next();
            System.out.println("Please put your start pause time:\n");
            String startpause = scanner.next();
            System.out.println("Please put your start pause time:\n");
            String endpause = scanner.next();
  
            Input inputObject = new Input(name, date, starttime, endtime,
                    startpause, endpause, fulltime );
 
            inputList.add(inputObject);
            inputObject.calculateTime();
 
            System.out.println(name+ " have worked on " +Input._icurrDay +
                    + inputObject.getFulltime()   +  "  hours.\n");
        
            System.out.println("Calculate another date ? (y/n)");
        }
        while (scanner.next().equals("y"));
        
    }
    
    
    private static void listWork( List<Input> inputList) 
    {
    	do
        {
    		
        for (int i = 0; i < inputList.size(); i++)
        {
            System.out.println("Date: " + inputList.get(i).getDate()
                    + "\nName: " + inputList.get(i).getName()
                    + "\nYou worked on this day: "
                    + inputList.get(i).getFulltime() + "hours.\n");
        }   
        System.out.println("To MainMenu ? (y/n)");
        }
        while (scanner.next().equals("n"));
        }
    	 
}

Input Klasse:

"Hier habe ich einen kleinen Problem, ich kriege Statt "Datum", "null",
warum weiß´s nicht. ich glaube, ich hab alles in der calculateDate richtig gebaut."

Danke dir

Java:
import java.util.GregorianCalendar;


public class Input
{
    public static String   _icurrDay;
    
    public String   _name;
    public String   _date;
    public String   _starttime;
    public String   _endtime;
    public String   _startpause;
    public String   _endpause;
    public double   _fulltime;

    
    public Input(String name, String date, String starttime, String endtime,
            String startpause, String endpause, double fulltime)
    {
        this._name = name;
        this._date = date;
        this._starttime = starttime;
        this._endtime = endtime;
        this._startpause = startpause;
        this._endpause = endpause;
        this._fulltime = fulltime;
    
    }
 
    public String getName()
    {
        return _name;
    }
 
    public void setName(String newName)
    {
        this._name = newName;
    }
 
    public String getDate()
    {
        return _date;
    }
 
    public void setDate(String newDate)
    {
        this._date = newDate;
    }
 
    public String get_starttime()
    {
        return _starttime;
    }
 
    public void set_starttime(String _starttime)
    {
        this._starttime = _starttime;
    }
 
    public String getEndtime()
    {
        return _endtime;
    }
 
    public void setEndtime(String newEndtime)
    {
        this._endtime = newEndtime;
    }
 
    public String get_startpause()
    {
        return _startpause;
    }
 
    public void setStartpause(String newStartpause)
    {
        this._startpause = newStartpause;
    }
 
    public String getEndpause()
    {
        return _endpause;
    }
 
    public void setEndpause(String newEndpause)
    {
        this._endpause = newEndpause;
    }
 
    public double getFulltime()
    {
        return _fulltime;
    }
 
    public void setFulltime(double newfulltime)
    {
        this._fulltime = newfulltime;
    }

    
 public void calculateTime()
    
    {
        String[] splitStartTime = _starttime.split(":");
 
        double startHour = Integer.valueOf(splitStartTime[0]).intValue();
        double startMinute = Integer.valueOf(splitStartTime[1]).intValue();
 
        double istartTime = startHour * 60 + startMinute;
 
        String[] splitEndTime = _endtime.split(":");
 
        double endHour = Integer.valueOf(splitEndTime[0]).intValue();
        double endMinute = Integer.valueOf(splitEndTime[1]).intValue();
 
        double iendTime = endHour * 60 + endMinute;
 
        String[] splitPauseStart = _startpause.split(":");
 
        double pauseStartHour = Integer.valueOf(splitPauseStart[0]).intValue();
        double pauseStartMinute = Integer.valueOf(splitPauseStart[1]).intValue();
 
        double ipauseStart = pauseStartHour * 60 + pauseStartMinute;
 
        String[] splitPauseEnd = _endpause.split(":");
 
        double pauseEndHour = Integer.valueOf(splitPauseEnd[0]).intValue();
        double pauseEndMinute = Integer.valueOf(splitPauseEnd[1]).intValue();
 
        double ipauseEnd = pauseEndHour * 60 + pauseEndMinute;
 
		        if (iendTime < istartTime)
		        {
		            if (ipauseEnd < ipauseStart)
		            {
		                _fulltime = (((24 * 60) + iendTime - istartTime) - ((24 * 60) + (ipauseEnd - ipauseStart))) / 60;
		            }
		            else
		            {
		                _fulltime = (((24 * 60) + iendTime - istartTime) - (ipauseEnd - ipauseStart)) / 60;
		            }
		        }
		        else
		        {
		            _fulltime = ((iendTime - istartTime) - (ipauseEnd - ipauseStart)) / 60;
		        }
    }
 
 public void calculateDate()
 {
	 String[] splitDate = _date.split(".");
	 int year = Integer.valueOf(splitDate[2]);
	 int month = Integer.valueOf(splitDate[1]);
	 int day = Integer.valueOf(splitDate[0]);
	 GregorianCalendar calendar = new GregorianCalendar(year, month, day);
	 int icurrDay = calendar.get(GregorianCalendar.DAY_OF_WEEK);
	 
			 if(icurrDay == 0)
			 {
				 _icurrDay = "Sunday";
			 }
			 if(icurrDay == 1)
			 {
				 _icurrDay = "Monday";
			 }
			 if(icurrDay == 2)
			 {
				 _icurrDay = "Tuesday";
			 }
			 if(icurrDay == 3)
			 {
				 _icurrDay = "Wednesday";
			 }
			 if(icurrDay == 4)
			 {
				 _icurrDay = "Thursday";
			 }
			 if(icurrDay == 5)
			 {
				 _icurrDay = "Friday";
			 }
			 if(icurrDay == 6)
			 {
				 _icurrDay = "Saturday";
			 }
		 }
 }

Save Klasse:

Java:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.List;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class Save {

	public static Writer txtoutput = null;
	public static Writer xmloutput = null;
	
    public static void saveWorkTxt(List<Input> inputList) throws Exception 
    {
	   do
	    {

				
			   		File data = new File("Times.txt"); 
			   		txtoutput = new BufferedWriter(new FileWriter(data));
		    	 
		    	 for (int i = 0; i < inputList.size(); i++)
		    	{
		    		 String string = "Name: " + Mainclass.inputList.get(i).getName() + 
		    				 		 "\nDate: " + Mainclass.inputList.get(i).getDate() + " from "
		    					+ Mainclass.inputList.get(i).get_starttime() + " to "
		    					+ Mainclass.inputList.get(i).getEndtime()
		    					+ " - worked on this day: "
		    					+ Mainclass.inputList.get(i).getFulltime() + "hours" + "\n\n";

		    		 txtoutput.write(string);
		    	}

		    	 txtoutput.close();
		    	 
		    	 System.out.println("The Info´s saved in your Workspace folder");
		    	 System.out.println("To MainMenu ? (y/n)");
		    }
		    while (Mainclass.scanner.next().equals("n"));
    }
   	
    public static void saveWorkXml(List<Input> inputList) throws Exception 
    {
        do
        {
            File data = new File("Times.xml"); 
            xmloutput= new BufferedWriter(new FileWriter(data));
         
         
            	XStream xstream = new XStream(new DomDriver());
                xstream.alias("Times", Input.class);
                String string = xstream.toXML(inputList);
                
                
                xmloutput.write(string);
        
                xmloutput.close();
                    
                    System.out.println("The Info´s saved in your Workspace folder");
                    System.out.println("To MainMenu ? (y/n)");
        }
                    while (Mainclass.scanner.next().equals("n"));
 
    }
}

Database Klasse: "Das ist einen Beispiel was ich gefunden hab aber ich verstehe es nicht, ich bin Anfänger, und hab nicht so viel Ahnung von Database, ich hab den Beispiel probiert und es verbindet sich und zeig Ergebnis! ich hab nicht so viel zeit, ich glaube nicht dass ich es alleine schaffen wird." Danke euch

Java:
import java.sql.Connection; 
import java.sql.DatabaseMetaData; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

public class Database { 
    public static void main(String[] a) throws Exception { 
        Connection conn = null; 
        String tab = "TESTTABELLE"; 

        try { 
             
            Class.forName("org.h2.Driver"); 
             
            conn = DriverManager.getConnection( 
                    "jdbc:h2:~/.javabeginners/h2Test", "", ""); 

            DatabaseMetaData md = conn.getMetaData(); 

            String[] types = { "TABLE", "SYSTEM TABLE" }; 
             
            ResultSet metaRS = md.getTables(null, null, "%", types); 

            while (metaRS.next()) { 

                // Catalog 
                String tableCatalog = metaRS.getString(1); 
                System.out.println("Catalog: " + tableCatalog); 

                // Schemata 
                String tableSchema = metaRS.getString(2); 
                System.out.println("Tabellen-Schema: " + tableSchema); 

                // Tabellennamen 
                String tableName = metaRS.getString(3); 
                System.out.println("Tabellen-Name: " + tableName); 

                // Tabellentyp 
                String tableType = metaRS.getString(4); 
                System.out.println("Tabellen-Typ: " + tableType + "\n"); 
            } 

            Statement stmt = conn.createStatement(); 

            String dropQ = "DROP TABLE IF EXISTS " + tab; 
            stmt.executeUpdate(dropQ); 

            String createQ = "CREATE TABLE IF NOT EXISTS " 
                    + tab 
                    + "(ID INT PRIMARY KEY AUTO_INCREMENT(1,1) NOT NULL, NAME VARCHAR(255))"; 
            stmt.executeUpdate(createQ); 

            String insertQ = "INSERT INTO " + tab 
                    + " VALUES(TRANSACTION_ID(),'Hello World!')"; 
            stmt.executeUpdate(insertQ); 

            ResultSet selectRS = stmt.executeQuery("SELECT * FROM " + tab); 
            while (selectRS.next()) { 
                System.out.printf("%s, %s\n", selectRS.getString(1), 
                        selectRS.getString(2)); 
            } 

            System.out.println("Liste Tabellen..."); 
            String tablesQ = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='PUBLIC'";
            ResultSet tablesRS = stmt.executeQuery(tablesQ); 
            while (tablesRS.next()) { 
                System.out.printf("Tabelle %s vorhanden \n", 
                        tablesRS.getString(1)); 
            } 

            conn.close(); 
        } catch (SQLException e) { 
            e.printStackTrace(); 
        } finally { 
            if (conn != null) 
                try { 
                    conn.close(); 
                } catch (SQLException e) { 
                    e.printStackTrace(); 
                } 
        } 
    } 
}
 
Ich weiß nicht ob es zu spät ist aber, ich hab dir mal den Code Kommentiert, zur Verständnis. Eigentlich steckt da alles drin was du brauchst: Verbindung aufbauen, sachen in tabellen schreiben, Inhalte aus Tabellen auslesen...

Java:
import java.sql.Connection; 
import java.sql.DatabaseMetaData; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
 
public class Database { 
    public static void main(String[] a) throws Exception { 
       
        //Die Connection
        Connection conn = null;

        //Tabellenname 
        String tab = "TESTTABELLE"; 
 
        try { 
             
            //holt sich die Klasse die die Connection aufbaut die kommt hier her: import         
               java.sql.DriverManager; 

            Class.forName("org.h2.Driver"); 
             
            //hier wird die Verbindung hergestellt 
            conn = DriverManager.getConnection( 
                    "jdbc:h2:~/.javabeginners/h2Test", "", ""); 
 
            // über die connection kann man sich die meta daten holen
            DatabaseMetaData md = conn.getMetaData(); 
             
            //beschreibt wahrscheinlich die verschiedenen Tabellen-Arten in der DB
            String[] types = { "TABLE", "SYSTEM TABLE" }; 
             
            //hier werden alle informationen über die Tabellen in dem Resultset gespeichert(Metadaten)
            ResultSet metaRS = md.getTables(null, null, "%", types); 
 
            //hier wird durch das Resultset iteriert und die einzelnen Infos ausgelesen und in den Strings gespeichert
            while (metaRS.next()) { 
 
                // Catalog 
                String tableCatalog = metaRS.getString(1); 
                System.out.println("Catalog: " + tableCatalog); 
 
                // Schemata 
                String tableSchema = metaRS.getString(2); 
                System.out.println("Tabellen-Schema: " + tableSchema); 
 
                // Tabellennamen 
                String tableName = metaRS.getString(3); 
                System.out.println("Tabellen-Name: " + tableName); 
 
                // Tabellentyp 
                String tableType = metaRS.getString(4); 
                System.out.println("Tabellen-Typ: " + tableType + "\n"); 
            } 
 
            //hier wird ein Statement erzeugt das benutzt man um Befehle an die DB zu senden
            Statement stmt = conn.createStatement(); 
 
            //Drop table heißt Tabelle löschen in tab steht der Tabellenname, das ist ein Datenbankbefehl
            String dropQ = "DROP TABLE IF EXISTS " + tab; 
            //Befehl wird ausgeführt
            stmt.executeUpdate(dropQ); 
 
            //selbe in Grün nur hier wird eine Tabelle erzeugt
            String createQ = "CREATE TABLE IF NOT EXISTS " 
                    + tab 
                    + "(ID INT PRIMARY KEY AUTO_INCREMENT(1,1) NOT NULL, NAME VARCHAR(255))"; 
            stmt.executeUpdate(createQ); 
 
            //Insert into nutzt man um werte in eine tabelle zu schreiben in values() werden die INhalte übergeben erster parameter für erste spalte usw.
            String insertQ = "INSERT INTO " + tab 
                    + " VALUES(TRANSACTION_ID(),'Hello World!')"; 
            stmt.executeUpdate(insertQ); 
 
            // select ist ein DB-Befehl der dir die Inhalte einer Tabelle oder eines Types ausgibt, der return wert wird hier wieder in einem resultset gespeichert; Man speichert in der regel immer datenbankabfragen in einem Resultset
            ResultSet selectRS = stmt.executeQuery("SELECT * FROM " + tab); 
           
           //so iteriert man über das ResultSet, die 2 heißt zweite spalte, durch .next() wird immer eine zeile weiter gesprungen 
           while (selectRS.next()) { 
                System.out.printf("%s, %s\n", selectRS.getString(1), 
                        selectRS.getString(2)); 
            } 
 
            //Tabellennamen werden ausgelesen und angezeigt selbes Prinzip wie oben
            System.out.println("Liste Tabellen..."); 
            String tablesQ = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='PUBLIC'";
            ResultSet tablesRS = stmt.executeQuery(tablesQ); 
            while (tablesRS.next()) { 
                System.out.printf("Tabelle %s vorhanden \n", 
                        tablesRS.getString(1)); 
            } 
 
            //Verbindung wird abgebaut
            conn.close(); 
        } catch (SQLException e) { 
            e.printStackTrace(); 
        } finally { 
            if (conn != null) 
                try { 
                    conn.close(); 
                } catch (SQLException e) { 
                    e.printStackTrace(); 
                } 
        } 
    } 
}
 
Danke dir, ehrlich zu sagen ich bin Anfänger mit DB.
ich verstehe nicht ganz, wo soll ich genau anfangen .. ich will nun, wenn man im Programm (5) eingibt dass die ganze Objekte oder ArrayList in der DB gespeichert werden.
kannst mir bitte vielleicht zeigen oder beispiel geben halt das nur die Name in einer tabelle gespeichert wird, es wäre ganz nett und geil dann kann ich vielleicht das verstehen und mache ich es weiter für die andre Ergebnise wie "Date" "starttime" usw.
es wäre echt mega geil .. ich könnte noch bis morgen bisschen zeit kriegen..

danke dir 🙂
 
hast du denn Grundlagenkenntnisse, weißt du dass du eine Tabelle mit gewissen Spalten anlegen musst,
dass das Speichern mit INSERT INTO funktioniert?

die Organisation ist dann doch nicht mehr so schwer, im Konstruktor bzw. sonstwie einmalig in Database das machen,
was genau ein passieren muss, Connection öffnen, Tabellen anlegen usw.,
in der Speicher-Methode den INSERT INFO-Befehl,

woran hapert es? helfen erfordert ein Problem,
'ich mache nix und denke nicht, ihr alles' ist kein geeignetes Problem..
 
hey Danke,

ich bin seit gestern am rum probieren, und jetzt seit 2 stunden probiere ich weiter, und lese ich viel darüber ..

ich hätte gerne einen kleinen beispiel, der mit meinem Programm passt, dass ich es anschauen und verstehen kann. dann mache es alleine weiter. ich beschäftige mich seit erst 3 monate mit Java.

es wäre echt mega nett, wenn du kurz zeit hast, um mir das zu zeigen, dann baue ich es selbst weiter.

den beispiel was hier ist ist allgemein und mit " public static void main", aber ich hab schon eine Main Klasse.

es wäre echt voll nett, wenn du lust hast mir das zu zeigen.

Ich Danke dir
 
[Java]
Class StoreInTable{
ArrayList<String> data = new ArrayList<String>();

public void storeData{
Class.forName("org.h2.Driver");
Connection con = null;

try{
con = DriverManager.getConnection("jdbc:h2:~/.javabeginners/h2Test", "", "");

CallableStatement call = con.prepareCall("insert into myTable values(?,?,?,?,)");

call.setString(1,date.get(1));
call.setString(2,date.get(2));
call.setString(3,date.get(3));
call.setString(4,date.get(4));
call.execute();
con.commit();

} catch(Exception e){
con.rollback();
system.error(e);
}
call.close();
con.close();

}
}[/code]

Ist jetzt aus dem Kopf mal zusammengewürfelt, die Methode speichert die ersten vier Werte des Arrays in der Tabelle. Bedenke in der Datenbank musst du zuerst eine Tabelle anlegen mit create Table myTable(spalte1 varchar2(3), spalte2 varchar2(3)...usw.) z.B. varchar2 ist sowas wie String 3 gibt an wieviele bytes da maximal drin sein dürfen. Sowas wie alle Daten einfach irgendwie in die Datenbank geht nicht du musst vorher definieren welche Tabellen es gibt in der Datenbank, mit welchen spaltennamen wieviel spalten und was für Datentypen in den Spalten stehen dürfen.

Das das alles per knopfdruck geht musst du mal nach KeyListener schauen.
 
Zuletzt bearbeitet:
in all deinen Postings wiederholst du nur dasselbe oder zählst deinen Beschäftigungsstand mit Java auf,
gut, nachdem hatte ich ja gefragt 😉

wer Lösungen schreiben will, wird das auch von alleine machen, da musst du nicht extra 'motivieren'

ansonsten gilt die Sicht für alle:
du musst deine Hausaufgaben schon selber machen oder zumindest konkrete themenbezogene Fragen stellen, Mitarbeit anzeigen,
DB ist ein Thema welches groß genug ist, ne ganze Woche Zeit zu investieren, welches genug Quellen und Beispiele überall anbietet

@jstei001
noch mehr Beispiele, die nicht alleine eingebaut werden können, ist schon gewisse Quälerei..
aber vielleicht hilft es ja doch
 
Zuletzt bearbeitet von einem Moderator:
@SlaterB

Mir haben Beispiele immer am meisten geholfen, schadet bestimmt nicht, aber wenn die Grundverständnis fehlt wirds schwierig mit dem einbauen da haste recht, aber mehr kann ich auch net tun.

@somahu
Was du da bewerkstelligen willst erfordert doch schon eine umfassende Grundkenntnis von Java und von Datenbanken, ich denke du solltest mit Datenbanken anfangen, weil ohne Vorkenntnis wirds schwer zu implementieren trotzdem hoffe ich du bekommst es hin. Ist das für die Schule oder für was musst du das machen? Denke dran mein Beispiel hab ich nicht kompiliert kann sein das da noch paar kleine Fehler drin sind.
 
Zuletzt bearbeitet:
Ich glaube ich kriege es hin, mal gucken ..
Ich hab eigentlich bisschen ahnung von Mysql.

Die Aufgabe muss für Praktikum machen, ich hoffe, dass alles am ende klappen wird.

Danke dir 🙂
 

Zurück
Oben