2017-01-03 2 views
-2

I-Code, wo ich Apostroph oder APOSTROPHE in meiner Suche habenAPOSTROPHE Problem mit Java und SQL

I Datenbank haben, die Testtabelle mit und in Namensspalte der Wert ist "my'test"

Wenn

läuft
SELECT * from test WHERE name = 'my''test'; 

das funktioniert gut

Wenn ich das gleiche in einem Java-Programm verwenden ich keine Fehler oder kein Ergebnis bekommen

Aber wenn ich den Namen mit nur Apostroph geben dann funktioniert es

SELECT * from test WHERE name = 'my'test'; 

Könnten Sie mir bitte helfen, zu verstehen.

Java-Code ist

Connection con = null; 
    PreparedStatement prSt = null; 
    try { 
     Class.forName("oracle.jdbc.driver.OracleDriver"); 
     con = DriverManager. 
      getConnection("jdbc:oracle:thin:@localhost:1521:orcl" 
       ,"user","pwd"); 
     String query = "SELECT * from " 
       + "WHERE name = ? "; 
     prSt = con.prepareStatement(query); 

     String value = "my'mobile"; 
     char content[] = new char[value.length()]; 
     value.getChars(0, value.length(), content, 0); 
     StringBuffer result = new StringBuffer(content.length + 50); 
     for (int i = 0; i < content.length; i++) { 
      if (content[i] == '\'') 
      { 
       result.append("\'"); 
       result.append("\'"); 
      } 
      else 
      { 
      result.append(content[i]); 
      } 
     } 
     prSt.setObject(1, result.toString()); 
     int count = prSt.executeUpdate(); 
     System.out.println("===============> "+count); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } finally{ 
     try{ 
      if(prSt != null) prSt.close(); 
      if(con != null) con.close(); 
     } catch(Exception ex){} 
    } 
+7

Zeigen Sie uns Ihre Java-Code. Aber es sieht so aus, als ob du kein 'PreparedStatement' verwendest, sonst hättest du kein Problem. –

+0

@horse plz siehe Code – user2045810

+2

Du verschwendest Dinge. Verwenden Sie einfach 'prSt.setString (1," my'mobile ")' –

Antwort

0

Sie haben nichts für den Parameter eines gerechten PreparedStatement

zu entkommen verwenden:

prSt = con.prepareStatement(query); 
prSt.setString("my'mobile"); 

Zusätzlich: Wenn Sie eine SELECT verwenden Anweisung zum Abrufen von Daten, müssen Sie executeQuery() nicht executeUpdate()

verwenden
ResultSet rs = prst.executeQuery(); 
while (rs.next()) 
{ 
    // process the result here 
} 

Sie könnten durch die JDBC-Tutorial gehen wollen, bevor Sie mit Ihrem Projekt fortsetzen: http://docs.oracle.com/javase/tutorial/jdbc/index.html