Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.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
sqlite java中的转义单引号字符串_Java_Sqlite - Fatal编程技术网

sqlite java中的转义单引号字符串

sqlite java中的转义单引号字符串,java,sqlite,Java,Sqlite,我在sqlite查询中遇到问题,其中数据包含一个引号。第一个是来自println的查询,后面是错误 UPDATE Herb_SCORE_TBL SET Course = 'Orange County Nat'l',Score = '90',Rating = '69.3',Slope = '127',Differential = '17.4' WHERE DateField = '2020-02-08' org.sqlite.SQLiteException: [SQLITE_ERROR] S

我在sqlite查询中遇到问题,其中数据包含一个引号。第一个是来自println的查询,后面是错误

 UPDATE  Herb_SCORE_TBL SET Course = 'Orange County Nat'l',Score = '90',Rating = '69.3',Slope = '127',Differential = '17.4' WHERE DateField = '2020-02-08'

org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (near "l": syntax error)
我的代码只是用两个引号替换了一个引号

scoreCourse.replaceAll("'", "''");
这似乎应该足够简单。当我使用DB Browser for sqlite应用程序执行此操作时,效果良好

查询代码:

for (int row = 0; row < scoresInCurrentRecord; row++)                       // Loop thru all scores
        {
            String scoreDate = DisplayScores.
                    tableDisplayScores.getModel().getValueAt(row, 
                            HandicapMain.DATE_POS).toString();                      // Date
            yyyyMD = convertTableDate(scoreDate);                                   // JTable Date (MM/dd/yy) to row date (yyyy-MM-dd)
            scoreCourse = DisplayScores.
                    tableDisplayScores.getModel().getValueAt(row, 
                            HandicapMain.COURSE_POS).toString();                    // Course
            scoreCourse.replaceAll("'", "\\'");
            scoreScore = DisplayScores.
                    tableDisplayScores.getModel().getValueAt(row, 
                            HandicapMain.SCORE_POS).toString();                     // Score              
            scoreRating = DisplayScores.
                    tableDisplayScores.getModel().getValueAt(row, 
                            HandicapMain.RATING_POS).toString();                    // Rating  
            scoreSlope = DisplayScores.
                    tableDisplayScores.getModel().getValueAt(row, 
                            HandicapMain.SLOPE_POS).toString();                     // Slope 
            differential = DisplayScores.
                    tableDisplayScores.getModel().getValueAt(row, 
                            HandicapMain.DIFFERENTIAL_POS).toString();              // Differential
            double dblDifferential = Double.parseDouble(differential);              // To double
            dblDifferential = dblDifferential - reduceBy;                           // Reduction
            differential = String.valueOf(dblDifferential);                         // String
            String query = " UPDATE  " + HandicapMain.scoreTableName + " SET "                 
                     + "Course = '" + scoreCourse + "',"
                     + "Score = '" + scoreScore + "',"
                     + "Rating = '" + scoreRating + "',"
                     + "Slope = '"  + scoreSlope + "'," 
                     + "Differential = '" + differential + "'"
                     + " WHERE DateField = '" + yyyyMD + "'";
            System.out.println(query);
            try (PreparedStatement pst = SQLiteConnection.connection.
                    prepareStatement(query))                                        // Try pst
            {
//                pst.execute();                                      // Execute query
            } 
                catch (SQLException e)                                  // Catch SQL exception
                {
                    e.printStackTrace();
                }

        } 
for(int row=0;row
在将单引号传递给sqlite之前,可能需要对其进行转义

scoreCourse.replaceAll("'", "\\'");

这两个反斜杠是必需的,因为您实际上也需要转义第一个反斜杠,以便在字符串中显示
\'

您可能需要在将单引号传递给sqlite之前转义它

scoreCourse.replaceAll("'", "\\'");

这两个反斜杠是必需的,因为您实际上也需要转义第一个反斜杠,以便在字符串中显示
\'

在Java字符串中是不可变的,因此:

scoreCourse.replaceAll("'", "''");
返回一个字符串,但未将其分配给
scoreCourse
,以对其进行更改。
将其作为作业编写:

scoreCourse = scoreCourse.replaceAll("'", "''");

在Java中,字符串是不可变的,因此:

scoreCourse.replaceAll("'", "''");
返回一个字符串,但未将其分配给
scoreCourse
,以对其进行更改。
将其作为作业编写:

scoreCourse = scoreCourse.replaceAll("'", "''");

您使用的是
PreparedStatement
,因此请使用它这样你就不必逃避任何事情

另外,由于您正在循环,所以请使用批处理执行,不要捕获和忽略异常

String query=“UPDATE”+main.scoreTableName
+“设置航向=?”
+“,分数=?”
+“,评级=?”
+“,斜率=?”
+“,微分=?”
+“其中DateField=?”;
try(PreparedStatement pst=SQLiteConnection.connection.prepareStatement(查询))
{
for(int row=0;row