Jump to content

ArrayList Excel - SQL


Recommended Posts

Posted (edited)

Boa Tarde

É o seguinte, estou a tentar introduzir dados de um ficheiro xls para uma base dados sql server

Mas surge sempre o erro:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 8428, Size: 8428

at java.util.ArrayList.rangeCheck(Unknown Source)

at java.util.ArrayList.get(Unknown Source)

Sei que para a coluna em concreto embora tenha 10.000 linhas só 8428 estão preenchidas. Mas não sei como "fugir" a este problema já tentei com if(list11 == null), isEmpty, mas o erro ocorre sempre... na list11....fica o código:

package a;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import java.io.*;import jxl.*;
import jxl.read.biff.BiffException;

public class l2 {
public static void lerficheiroh() throws SQLException, ClassNotFoundException, ParseException, InstantiationException, IllegalAccessException, BiffException, IOException{

ArrayList<String> list1=new ArrayList<String>();
ArrayList<String> list2=new ArrayList<String>();
ArrayList<String> list3=new ArrayList<String>();
ArrayList<String> list4=new ArrayList<String>();
ArrayList<String> list5=new ArrayList<String>();
ArrayList<String> list6=new ArrayList<String>();
ArrayList<String> list7=new ArrayList<String>();
ArrayList<String> list8=new ArrayList<String>();
ArrayList<String> list9=new ArrayList<String>();
ArrayList<String> list10=new ArrayList<String>();
ArrayList<String> list11=new ArrayList<String>();
ArrayList<String> list12=new ArrayList<String>();
ArrayList<String> list13=new ArrayList<String>();
ArrayList<String> list14=new ArrayList<String>();
ArrayList<String> list15=new ArrayList<String>();
ArrayList<String> list16=new ArrayList<String>();
ArrayList<String> list17=new ArrayList<String>();
ArrayList<String> list18=new ArrayList<String>();
ArrayList<String> list19=new ArrayList<String>();
ArrayList<String> list20=new ArrayList<String>();
ArrayList<String> list21=new ArrayList<String>();
ArrayList<String> list22=new ArrayList<String>();
ArrayList<String> list23=new ArrayList<String>();
// ArrayList<String> list24=new ArrayList<String>();
 Cell rowData[] = null;
 int rowCount = 0;
 int columnCount = 0;
 WorkbookSettings ws = new WorkbookSettings();
 Workbook workbook = Workbook.getWorkbook(new File("C:\\1\\M3.xls"), ws);



	 Sheet s = workbook.getSheet(0);

	 rowCount = s.getRows();
	 System.out.println(rowCount);
	 columnCount = s.getColumns();
	 System.out.println(columnCount);
	 for(int i = 1; i < rowCount; i++){
		 rowData = s.getRow(i);
	 // if(rowData[0].getContents().length() != 0){
			 for(int j = 0; j < columnCount ;j++){
			 switch(j){
			 case 0:
					 System.out.println("A: "+rowData[j].getContents());
					 list1.add(rowData[j].getContents());
					 break;
			 case 1:
					 System.out.println("B: "+rowData[j].getContents());
					 list2.add(rowData[j].getContents());
					 break;
			 case 2:
					 System.out.println("C: "+rowData[j].getContents());
					 list3.add(rowData[j].getContents());
					 break;
			 case 3:
					 System.out.println("D: "+rowData[j].getContents());
					 list4.add(rowData[j].getContents());
					 break;
			 case 4:
					 System.out.println("E: "+rowData[j].getContents());
					 list5.add(rowData[j].getContents());
					 break;
			 case 5:
					 System.out.println("F: "+rowData[j].getContents());
					 list6.add(rowData[j].getContents());
					 break;
				 case 6:
					 System.out.println("G: "+rowData[j].getContents());
					 list7.add(rowData[j].getContents());
					 break;
				 case 7:
					 System.out.println("H: "+rowData[j].getContents());
					 list8.add(rowData[j].getContents());
					 break;
				 case 8:
					 System.out.println("I: "+rowData[j].getContents());
					 list9.add(rowData[j].getContents());
					 break;
				 case 9:
					 System.out.println("DataN: "+rowData[j].getContents());
					 String pattern = "dd-MM-yyyy HH:mm:ss";				 if(rowData[j] instanceof DateCell) {
					 DateCell dc = (DateCell) rowData[j];
					 Date d = dc.getDate();
					 SimpleDateFormat sdf = new SimpleDateFormat();
					 sdf.applyPattern(pattern);
					 sdf.format(d);
					 System.out.println("date cell222"+ sdf.format(d));
					 list10.add(sdf.format(d));
					 }

					 break;
				 case 10:
					 System.out.println("DataR: "+rowData[j].getContents());
					 String pattern1 = "dd-MM-yyyy HH:mm:ss";
			 if(rowData[j] instanceof DateCell) {
					 DateCell dc = (DateCell) rowData[j];
					 Date d = dc.getDate();
					 SimpleDateFormat sdf = new SimpleDateFormat();
					 sdf.applyPattern(pattern1);
					 sdf.format(d);
					 System.out.println("date cell222"+ sdf.format(d));
					 list11.add(sdf.format(d));
					 }
					 break;

			 }}

	 }
 workbook.close();
 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
 Connection conn = DriverManager.getConnection("jdbc:sqlserver://192.9.204.20:1433;databaseName=M;user=sa;password=password1234");
 Statement st=conn.createStatement();
 String fimd1 = null;
 String fimd2 = null;
 String fimd3 = null;
 String fimd4 = null;
 String fimd5 = null;
 String fimd6 = null;
	 for(int i=0;i<list1.size();i++){


/*lista4*/ String ut=list4.get(i).toString();
	 if (ut.contains("'")){
	 ut = ut.replace("'", "");
	 }else{
	 System.out.println(ut);
	 }

/*lista8*/	 String acc=list8.get(i).toString();
if (list11 == null){
System.out.println("0");
}else{
/*lista11*/ String datar=list11.get(i).toString(); System.out.println("11:"+datar);
if (!(datar.equals(""))){
fimd2 = datar;



System.out.println(datar);
}else{
fimd2="";
System.out.println("data resultados nulo");
}

}



String sqlre = "UPDATE A SET DataR='"+fimd2+"' where Acordo ='"+acc+"' and utilizador='"+ut+"'";
st.executeUpdate(sqlre);



	 }
}


public static void main(String[] args) throws ClassNotFoundException, SQLException, ParseException, InstantiationException, IllegalAccessException, BiffException, IOException {

System.out.println("h");
lerficheiroh();}}
Edited by Baderous
geshi
Posted

eliminei do código tudo o que não era necessario para a questão em causa:

public static void lerficheiroh() throws SQLException, ClassNotFoundException, ParseException, InstantiationException, IllegalAccessException, BiffException, IOException{

ArrayList<String> list1=new ArrayList<String>();

ArrayList<String> list4=new ArrayList<String>();
ArrayList<String> list8=new ArrayList<String>();

ArrayList<String> list11=new ArrayList<String>();

 Cell rowData[] = null;
 int rowCount = 0;
 int columnCount = 0;
    WorkbookSettings ws = new WorkbookSettings();
    Workbook workbook = Workbook.getWorkbook(new File("C:\\1\\M3.xls"), ws);
    Sheet s = workbook.getSheet(0);

	 rowCount = s.getRows();
	 System.out.println(rowCount);
	 columnCount = s.getColumns();
	 System.out.println(columnCount);
	 for(int i = 1; i < rowCount; i++){
		 rowData = s.getRow(i);

			 for(int j = 0; j < columnCount ;j++){
			  switch(j){
			    case 0:
					 System.out.println("A: "+rowData[j].getContents());
					 list1.add(rowData[j].getContents());
					 break;
			    case 3:
					 System.out.println("D: "+rowData[j].getContents());
					 list4.add(rowData[j].getContents());
					 break;
				 case 7:
					 System.out.println("H: "+rowData[j].getContents());
					 list8.add(rowData[j].getContents());
					 break;
				   case 10:
					 System.out.println("DataR: "+rowData[j].getContents());
					 String pattern1 = "dd-MM-yyyy HH:mm:ss";
			   if(rowData[j] instanceof DateCell) {
					  DateCell dc = (DateCell) rowData[j];
					  Date d = dc.getDate();
					  SimpleDateFormat sdf = new SimpleDateFormat();
					  sdf.applyPattern(pattern1);
					  sdf.format(d);
					  System.out.println("date cell222"+ sdf.format(d));
					  list11.add(sdf.format(d));
					 }
					 break;

			  }}

	 }
 workbook.close();
 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
 Connection conn = DriverManager.getConnection("jdbc:sqlserver://192.9.204.20:1433;databaseName=M;user=sa;password=password1234");
 Statement st=conn.createStatement();

 String fimd2 = null;

	 for(int i=0;i<list1.size();i++){


/*lista4*/  String ut=list4.get(i).toString();

/*lista8*/	 String acc=list8.get(i).toString();
/*lista11*/  String datar=list11.get(i).toString(); System.out.println("11:"+datar);

  String sqlre = "UPDATE A SET DataR='"+fimd2+"' where Acordo ='"+acc+"' and utilizador='"+ut+"'";
  st.executeUpdate(sqlre);



	 }

}
public static void main(String[] args) throws ClassNotFoundException, SQLException, ParseException, InstantiationException, IllegalAccessException, BiffException, IOException {

 System.out.println("h");
  lerficheiroh();
}}

a linha de erro é a seguinte:

String datar=list11.get(i).toString();

Posted

o que garante que todas as listas possuem o mesmo tamanho ?


for(int i=0;i<list1.size();i++){
String ut = list4.size() >= i ? list4.get(i).toString() : "";
String acc = list8.size() >= i ? list8.get(i).toString() : "";
String datar = list11.size() >= i ? list11.get(i).toString() : "";
[/Code]
IRC : sim, é algo que ainda existe >> #p@p
Posted

O ficheiro excel tem o mesmo numero de linhas em todas as colunas por isso todas as listas tem o mesmo tamanho a diferença é que há colunas que tem todas as linhas preenchidas e outras não, que é o casa da datar. Esta coluna tem quase linha sim linha não preenchida, mas quando eu faço inserir a lista11 na base dados ele junta a informação nas primeiras 8428linhas e não preenche mais nada, nem liga se o acc é aquele ou não...

Posted (edited)

O ficheiro excel tem o mesmo numero de linhas em todas as colunas por isso todas as listas tem o mesmo tamanho

errado, lá porque tens no excel a apresentar as células, não quer dizer que no ficheiro tens informação dessas linhas.

por outras palavras : não existe a coluna X na linha Y se nessa linha não existir dados nessa coluna e seguintes

edit : correção

Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Posted

Já consegui resolver apenas retirei do código a seguinte parte

if(rowData[j] instanceof DateCell) {
											  DateCell dc = (DateCell) rowData[j];
											  Date d = dc.getDate();
											  SimpleDateFormat sdf = new SimpleDateFormat();
											  sdf.applyPattern(pattern1);
											  sdf.format(d);
											  System.out.println("date cell222"+ sdf.format(d));
											  list11.add(sdf.format(d));
											 }
											 break;

passei o campo sql a nvarchar em vez de datetime... como é só para visualização não tem muita importancia e assim ele preenche os nulos.

Desde já agreço pela atenção HappyHippyHippo

Posted

Afinal resolvi um problema arranjei outro 😕

É que ao tirar o bocado de codigo que referi, a data sai : "10/05/2013" "08:48: " em vez de 10/05/2013 20:48, com o codigo que tirei resolvo este problema mas surge o problema inicial 😞

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.