2014-10-25 4 views
-1

я читаю 3 pakets как почта по почте предмет и почтовое сообщение BU, но когда я вставить данные в базу данных я получил эту ошибку здесь является somne ​​часть коданезакрытые кавычки после символьной строки Java

aSocket.receive(to); 
String towards=new String(to.getData()); 
System.out.println(towards); 
aSocket.receive(sub); 
String subject=new String(sub.getData()); 
aSocket.receive(msg); 
String message=new String(msg.getData()); 
sendedmail(towards,subject,message,username); 

public void sendedmail(String to,String sub,String msg,String from){ 
    try{ 
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    }catch(ClassNotFoundException ex){ 
     JOptionPane.showMessageDialog(null,ex.getMessage()); 
    } 
    try{ 
     Connection con=DriverManager.getConnection("jdbc:odbc:udp"); 
     Statement st=con.createStatement(); 
     int status=0; 
     String query; 
     query = "INSERT INTO emails(emailto, emailfrom, message, userstatus, subject) VALUES('"+to+"','"+from+"','"+msg+"','"+status+"','"+sub+"')"; 
     int f=st.executeUpdate(query); 
     if(f==1){ 
      System.out.println("row inserted"); 
     } 
     else 
     { 
      System.out.println("row not inserted"); 
     } 
    }catch(SQLException ex){ 
     JOptionPane.showMessageDialog(null,ex.getMessage()); 
    } 
+6

Вместо createStatement, а вы не используете подготовленное утверждение? Таким образом, можно исключить проблему с одной кавычкой. – user75ponic

+1

http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html - http://en.wikipedia.org/wiki/SQL_injection –

+1

И вы не должны использовать мост JDBC/ODBC. Он всегда был глючным и медленным и больше не поддерживается в Java8. Вместо этого используйте настоящий JDBC-драйвер. –

ответ

2

в SQL кавычки экранируются, удвоив их, например:

insert ... values ('O''Brien'); 

Так что вам нужно, чтобы заменить все кавычки с удвоенными кавычки:

str = str.replace("'", "''"); 

О, и это было около 15 лет с тех пор, как вам нужно было загрузить класс драйвера JDBC перед его использованием; просто удалите весь первый try-catch.

Смежные вопросы