2012-02-04 66 views
0

我已經創建了使用Java和MySQL的一所學校的項目這個小測驗。現在我的項目運行良好,但作爲一個實驗,我試圖在我的問題中添加圖像。問題jFrame直接從一個名爲ques的數據庫中提取問題和所有選項,其中有8列最後是「path」,它是一個varchar(500)。這是我的Java代碼中添加問題: -爲varchar加入反斜線在MySQL

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

請..任何建議此鏈接?

(對不起,我是新來的節目很抱歉,如果這是一個愚蠢的問題)

+0

就想通,添加兩個反斜槓,像這樣: - 'F:\\ \\ JavaQuiz SRC \\ \\ javaquiz About.png');修復了這個問題。 但我如何將其添加到我的字符串? – 2012-02-04 09:41:41

+0

path = path.replaceAll(「\\」,「\\\\」);將用\\ – 2012-02-04 09:45:34

+0

替換全部\ IDE返回錯誤:無效的正則表達式:意外的內部錯誤。 代碼也捕獲異常。 – 2012-02-04 09:49:36

回答

3

用戶的PreparedStatement而不是聲明並設置參數。這將設置正確的字符串與所需的轉義字符。

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例外。

+0

好的,設置參數如何?我可以請一個小例子嗎? – 2012-02-04 09:44:28

+0

看看這個:http://stackoverflow.com/questions/5604943 – 2012-02-04 09:46:29

+0

與所需的代碼 – 2012-02-04 09:49:09

0

在Java語言(C,C++,C#)字符串反斜槓字符是一個特殊的「轉義」字符。您需要使用\\表示反斜槓,或者使用預處理語句更改插入以使用參數,而不是字符串。

Java Character Escape Code Reference

(或者只是改變你的路徑使用/斜線)。