Srs,
Tenho uma função, que constroi uma string da seguinte maneira:
s = new String(msg, offset, length);
Ate ai td bem.
msg é um array de byte[]
offset, length sao int
a variavel s retorna na tela o resultado correto, porem quando comparo com uma string imputada ela sempre retorna false, mas os valores na tela sao identicos.
Ex.
[code]if(s==strTeste){
out.println(“Igual”);
}else{
out.println(“Diferente”);
}[/code]
Alem disso meu problema maior é quando tento realizar uma consulta ao banco com esta variavel s, ele retorna o seguinte erro.
Erro de sintaxe na seqüência de caracteres na expressão de consulta 'User_Name = 'f'
Isto parece que ele está recebendo apenas um caractere, ou preciso fazer algum tipo de conversao nesta string antes de usala no codigo, Porem como?!?!?!!?.
Caso alguem tenha uma luz, agradeço desde já…
Absss.
Não entendi o porque desse trabalho todo para usar Strings.
Para comparar duas Strings, use o equals.
String s = "Hello";
String s2 = "World";
String s3 = s + " "+s2;
System.out.println(s.equals(s2));
System.out.println(s3.equals("Hello World"));
Caro rdgse,
Estou fazendo a comparação de string apenas para ter certeza que o sistema esta tratando o mesmo valor,
tanto quanto o equals e == o resultado é o mesmo… ele retorna false… Ex. (s= rdgse(recebe da função), strTeste=rdgse(inputado)) ele retorna false, mas o que tem de diferente nesta variavel s…
Quando jogo no sql ele retorna o erro citado…
Experimente usar equals.
para declaracao de string
utlize a forma corrreta
String aux = new String();
ou string aux ="";
da forma que voce esta fazendo SE NAO ME ENGANO voce tem que dar um extends na sua classe principal
Quando você utiliza o ‘==’ você é obrigado a colocar um ‘extends’ à sua classe principal como o augustosilverio disse, mas, utilizando o ‘equals’, não é necessário fazer nenhuma referência a classe principal! Além de ser muito mais prático e fácil!
Tente utilizar ‘==’ somente quanto estiver trabalhando com números, quando for trabalhar com String utilize o ‘equals’, isso facilitará bastante!!
Já utilizei… é o mesmo erro. Inclusive criei um laço para capturar cada carctere e armazenar em outra variavel string, na tela os dois sao identicos mas pro sistema nao rola… a grande duvida é pq esse construtor de string retorna apenas o valor na tela e qnd vou utilizalo no sistema ele n funfa…
em ex o laço
[code]
for (int i = 0; i < s.length(); i++ )
{
nomeP = nomeP + s.charAt(i);
out.println(nomeP+ “
”);
}[/code]
Aqui ele add e printa caractere po caractere a variavel nomeP, mas mesmo assim da o mesmo erro de consulta. Talvez se eu criasse uma var do tipo char que recebece esse valor e converter numa nova string… :shock:
Qual banco esta consultando?
O == compara se dois objetos ocupam o mesmo local na memória.
O equals compara se dois objetos tem o mesmo valor.
Dois objetos podem ter o mesmo valor, mas não ocupar o mesmo espaço de memória. Exemplo:
[code]String a = new String(“Vinícius”);
String b = a; //Ocupa o mesmo local da memória de a
String c = new String(“Vinícius”); //Tem o mesmo valor de a, mas ocupa um local diferente da memória
//Compara locais da memória
System.out.println(a == b); //True
System.out.println(a == c); //False
//Compara valores
System.out.println(a.equals(b)); //True
System.out.println(a.equals©); //True
[/code]
Poste o seu código que faz a consulta.
Agora ele identificou como igual com o equals… :?: ! Correto
Porem o erro do sql continua!!!
segue o cod:
String query = "SELECT * FROM T_Chamada WHERE User_Name = '" + strUser + "' ORDER BY Data_Aber DESC";
con.rollback();
ResultSet rs = stm.executeQuery(query);
Onde strUser recebeu s…
e retorna o seguinte erro:
java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe na seqüência de caracteres na expressão de consulta 'User_Name = 'f'.
Sendo que ‘f’ é o 1º caractere do resultado… E quando passo um valor manualmente pra variavel funciona!!!
Tente assim:
SELECT * FROM T_Chamada WHERE [User_Name] = '" + strUser + "' ORDER BY Data_Aber DESC
Melhor ainda é usar um preparedstament e remover essa concatenação. Aí vc não tem problemas se seu usuário digitar como user_name o nome “Jeff’s”
Também é uma boa abrir o MS Access e tentar rodar a consulta por lá. O access costuma a dar mensagens de erros mais descritivas e a corrigir a sintaxe do SQL para o que ele considera o mais correto.
Nao rolou tb com as []… o mesmo erro…
javax.servlet.ServletException: java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe na seqüência de caracteres na expressão de consulta '[User_Name] = 'f'.
Este valor nao é inputado… Ele le o HEADER e passa pra consulta…
Tente rodar essa consulta diretamente no access.
No access e no jsp roda legal…
Mas dessa maneira:
strUser=(“ViniGodoy”);
String query = "SELECT * FROM T_Chamada WHERE [User_Name] = '" + strUser + "' ORDER BY Data_Aber DESC";
OK!
Agora se for assim:
out.println(s);
Aparece na tela “ViniGodoy”
strUser = (s);
String query = “SELECT * FROM T_Chamada WHERE [User_Name] = '” + strUser + “’ ORDER BY Data_Aber DESC”;
da o erro java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe na seqüência de caracteres na expressão de consulta '[User_Name] = 'V'.
Lembrando que utlizo um valor do HEADER, dependo do pacote <%@ page import=“sun.misc.BASE64Encoder” %>, Nao sei se isso esta interferindo… Mas creio q ainda está na string
Vlw pela atenção!!!
Poxa será que ninguem tem uma luz ai!!! Nao entendo tb no que tem de dirferente nessa string!!! O jeito é fazer uma applet mesmo???
É sempre recomendado executar comandos sql no banco com PreparedStatement, por motivo de segurança, legibilidade e performance.
Connection con = DriverManager.getConnection("url");
PreparedStatement st = con.prepareStatement("SELECT * FROM T_Chamada WHERE [User_Name] = ? ORDER BY Data_Aber DESC");
st.setString(1, "Vitorino");
ResultSet result = st.executeQuery();
Tenta isso.
Queria saber o tipo da coluna do banco.
O Vini disse para você colocar o colchetes no user_name porque “USER_NAME” pode ser variável de ambiente do MSSQL.
Se isso não deu certo, dê uma verificada nos dados do banco ou no tipo de dado da coluna.
Tá muito estranho, algo simples assim não era da problema, veja se é outra coisa.
No banco é um campo texto… Estou utlizando o access…
Já o colchetes nao alterou no resultado…
Enfim utilizando o PreparedStatement nao está acontecendo o erro do banco, porem nao traz nenhum resultado tb!!!
Ex. strUser = (“Vitorino”);
OK! Funciona e encontra no banco de dados.
Ex2 strUser = (s); // Sendo que s=“Vitorino” da função porem nao encontra nada…
Sendo que
If(strUser.equals(s)) // Retorna True…
Dá pra entender…
Para de usar access que o povo te ajuda mais… obs: brincadeira
Pois éh… Se fosse so o banco blz… Mas foi feito tods os front nos form do access c/ VBA…
Nossa agora vc ta perdido mesmo …kkkkkkkkkk