Problemas com conexão do banco

11 respostas
H

Galera conseguir fazer o seguinte código funcionar,
Hoje eu tentei rodar e deu os erros abaixo, estou usando o jre7 , jdk7 e ojdbc7.
Podem me ajudar travei na solução.

package Carga;

import java.sql.*;

public class Conexao {

	protected static Connection ObterConexao() {

        Connection conn = null;

        try {

                 Class.forName("oracle.jdbc.driver.OracleDriver");

                 conn = DriverManager.getConnection(

                                    "jdbc:oracle:thin:@127.0.0.1:1521:orcl", "System", "123654");

        } catch (ClassNotFoundException e) {

                 e.printStackTrace();
                 System.out.print(e);

        } catch (SQLException e) {

                 e.printStackTrace();
                 System.out.print(e);

        }

        return conn;

	}

}
package Carga;

import java.io.*;
import java.sql.*;


public class Teste1 extends Conexao {

	public static void main(String[] args) throws IOException, Exception  {
		
		Connection conn = ObterConexao();
		
		
				
		FileReader arq = new FileReader ("C:/Users/F8061431/Desktop/Bases/Base Abertos/teste1.txt");
		BufferedReader sr = new BufferedReader (arq);
		String[] adados = new String [42];
		String dados = null;
		
		while ((dados = sr.readLine())!= null) {
			
			adados = dados.replaceAll("'", "").split(",");
		
			PreparedStatement query = conn.prepareStatement ("INSERT INTO BASE_ABERTOS_TEMP2 VALUES ('" +adados[0]+"',"+adados[1]
				+",'"+adados[2]+"','"+adados[3]+"','"+adados[4]+"','"+adados[5]+"','"+adados[6]+"','"+adados[7]+"','"+adados[8]
				+"','"+adados[9]+"','"+adados[10]+"','"+adados[11]+"','"+adados[12]+"','"+adados[13]+"','"+adados[14]+"','"
				+adados[15]+"','"+adados[16]+"','"+adados[17]+"','"+adados[18]+"','"+adados[19]+"','"+adados[20]+"','"+adados[21]
				+"','"+adados[22]+"','"+adados[23]+"','"+adados[24]+"','"+adados[25]+"','"+adados[26]+"','"+adados[27]+"','"
				+adados[28]+"','"+adados[29]+"','"+adados[30]+"','"+adados[31]+"','"+adados[32]+"','"+adados[33]+"','"+adados[34]
				+"','"+adados[35]+"','"+adados[36]+"','"+adados[37]+"','"+adados[38]+"','"+adados[39]+"','"+adados[40]+"','"
				+adados[41]+"',TO_CHAR(CURRENT_DATE,'DD/MM/YYYY'))");
			
			query.executeUpdate();
						
			query.close();
			
		}
		
		conn.close();
		sr.close();
	}

}
Exception in thread "main" java.sql.SQLException: Missing IN or OUT parameter at index:: 1
	at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:2076)
	at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:4790)
	at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:4875)
	at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1361)
	at Carga.Teste1.main(Teste1.java:46)

11 Respostas

rodrigo.uchoa

Problema é na sua String do comando SQL.

nakrak

Tenho a impressao que ta faltando partes do seu sql

H

Sendo que não mudei nada de ontem para hoje código, estava apenas tentando tratar os campos datas. Mas não rolou pois dois campos possuem valores nulos tbm.

rodrigo.uchoa

Cade o código onde você seta os parâmetros?

H

Desculpe Rodrigo, mas não entendi. Tipo criei a classe de conexão com o banco que é o primeiro código baseado nos códigos que vi creio não está errado. Na classe onde está o main eu faço o extends para poder usar a conexão e depois o PreparedStatement que ficam dentro do while de leitura do arquivo.

Esqueci de algo? Não estou conseguindo ver o que esqueci.

rodrigo.uchoa

Esse seu código do jeito que está não tem como jamais ter funcionado, uma vez que você não tá setando os parâmetros do PreparedStatement em lugar nenhum. (ou eu estou cego?)

Olha exemplos na internet de como usar PreparedStatement e compara com o seu.

rodrigo.uchoa

Agora que eu vi que você ta colocando os valores em um Array. Muda pra Statement no lugar de PreparedStatement e ve se funciona.

H
rodrigo.uchoa:
Agora que eu vi que você ta colocando os valores em um Array. Muda pra Statement no lugar de PreparedStatement e ve se funciona.

Então Rodrigo refiz o PreparedStatement veja:
Consequência funcionou e acho que não está diferente do outro. Agradeço muito ajuda.
Mas como sou novato no java, poderia me dizer a diferença entre o Statement e o PreparedStatement?

PreparedStatement query1 = conn.prepareStatement("INSERT INTO BASE_ABERTOS_TEMP VALUES ('"+adados[0]+"','"+adados[1]
			+"','"+adados[2]+"','"+adados[3]+"','"+adados[4]+"','"+adados[5]+"','"+adados[6]+"','"+adados[7]+"','"+adados[8]+"','"
			+adados[9]+"','"+adados[10]+"','"+adados[11]+"','"+adados[12]+"','"+adados[13]+"','"+adados[14]+"','"+adados[15]+"','"
			+adados[16]+"','"+adados[17]+"','"+adados[18]+"','"+adados[19]+"','"+adados[20]+"','"+adados[21]+"','"+adados[22]+"','"
			+adados[23]+"','"+adados[24]+"','"+adados[25]+"','"+adados[26]+"','"+adados[27]+"','"+adados[28]+"','"+adados[29]+"','"
			+adados[30]+"','"+adados[31]+"','"+adados[32]+"','"+adados[33]+"','"+adados[34]+"','"+adados[35]+"','"+adados[36]+"','"
			+adados[37]+"','"+adados[38]+"','"+adados[39]+"','"+adados[40]+"','"+adados[41]+"',TO_CHAR(CURRENT_DATE,'DD/MM/YYYY'))");
			
			query1.execute();
			
			query1.close();
rodrigo.uchoa

http://docs.oracle.com/javase/tutorial/jdbc/basics/processingsqlstatements.html

Luiz_Augusto_Prado

vc tá criando um gerador de código?
http://www.codejava.net/java-se/jdbc/jdbc-tutorial-sql-insert-select-update-and-delete-examples
olha este exemplo:

String sql = "INSERT INTO Users (username, password, fullname, email) VALUES (?, ?, ?, ?)";
 
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1, "bill");
statement.setString(2, "secretpass");
statement.setString(3, "Bill Gates");
statement.setString(4, "[email removido]");
 
int rowsInserted = statement.executeUpdate();
if (rowsInserted > 0) {
    System.out.println("A new user was inserted successfully!");
}

HattoriHanzou:
Galera conseguir fazer o seguinte código funcionar,
Hoje eu tentei rodar e deu os erros abaixo, estou usando o jre7 , jdk7 e ojdbc7.
Podem me ajudar travei na solução.

package Carga;

import java.sql.*;

public class Conexao {

	protected static Connection ObterConexao() {

        Connection conn = null;

        try {

                 Class.forName("oracle.jdbc.driver.OracleDriver");

                 conn = DriverManager.getConnection(

                                    "jdbc:oracle:thin:@127.0.0.1:1521:orcl", "System", "123654");

        } catch (ClassNotFoundException e) {

                 e.printStackTrace();
                 System.out.print(e);

        } catch (SQLException e) {

                 e.printStackTrace();
                 System.out.print(e);

        }

        return conn;

	}

}
package Carga;

import java.io.*;
import java.sql.*;


public class Teste1 extends Conexao {

	public static void main(String[] args) throws IOException, Exception  {
		
		Connection conn = ObterConexao();
		
		
				
		FileReader arq = new FileReader ("C:/Users/F8061431/Desktop/Bases/Base Abertos/teste1.txt");
		BufferedReader sr = new BufferedReader (arq);
		String[] adados = new String [42];
		String dados = null;
		
		while ((dados = sr.readLine())!= null) {
			
			adados = dados.replaceAll("'", "").split(",");
		
			PreparedStatement query = conn.prepareStatement ("INSERT INTO BASE_ABERTOS_TEMP2 VALUES ('" +adados[0]+"',"+adados[1]
				+",'"+adados[2]+"','"+adados[3]+"','"+adados[4]+"','"+adados[5]+"','"+adados[6]+"','"+adados[7]+"','"+adados[8]
				+"','"+adados[9]+"','"+adados[10]+"','"+adados[11]+"','"+adados[12]+"','"+adados[13]+"','"+adados[14]+"','"
				+adados[15]+"','"+adados[16]+"','"+adados[17]+"','"+adados[18]+"','"+adados[19]+"','"+adados[20]+"','"+adados[21]
				+"','"+adados[22]+"','"+adados[23]+"','"+adados[24]+"','"+adados[25]+"','"+adados[26]+"','"+adados[27]+"','"
				+adados[28]+"','"+adados[29]+"','"+adados[30]+"','"+adados[31]+"','"+adados[32]+"','"+adados[33]+"','"+adados[34]
				+"','"+adados[35]+"','"+adados[36]+"','"+adados[37]+"','"+adados[38]+"','"+adados[39]+"','"+adados[40]+"','"
				+adados[41]+"',TO_CHAR(CURRENT_DATE,'DD/MM/YYYY'))");
			
			query.executeUpdate();
						
			query.close();
			
		}
		
		conn.close();
		sr.close();
	}

}

Exception in thread "main" java.sql.SQLException: Missing IN or OUT parameter at index:: 1 at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:2076) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:4790) at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:4875) at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1361) at Carga.Teste1.main(Teste1.java:46)

H

Luiz a diferença é que faço a leitura de arquivo. Então entendi bem onde vc quis chegar. Já tinha visto esse exemplo, mas não consegui pensar em uma forma de aplicar a minha necessidade. Olhando aqui pensei dessa forma:
Seria isso? Já que os campos do array vem desse arquivo.

String sql = "INSERT INTO Users (username, password, fullname, email) VALUES (?, ?, ?, ?)";
 
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1, adados[0]);
statement.setString(2, adados[1]);
statement.setString(3, adados[2]);
statement.setString(4, adados[3]);
 
int rowsInserted = statement.executeUpdate();
if (rowsInserted > 0) {
    System.out.println("A new user was inserted successfully!");
}

Luiz Augusto Prado:
vc tá criando um gerador de código?
http://www.codejava.net/java-se/jdbc/jdbc-tutorial-sql-insert-select-update-and-delete-examples
olha este exemplo:

String sql = "INSERT INTO Users (username, password, fullname, email) VALUES (?, ?, ?, ?)";
 
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1, "bill");
statement.setString(2, "secretpass");
statement.setString(3, "Bill Gates");
statement.setString(4, "[email removido]");
 
int rowsInserted = statement.executeUpdate();
if (rowsInserted > 0) {
    System.out.println("A new user was inserted successfully!");
}

HattoriHanzou:
Galera conseguir fazer o seguinte código funcionar,
Hoje eu tentei rodar e deu os erros abaixo, estou usando o jre7 , jdk7 e ojdbc7.
Podem me ajudar travei na solução.

package Carga;

import java.sql.*;

public class Conexao {

	protected static Connection ObterConexao() {

        Connection conn = null;

        try {

                 Class.forName("oracle.jdbc.driver.OracleDriver");

                 conn = DriverManager.getConnection(

                                    "jdbc:oracle:thin:@127.0.0.1:1521:orcl", "System", "123654");

        } catch (ClassNotFoundException e) {

                 e.printStackTrace();
                 System.out.print(e);

        } catch (SQLException e) {

                 e.printStackTrace();
                 System.out.print(e);

        }

        return conn;

	}

}
package Carga;

import java.io.*;
import java.sql.*;


public class Teste1 extends Conexao {

	public static void main(String[] args) throws IOException, Exception  {
		
		Connection conn = ObterConexao();
		
		
				
		FileReader arq = new FileReader ("C:/Users/F8061431/Desktop/Bases/Base Abertos/teste1.txt");
		BufferedReader sr = new BufferedReader (arq);
		String[] adados = new String [42];
		String dados = null;
		
		while ((dados = sr.readLine())!= null) {
			
			adados = dados.replaceAll("'", "").split(",");
		
			PreparedStatement query = conn.prepareStatement ("INSERT INTO BASE_ABERTOS_TEMP2 VALUES ('" +adados[0]+"',"+adados[1]
				+",'"+adados[2]+"','"+adados[3]+"','"+adados[4]+"','"+adados[5]+"','"+adados[6]+"','"+adados[7]+"','"+adados[8]
				+"','"+adados[9]+"','"+adados[10]+"','"+adados[11]+"','"+adados[12]+"','"+adados[13]+"','"+adados[14]+"','"
				+adados[15]+"','"+adados[16]+"','"+adados[17]+"','"+adados[18]+"','"+adados[19]+"','"+adados[20]+"','"+adados[21]
				+"','"+adados[22]+"','"+adados[23]+"','"+adados[24]+"','"+adados[25]+"','"+adados[26]+"','"+adados[27]+"','"
				+adados[28]+"','"+adados[29]+"','"+adados[30]+"','"+adados[31]+"','"+adados[32]+"','"+adados[33]+"','"+adados[34]
				+"','"+adados[35]+"','"+adados[36]+"','"+adados[37]+"','"+adados[38]+"','"+adados[39]+"','"+adados[40]+"','"
				+adados[41]+"',TO_CHAR(CURRENT_DATE,'DD/MM/YYYY'))");
			
			query.executeUpdate();
						
			query.close();
			
		}
		
		conn.close();
		sr.close();
	}

}

Exception in thread "main" java.sql.SQLException: Missing IN or OUT parameter at index:: 1 at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:2076) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:4790) at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:4875) at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1361) at Carga.Teste1.main(Teste1.java:46)

Criado 23 de setembro de 2014
Ultima resposta 23 de set. de 2014
Respostas 11
Participantes 4