Bom dia pessoal,
eu estou desenvolvendo um banco de dados em MySQL com JAVA, para armazenar grandes listagens txt, e fiz um programa que lê linha a linha de um arquivo texto e cadastra no banco. Ele lê a linha e armazena numa variável String temporaria que eu defini como linha. Só que terei que cadastrar arquivos texto com 15000 linhas, e a variavel String não conseguer armazenar essa quantidade de caracteres, portanto não conguindo cadastrar no banco de dados?
Alguem conhece outro tipo de variavel? Ou outra alternativa?
Abaixo segue o programa que eu fiz:
String fileName = (String) request.getParameter("file");
try
{
BufferedReader in = new BufferedReader(
new FileReader( fileName ) );
line = in.readLine();
linha = line;
while ( line != null ) // continua ate o final do arquivo
{
//out.println( line );
line = in.readLine();
if ( line != null )
{
[b][color=red]linha[/color][/b]= linha + line;
// out.println(linha + "\n" );
}
}
in.close();
}
catch ( IOException iox )
{
out.println("Problem reading " + fileName );
}
Gerei uma String de 20000 linhas/caracter aqui sem problemas>
Mas de qualquer forma você pode ter problemas pra passar essa String pelo drive JDBC(ao menos no drive da Oracle eu tive problemas com Strings com mais de 4 mil caracteres).
De modo geral, os bancos de dados SQL não suportam strings muito grandes; normalmente requerem algo como um “CLOB” (Character Large Object") ou “TEXT”.
Você deve ter tentado usar um campo VARCHAR, que no MySQL não aceita mais que 255 caracteres (ou um pouco mais de 65500 no MySQL 5).
Values in VARCHAR columns are variable-length strings. The length can be specified as 1 to 255 before MySQL 4.0.2, 0 to 255 as of MySQL 4.0.2, and 0 to 65,535 as of MySQL 5.0.3. (The maximum actual length of a VARCHAR in MySQL 5.0 is determined by the maximum row size and the character set you use. The maximum effective length is 65,532 bytes.)
No MySQL, um campo TEXT suporta 2^16 caracteres, um campo MEDIUMTEXT suporta 2^24 caracteres e um campo LARGETEXT, 2^32 caracteres.
O problema de você usar uma string de 20000 caracteres é que:
Amarra você ao MySQL 5.0
Amarra você ao MySQL (quase todos os outros bancos não aceitam diretamente strings tão grandes).
Use um campo TEXT, MEDIUMTEXT ou LARGETEXT (no JDBC é java.sql.Clob, se não me engano).