Fehler beim Importierung Dateien von Excel zu MYSQL

vector_ever

Mitglied
Hallo,

seit gestern versuchte ich die Attributen von excel zu Datenbank zu importiern

ich benutze POI Bibliothek um die Attributen von Excel zu lesen

Ich habe viel über das gelesen und viel beispiele angeschaut, aber jedes mal bekomme ich Fehler meldung

code Table erzeugen:
Code:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 *
 * @author Mirage
 */
public class CreateTable {
public static void main(String args[]) {
   String url = "jdbc:mysql://localhost:3306/mkyongdb";
   Connection con;
   String createTableBooks = "CREATE TABLE  movies.filme " 
          + "(CD_ID double UNSIGNED  NOT NULL," 
            +"Albumtitel VARCHAR(45) NOT NULL," 
            +"Interpret VARCHAR(25) NOT NULL,"
            + "CREATED_DATE  double NOT NULL,"
            + "Track  double NOT NULL,"
            + "Titel VARCHAR(255) NOT NULL)";
   
    Statement stmt;
   try {
          Class.forName("com.mysql.jdbc.Driver");
   } catch(java.lang.ClassNotFoundException e){
    System.err.print("ClassNotFoundException: ");
          System.err.println(e.getMessage());
   }
    try {
          con = DriverManager.getConnection(url, "root","root");
          stmt = con.createStatement();
          stmt.executeUpdate(createTableBooks);
          stmt.close();
          con.close();
    } catch(SQLException ex) {
          System.err.println("SQLException: " + 
ex.getMessage());
    }
 }
}

von excel zu Database
Code:
package Mysql;

import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Iterator;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;

public class test {


	//static ArrayList cellArrayLisstHolder = new ArrayList();
	
	public static void main(String[] args) throws Exception{
		
		ArrayList dataHolder = readExcelFile(); 
		saveToDatabase(dataHolder);
	}

		public static ArrayList readExcelFile(){
			
		ArrayList medium = new ArrayList();
		
	try {
	     
	    FileInputStream file = new FileInputStream(new File("d:\\Filme.xls"));
	     
	    //Get the workbook instance for XLS file 
	    HSSFWorkbook workbook = new HSSFWorkbook(file);
	 
	    //Get first sheet from the workbook
	    HSSFSheet sheet = workbook.getSheetAt(0);
	     
	    //Iterate through each rows from first sheet
	    Iterator<Row> rowIterator = sheet.iterator();
	    while(rowIterator.hasNext()) {
	        Row row = rowIterator.next();
	        
	        //display from the third row until 5th
	        if(row.getRowNum() > 0)
	        {
	       
	        //For each row, iterate through each columns
	        Iterator<Cell> cellIterator = row.cellIterator();
	        
	        ArrayList small = new ArrayList();
	        
	        while(cellIterator.hasNext()) {
	            
	            //Getting the cell contents
	            Cell cell = cellIterator.next();
	            
	          small.add(cell);
	          
	          medium.add(small);
		      }
	        }
	        }
		    }catch (Exception e){e.printStackTrace(); 
		    }
		    return medium;
		    }
		 
		private static void saveToDatabase(ArrayList dataHolder) {
	    	   String url = "jdbc:mysql://localhost:3306/movies";
	    	   String username = "root";
	    	   String password = "root";
	       Connection con;
	       String query = "insert into filme values(?,?,?,?,?,?)";
	       PreparedStatement ps = null;
	       try {
	////////////////////////make connection withthe database ///////////////////////////////
	    	   Class.forName("com.mysql.jdbc.Driver");
	           con = DriverManager.getConnection(url, username, password);

	////////////////////////////////// Excute SQL statment:  ///////////////////////////////////////
	       	
	           ps = con.prepareStatement(query);

	           ArrayList cellStoreArrayList = null;
	           
	       	//For inserting into database
	       	for (int i = 0; i < dataHolder.size(); i++) {
	       		
	       	    cellStoreArrayList = (ArrayList)dataHolder.get(i);
	       	    
	       	       ps.setString(1,((HSSFCell)cellStoreArrayList.get(0)).toString());
	       	       ps.setString(2,((HSSFCell)cellStoreArrayList.get(1)).toString());
	       	       ps.setString(3,((HSSFCell)cellStoreArrayList.get(2)).toString());
	       	       ps.setString(4,((HSSFCell)cellStoreArrayList.get(3)).toString());
	       	       ps.setString(5,((HSSFCell)cellStoreArrayList.get(4)).toString());
	       	       ps.setString(6,((HSSFCell)cellStoreArrayList.get(5)).toString());
	       		
	       	      ps.executeUpdate();

	       	       }
	       	
	           ResultSet rs = ps.executeQuery(query);
	           System.out.println(" Filme :");
	           System.out.println(" ============== ");
	           
	/////////////////////////////handle the results: ///////////////////////////////////

	               while (rs.next()) {
	           		double s = rs.getDouble("CD_ID");
	           		String f = rs.getString("Albumtitel");
	           		String i = rs.getString("Interpret");
	           		double d = rs.getDouble("CREATED_DATE");
	           		double n = rs.getDouble("Track");
	           		String t = rs.getString("Titel"); 
	           		System.out.println(s + "   " + f + "             " + i + "        " + d + "      " + n + "   " + t);
	           }
	           ps.close();
	           con.close();

	           } catch(Exception ex) {
	                   System.err.print("Exception: ");
	                   System.err.println(ex.getMessage());
	           }
	}
}

Fehler Meldung beim Ausführung :
HTML:
Exception: Index: 5, Size: 5
und ich habe bemerkt dass die attributen sind mehr als 5 mal in mein Datenbank gespeichert, nicht nur einmal


excel Datei
HTML:
CD_ID	Albumtitel	  Interpret   created Track   Titel
--------------------------------------------------------------------------
4711	Not That Kind	Anastacia	1999	1	Not That Kind
4710	Not That Kind	Anastacia	1999	2	I’m Outta Love
4712	Not That Kind	Anastacia	1999	3	Cowboys & Kisses
4722	Wish You Her    Pink Floyd	1964	1	Shine On You Crazy Diamond
4713	Freak of Nature	Anastacia	1999	1	Paid my Dues
ps: die erste lReihewird nicht Database gespeichert, deswegen kann man ignorieren it

Kennt jemand der fehler finden?
 
Stacktrace? Der cause alleine reicht nicht.

Code:
while (rs.next()) {
                    double s = rs.getDouble("CD_ID");
                    String f = rs.getString("Albumtitel");
                    String i = rs.getString("Interpret");
                    double d = rs.getDouble("CREATED_DATE");
                    double n = rs.getDouble("Track");
                    String t = rs.getString("Titel"); 
                    System.out.println(s + "   " + f + "             " + i + "        " + d + "      " + n + "   " + t);
               }

Das muss so:

Code:
while (rs.hasNext()) {
                    Anything a = (Anything)rs.next()
                    double s = a.getDouble("CD_ID");
                    String f = a.getString("Albumtitel");
                    String i = a.getString("Interpret");
                    double d = a.getDouble("CREATED_DATE");
                    double n = a.getDouble("Track");
                    String t = a.getString("Titel"); 
                    System.out.println(s + "   " + f + "             " + i + "        " + d + "      " + n + "   " + t);
               }

Schon versucht zu debuggen?
 
Es funktioniert schon so mit der while Schleife :D
Aber was fragst du den überhaupt ab. Normalerweise sollte da
SQL:
SELECT * from filme
stehen. Und bei dir steht ein insert, da du beide male die gleiche query verwendest.
String query = "insert into filme values(?,?,?,?,?,?)";
So sollte es funktionieren
Java:
 ResultSet rs = ps.executeQuery("SELECT * from filme ");
               System.out.println(" Filme :");
               System.out.println(" ============== ");
               
    /////////////////////////////handle the results: ///////////////////////////////////
 
while (rs.next()) {
                    double s = a.getDouble("CD_ID");
                    String f = a.getString("Albumtitel");
                    String i = a.getString("Interpret");
                    double d = a.getDouble("CREATED_DATE");
                    double n = a.getDouble("Track");
                    String t = a.getString("Titel"); 
                    System.out.println(s + "   " + f + "             " + i + "        " + d + "      " + n + "   " + t);
               }

Lg hendl
 
Zuletzt bearbeitet:
nee, das nicht Grund des Problem
Code:
ResultSet rs = ps.executeQuery("SELECT * from filme");
while (rs.hasNext())
nur um die datein zu zeigen

das Problem glaube in diesem Abschnitt
Code:
Connection con;
           String query = "insert into filme values(?,?,?,?,?,?)";
           PreparedStatement ps = null;
           try {
    ////////////////////////make connection withthe database ///////////////////////////////
               Class.forName("com.mysql.jdbc.Driver");
               con = DriverManager.getConnection(url, username, password);
 
    ////////////////////////////////// Excute SQL statment:  ///////////////////////////////////////
            
               ps = con.prepareStatement(query);
 
               ArrayList cellStoreArrayList = null;
               
            //For inserting into database
            for (int i = 0; i < dataHolder.size(); i++) {
                
                cellStoreArrayList = (ArrayList)dataHolder.get(i);
                
                   ps.setString(1,((HSSFCell)cellStoreArrayList.get(0)).toString());
                   ps.setString(2,((HSSFCell)cellStoreArrayList.get(1)).toString());
                   ps.setString(3,((HSSFCell)cellStoreArrayList.get(2)).toString());
                   ps.setString(4,((HSSFCell)cellStoreArrayList.get(3)).toString());
                   ps.setString(5,((HSSFCell)cellStoreArrayList.get(4)).toString());
                   ps.setString(6,((HSSFCell)cellStoreArrayList.get(5)).toString());
                
                  ps.executeUpdate();
 
                   }

das Problem nur beim speichern die Attributen in Datenbank, kannst du das code ausführen und ausprobieren

Auch mit debuggen habe keine Erfahrung
 
Zuletzt bearbeitet:
Auch mit debuggen habe keine Erfahrung

Sorry, aber als Entwickler muss man debuggen können. Das ist Voraussetzung um funktionierende Software zu schreiben.

http://www.vogella.com/articles/EclipseDebugging/

Edit: Ich gehe davon aus, dass du keine Tests hast: Auch das ist Voraussetzung und ich werde dir erst helfen, wenn ich einen Test von dir habe.

http://www.vogella.com/articles/JUnit/article.html

Edit 2: Ich weiß, dass das nicht das Problem war. Ich brauche trotzdem den kompletten Stacktrace.
 
Zuletzt bearbeitet:
Also habe ich es so bearbeitet

Code:
		private static void saveToDatabase(ArrayList dataHolder) {
	    	   String url = "jdbc:mysql://localhost:3306/movies";
	    	   String username = "root";
	    	   String password = "root";
	       Connection con = null;
	       String query = "insert into filme values(?,?,?,?,?,?)";
	       PreparedStatement ps = null;
	       try {
	////////////////////////make connection withthe database ///////////////////////////////
	    	   Class.forName("com.mysql.jdbc.Driver");
	           con = DriverManager.getConnection(url, username, password);

	////////////////////////////////// Excute SQL statment:  ///////////////////////////////////////
	       	
	           ps = con.prepareStatement(query);

	           ArrayList cellStoreArrayList = null;
	           
	       	//For inserting into database
	       	for (int i = 0; i < dataHolder.size(); i++) {
	       		
	       	    cellStoreArrayList = (ArrayList)dataHolder.get(i);
	       	    
	       	       ps.setString(1,((HSSFCell)cellStoreArrayList.get(0)).toString());
	       	       ps.setString(2,((HSSFCell)cellStoreArrayList.get(1)).toString());
	       	       ps.setString(3,((HSSFCell)cellStoreArrayList.get(2)).toString());
	       	       ps.setString(4,((HSSFCell)cellStoreArrayList.get(3)).toString());
	       	       ps.setString(5,((HSSFCell)cellStoreArrayList.get(4)).toString());
	       	       ps.setString(6,((HSSFCell)cellStoreArrayList.get(5)).toString());
	       		
	       	      ps.executeUpdate();

	       	       }
	       } catch(Exception e) {
	    	   e.printStackTrace();
	       }
	       finally{
	    	   try{

	/////////////////////////////handle the results: ///////////////////////////////////
	          
	       	   ResultSet rs = ps.executeQuery("SELECT * from filme");
	           System.out.println(" Filme :");
	           System.out.println(" ============== ");
	           
	               while (rs.next()) {
	           		double s = rs.getDouble("CD_ID");
	           		String f = rs.getString("Albumtitel");
	           		String i = rs.getString("Interpret");
	           		double d = rs.getDouble("CREATED_DATE");
	           		double n = rs.getDouble("Track");
	           		String t = rs.getString("Titel"); 
	           		System.out.println(s + "   " + f + "             " + i + "        " + d + "      " + n + "   " + t);
	           }
	           ps.close();
	           con.close();

	           } catch(Exception ex) {
	                   System.err.print("Exception: ");
	                   System.err.println(ex.getMessage());
	           }
	}
}

Fehlermeldung:
HTML:
java.lang.IndexOutOfBoundsException: Index: 5, Size: 5
	at java.util.ArrayList.rangeCheck(Unknown Source)
	at java.util.ArrayList.get(Unknown Source)
	at Mysql.test.saveToDatabase(test.java:103) ---> here indicate to: ps.setString(6,((HSSFCell)cellStoreArrayList.get(5)).toString());
	at Mysql.test.main(test.java:26) ---> here indicate to: saveToDatabase(dataHolder); method
Filme :
 ============== 
4711.0   Not That Kind             Anastacia        1999.0      1.0   Not That Kind
4711.0   Not That Kind             Anastacia        1999.0      1.0   Not That Kind
4711.0   Not That Kind             Anastacia        1999.0      1.0   Not That Kind
4711.0   Not That Kind             Anastacia        1999.0      1.0   Not That Kind
4711.0   Not That Kind             Anastacia        1999.0      1.0   Not That Kind
4711.0   Not That Kind             Anastacia        1999.0      1.0   Not That Kind
4710.0   Not That Kind             Anastacia        1999.0      2.0   I’m Outta Love
4710.0   Not That Kind             Anastacia        1999.0      2.0   I’m Outta Love
4710.0   Not That Kind             Anastacia        1999.0      2.0   I’m Outta Love
4710.0   Not That Kind             Anastacia        1999.0      2.0   I’m Outta Love
4710.0   Not That Kind             Anastacia        1999.0      2.0   I’m Outta Love
4710.0   Not That Kind             Anastacia        1999.0      2.0   I’m Outta Love
4712.0   Not That Kind             Anastacia        1999.0      3.0   Cowboys & Kisses
4712.0   Not That Kind             Anastacia        1999.0      3.0   Cowboys & Kisses
4712.0   Not That Kind             Anastacia        1999.0      3.0   Cowboys & Kisses
4712.0   Not That Kind             Anastacia        1999.0      3.0   Cowboys & Kisses
4712.0   Not That Kind             Anastacia        1999.0      3.0   Cowboys & Kisses
4712.0   Not That Kind             Anastacia        1999.0      3.0   Cowboys & Kisses
4722.0   Wish You Were Her             Pink Floyd        1964.0      1.0   Shine On You Crazy Diamond
4722.0   Wish You Were Her             Pink Floyd        1964.0      1.0   Shine On You Crazy Diamond
4722.0   Wish You Were Her             Pink Floyd        1964.0      1.0   Shine On You Crazy Diamond
4722.0   Wish You Were Her             Pink Floyd        1964.0      1.0   Shine On You Crazy Diamond
4722.0   Wish You Were Her             Pink Floyd        1964.0      1.0   Shine On You Crazy Diamond
4722.0   Wish You Were Her             Pink Floyd        1964.0      1.0   Shine On You Crazy Diamond
4713.0   Freak of Nature             Anastacia        1999.0      1.0   Paid my Dues
4713.0   Freak of Nature             Anastacia        1999.0      1.0   Paid my Dues
4713.0   Freak of Nature             Anastacia        1999.0      1.0   Paid my Dues
4713.0   Freak of Nature             Anastacia        1999.0      1.0   Paid my Dues
4713.0   Freak of Nature             Anastacia        1999.0      1.0   Paid my Dues
4713.0   Freak of Nature             Anastacia        1999.0      1.0   Paid my Dues

Die Attributen werden speichert und zeigt mehr als 5 mal und nicht klappt mehr wegen der große der array

Ideen?
 
Hi
Die Lieder werden so oft eingetragen da du die Schleife beim Einlesen fehlerhaft geschlossen hast.
So müsste es richtig sein
Java:
while(cellIterator.hasNext()) {
                
                //Getting the cell contents
                Cell cell = cellIterator.next();
                
              small.add(cell);
              }
medium.add(small);
 
vielen Dank, ja war Dumm von mir so zu machen, echt danke

Jetzt speichert und zeigt alles richtig, aber noch bekomme ich Fehlermeldung:

Code:
java.lang.IndexOutOfBoundsException: Index: 5, Size: 5
 Filme :
 ============== 
	at java.util.ArrayList.rangeCheck(Unknown Source)
	at java.util.ArrayList.get(Unknown Source)
	at Mysql.test.saveToDatabase(test.java:103) --->	
verweisen zu: ps.setString(6,((HSSFCell)cellStoreArrayList.get(5)).toString());
	at Mysql.test.main(test.java:26) --->	
verweisen zu: saveToDatabase(dataHolder); method
4711.0   Not That Kind             Anastacia        1999.0      1.0   Not That Kind
4710.0   Not That Kind             Anastacia        1999.0      2.0   I’m Outta Love
4712.0   Not That Kind             Anastacia        1999.0      3.0   Cowboys & Kisses
4722.0   Wish You Were Her             Pink Floyd        1964.0      1.0   Shine On You Crazy Diamond
4713.0   Freak of Nature             Anastacia        1999.0      1.0   Paid my Dues
 

Neue Beiträge

Zurück