Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    MYSQL JAVA query & CHARACTER SET

    Salve ragazzi,
    ho due domandine da porvi e spero mi possiate aiutare;
    lavoro su un Mac os Leopard, ho creato un db con mysql da interfacciare con un applicativo JAVA Client/Server (protocollo TCP/IP) ma mi ritrovo due “problemini”:

    1 se effettuo una query semplice come:

    SELECT * FROM nome_tab;

    va tutto bene!Il problema sorge se ho una query dove necessito l'uso dei doppi apici -->"<-- e cioè:

    SELECT user_name , passwd FROM user WHERE user_name=”paoloacqua@hot.com”

    qui ho dei gravi problemi!!!Perchè i doppi apici JAVA li prende come marcatori per limitare una stringa quindi:

    String comando=”SELECT user_name , passwd FROM user WHERE user_name=”nome_utente””

    Java riconosce una stringa da SELECT… fino a = e nome_utente nn la identifica, ma, come sappiamo Mysql ha bisogno dei doppi apici per assegnare un valore al campo della clausola WHERE;

    2 la seconda domanda invece riguarda i CHARACTER SET, facendo un po di ricerche ho capito(credo) che per applicazioni di questo genere è conveniente usare:
    per le tabelle: CHARACTER SET latin2 COLLATE latin2_general_ci;
    per il database:CHARACTER SET latin2 COLLATE latin2_general_ci;
    per la connessione:SET NAMES=’latin2’ SET CHARACTER SET=’latin2’ e fin qui tutto ok, ma se inserisco un carattere tipo: è à ì ò mi mette ?? al posto della lettera, questo deriva dal fatto che sto lavorando su di un Mac?Esiste un CHARACTER SET internazionale in modo che non mi vincoli la portabilità del software?
    Grazie. ByeT

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Per quanto riguarda il primo problema hai due soluzioni plausibili:

    1) Bisogna conoscere le regole base della programmazione in Java: quando si hanno delle stringhe che contengono dei caratteri speciali (virgolette, apici, backslash) essi vanno quotati, ovvero preceduti da un backslash

    codice:
    String str = "Questa stringa contiene \"le virgolette\", ovviamente";
    2) Usare i PreparedStatement: è senza alcun dubbio la via migliore. Esse consentono di immettere i valori "variabili" usando degli appositi metodi setter che permettono di non doversi preoccupare delle specifiche del DBMS:

    codice:
    PreparedStatement pstmt = con.prepareStatement("SELECT * FROM tabella WHERE campo=?;");
    pstmt.setString(1, "pippo");
    
    // Verrà valutata in questo modo:
    SELECT * FROM tabella WHERE campo="pippo";
    PS: mi risulta che MySQL accetti sia i doppi apici che gli apici singoli per delimitare le stringhe...

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Grazie leleFT efficiente ed esaustivo.
    Proverò tra pochissimo e ti faccio sapere.
    Byte

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.