Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在MySQL中向Varchar添加反斜杠_Java_Mysql_Sql_Jdbc - Fatal编程技术网

Java 在MySQL中向Varchar添加反斜杠

Java 在MySQL中向Varchar添加反斜杠,java,mysql,sql,jdbc,Java,Mysql,Sql,Jdbc,我使用Java和MySQL为一个学校项目创建了这个小测验。现在我的项目运行良好,但作为一个实验,我试图在我的问题中添加图像。问题jFrame直接从名为ques的数据库中获取问题和所有选项,该数据库有8列,最后一列是“path”,即varchar(500)。下面是我添加问题的Java代码:- try { Class.forName("java.sql.Driver"); Connection con = (Connection) DriverManager.getCon

我使用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");
已发送查询 查询:插入ques值(12、'123'、'123'、'123'、'123'、'123'、'123'、'F:\javaquick\src\javaquick\About.png'); 好的,没有异常处理。 但是在SQL中,路径是这样保存的:-F:JavaQuizsrcjavaquizAbout.png

数据库会忽略反斜杠。我希望它不要这样做。这样以后我可以在我的Question.java中调用这个链接

请。。有什么建议吗

<对不起(我是新手,如果这是一个愚蠢的问题,抱歉)

< p>在java(和C++,c++)中,反斜杠字符是一个特殊的“转义”字符。您需要使用\\来表示反斜杠,或者将insert更改为使用准备好的语句而不是字符串来使用参数

(或者只是改变你的使用/斜线的路径).java中的

(和C++,c++)字符串反斜杠字符是一个特殊的“转义”字符。您需要使用\\来表示反斜杠,或者将insert更改为使用准备好的语句而不是字符串来使用参数


(或者将路径更改为使用/slashes)。

使用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。

用户准备语句而不是语句,并设置参数。这将使用所需的转义字符设置正确的字符串

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。

刚刚计算了添加两个反斜杠,如:-'F:\\javaquick\\src\\javaquick\\About.png');解决了这个问题。但是如何将其添加到字符串中呢?path=path.replaceAll(“\\”,“\\\”);将用\\IDE返回替换所有\并返回错误:无效的正则表达式:意外的内部错误。代码也会捕获异常。由于replaceAll采用正则表达式,并且在正则表达式中,必须用'\\'表示'\',因此必须按如下方式更改replaceAll-path=path.replaceAll(“\\\\”,“\\”)刚刚计算了添加两个反斜杠,如:-'F:\\javaquick\\src\\javaquick\\About.png');解决了这个问题。但是如何将其添加到字符串中呢?path=path.replaceAll(“\\”,“\\\”);将用\\IDE返回替换所有\并返回错误:无效的正则表达式:意外的内部错误。代码也会捕获异常。由于replaceAll采用正则表达式,并且在正则表达式中,必须用'\\'表示'\',因此必须按如下方式更改replaceAll-path=path.replaceAll(“\\\\”,“\\”)好的,如何设置参数?我能举个小例子吗?B-E-a-Utiful!:D谢谢。。工作!我们也经历了这个例子。。我错了!再次感谢!好的,如何设置参数?我能举个小例子吗?B-E-a-Utiful!:D谢谢。。工作!我们也经历了这个例子。。我错了!再次感谢!