Groovy String добавление кавычки в начало строки вместо конца

1
public ArrayList<String> findLocationOfXMLDocumentsWithSkills(ArrayList<String> skillsToFind){

    TreeMap<Integer, ArrayList<String>> fileLocationToNumberOfHits = new TreeMap<Integer, ArrayList<String>>(); 

    def sql = Sql.newInstance(/jdbc:sqlite:C:\Users\pdfFileSystem.db/, "org.sqlite.JDBC")
    sql.execute('CREATE TABLE IF NOT EXISTS skillList(SKILL TEXT NOT NULL, xmlFile0 TEXT, xmlFile1 TEXT, xmlFile2 TEXT)')

    fileLocationToNumberOfHits.put(1, new ArrayList<String>());

    for(String skill: skillsToFind){

        skill = skill.toUpperCase();
        def query = 'SELECT * FROM skillList WHERE SKILL="' + skill + '"'
        println query
        sql.eachRow(query) { row ->

            ...
        }
        ...
    }
    ...
}

Итак, это код, который я пытаюсь запустить с помощью Grails.

Для всех, кроме последней итерации цикла for, запрос println будет печатать "ELECT * FROM skillList WHERE SKILL ="{skill} где {skill} заменяется любым навыком.

Почему он заменяет первый символ строки " вместо того, чтобы добавлять ее в конец строки?

У меня есть тот же самый фрагмент кода, который выполняется в других функциях этого же класса, и он работает точно так, как должен.

Кто-нибудь знает что происходит?

  • 0
    Каково содержание «skillToFind»?
  • 2
    Почему бы не использовать sql.eachRow("SELECT * FROM skillList WHERE SKILL=$skill") { так что вы не открываете себя для инъекций sql?
Показать ещё 3 комментария
Теги:
string
groovy
grails

2 ответа

0
Лучший ответ

Это как-то связано с функцией split, которую я использовал для создания навыковToFind.

Я использовал.split('\n') для строки, сгенерированной из textArea на моем сайте. Результирующие строки имели дополнительный характер в конце строки (за исключением последнего, поскольку он не был разделен на).

Я просто удалил этого персонажа из строки, и теперь все работает.

Спасибо всем за вашу помощь!

0

Заменить:

def query = 'SELECT * FROM skillList WHERE SKILL="' + skill + '"'

для:

def query = "SELECT * FROM skillList WHERE SKILL='$skill'"

Подробнее о Строках и GStrings в groovy: http://groovy.codehaus.org/Strings+and+GString

Ещё вопросы

Сообщество Overcoder
Наверх
Меню