Ошибка выполнения оператора SQL говорит неправильный sunataxt рядом с '_HP_KYCMS18837P51144' - PullRequest
0 голосов
/ 10 января 2019

Будем благодарны за любые предложения по устранению проблемы ниже.

Я пытаюсь запустить SQL-оператор, используя Java, где у меня все время динамическое имя файла. Например, на этот раз мое полное имя файла "WTX-5010_HP_KYCMS18837P51144.txt"

Это мой оператор sql: `SELECT processid, * FROM [Config]. [AD]. [FILELOG] где filename = 'WTX-5010_HP_KYCMS18837P51144.txt'

Вот мой сценарий:

    static String NewFileNmae = WTX-5010_HP_KYCMS18837P51144.txt;

                System.out.println("Full New File Name is " + NewFileNmae);


                try {

String strpQuery2 = "SELECT processid, *  FROM [Config].[AD].[FILELOG] where filename=";

                    String connectionUrl = "jdbc:sqlserver://"+strpServer+":"+strpPort+";databaseName="+strpDatabase+";IntegratedSecurity=true";

                    // Declare the JDBC objects.  
                    Connection con = null;  
                    Statement stmt = null;  
                    ResultSet rs = null;  

                    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  

                    con = DriverManager.getConnection(connectionUrl); 



                    String SQLS = strpQuery2+NewFileNmae;
                    System.out.println("SQLQuery is " + SQLS);
                    stmt = con.createStatement();  
                    rs = stmt.executeQuery(SQLS);  

                    while (rs.next()) {

                        ProcessID = rs.getString(1);

                        System.out.println("List value are " +ProcessID);

                    }
    } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

В окне отладки я вижу, что SQL-оператор печатается как "SELECT processid, * FROM [Config].[AD].[FILELOG] where filename=WTX-5010_HP_KYCMS18837P51144.txt" до этого момента в приведенном выше сценарии rs = stmt.executeQuery(SQLS);

Однако при выполнении действия F6 после `rs = stmt.executeQuery (SQLS) оно завершается неудачно и выдает следующую ошибку:

com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '_HP_KYCMS18837P51144'.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:792)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:689)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(SQLServerStatement.java:616)
    at Test.TS01ClaimLoadverifyClaimLoadsuccessHCFA.verifyClaimLoadsuccessHCFA(TS01ClaimLoadverifyClaimLoadsuccessHCFA.java:180)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:661)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:869)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1193)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    at org.testng.TestRunner.privateRun(TestRunner.java:744)
    at org.testng.TestRunner.run(TestRunner.java:602)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
    at org.testng.SuiteRunner.run(SuiteRunner.java:289)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
    at org.testng.TestNG.runSuites(TestNG.java:1144)
    at org.testng.TestNG.run(TestNG.java:1115)
    at TestScriptRunner.Runner.runTestScriptKeywords(Runner.java:856)
    at TestScriptRunner.Runner.triggerRun(Runner.java:344)
    at TestScriptRunner.Runner.main(Runner.java:144)
    at Test.TestScriptRun.main(TestScriptRun.java:9)

Я добавляю имя файла как переменную, где, когда динамическое имя файла генерируется автоматически, оно не приносит кавычки вместе с именем файла. Как я могу упомянуть одиночную квоту для переменной NewFileName здесь? - Строка SQLS = strpQuery2 + NewFileNmae;

1 Ответ

0 голосов
/ 10 января 2019

Строка должна быть заключена в кавычки 'WTX-5010_HP_KYCMS18837P51144.txt' (вы пропустили)

SELECT processid, *  
FROM [Config].[AD].[FILELOG] 
where filename= 'WTX-5010_HP_KYCMS18837P51144.txt'


"SELECT processid, *  FROM [Config].[AD].[FILELOG] where filename='" + ;
 NewFileNmae +"';"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...