在MySQL中向Varchar添加反斜杠

时间:2012-02-04 09:35:25

标签: java mysql sql jdbc

我使用Java和MySQL为学校项目创建了这个小测验。现在我的项目运行正常,但作为一个实验,我试图在我的问题中添加图像。问题jFrame直接从名为ques的数据库中获取问题和所有选项,其中8列最后是“path”,它是varchar(500)。这是我添加问题的Java代码: -

try {
       Class.forName("java.sql.Driver");
       Connection con = (Connection) DriverManager.getConnection(jdbcurl, user, pass);
       Statement  st  = con.createStatement();
       ResultSet  rt  = st.executeQuery("SELECT qno from ques order by qno desc limit 1");    
       // get last qno primary key
       for (; rt.next(); ) {
           qno = (Integer) rt.getObject(1);                                                   // save qno as int
       }
       nqno = qno + 1; // create new qno
       if (path == null){
           String query1 = "insert into ques values (" + nqno + ",'" + question + "','" + ans1 + "','" + ans2 + "','"
                           + ans3 + "','" + ans4 + "','" + ca + "',null);"; // ca is correct answer and null is path
       Statement  st1  = con.createStatement();
       st1.executeUpdate(query1);
       System.out.println("query : "+query1);
       JOptionPane.showMessageDialog(this, "Question added successfully! Without Image");}
       else {
           String query1 = "insert into ques values (" + nqno + ",'" + question + "','" + ans1 + "','" + ans2 + "','"
                       + ans3 + "','" + ans4 + "','" + ca + "','"+path+"');";
           System.out.println("query :" +query1);
           Statement  st1  = con.createStatement();
           st1.executeUpdate(query1);
           JOptionPane.showMessageDialog(this, "Question added successfully! with image");
       }
  } catch (Exception e) {
     JOptionPane.showMessageDialog(this, "Error in code");

发送的查询是 查询:插入问题值(12,'123','123','123','123','123','123','F:\ JavaQuiz \ src \ javaquiz \ About.png'); 一切都好,没有异常处理。 但是在SQL中路径被保存为: - F:JavaQuizsrcjavaquizAbout.png

数据库省略了反斜杠。我希望它不要这样做。所以稍后我可以在Question.java中调用此链接

请......有什么建议吗?

(对不起,我是编程的新手,如果这是一个愚蠢的问题,那就很抱歉)

2 个答案:

答案 0 :(得分:3)

用户PreparedStatement而不是Statement并设置参数。这将使用所需的转义字符设置正确的字符串。

String query1 = "insert into ques values (?,?,?,?,?,?,?,?)";
PreparedStatement ps=connection.prepareStatement(query1);
ps.setInt(1,nqno);
ps.setString(2,question);
ps.setString(3,ans1);
ps.setString(4,ans2);
ps.setString(5,ans3);
ps.setString(6,ans4);
ps.setString(7,ca);
ps.setString(8,path);
ps.executeUpdate();

并执行try..catch异常。

答案 1 :(得分:0)

在java(和C,C ++,C#)字符串中,反斜杠字符是一个特殊的“转义”字符。您需要使用\\来表示反斜杠,或者使用预处理语句更改插入以使用参数,而不是字符串。

请参阅Java Character Escape Code Reference

(或者只是改变使用/斜杠的路径)。