sqlite java中的转义单引号字符串
我在sqlite查询中遇到问题,其中数据包含一个引号。第一个是来自println的查询,后面是错误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
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