Добавьте обратную косую черту в Varchar в MySQL - PullRequest
0 голосов
/ 04 февраля 2012

Я создал этот небольшой тест для школьного проекта с использованием Java и MySQL.Сейчас мой проект работает нормально, но в качестве эксперимента я попытался добавить изображения в свой вопрос.Вопрос jFrame берет вопрос и все опции непосредственно из базы данных, называемой «Квест», имеющей 8 столбцов, последним из которых является «путь», то есть 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

Пожалуйста .. Любое предложение?

(извините, я новичок в программировании, так что извините, если это глупый вопрос) * +1010 *

Ответы [ 2 ]

3 голосов
/ 04 февраля 2012

Пользователь PreparedStatement вместо Statement и задает параметры. Это установит правильную строку с необходимыми escape-символами.

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 голосов
/ 04 февраля 2012

В строке java (и C, C ++, C #) символ обратной косой черты является специальным символом «escape».Вам нужно использовать \\ для представления обратной косой черты или изменить вставку, чтобы использовать параметры, используя подготовленные операторы, а не быть строкой.

См. Справочник по кодам перехода Java-символов

(Или просто измените свой путь, чтобы использовать / косые черты).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...