0

ノードの値を読み取るために解析するxmlがあり、これらの値をex Validationのカスタムリストに取得します。

H2Database のテーブルに値を挿入しようとすると、値の xml を解析した後、構文エラーが発生します。

私が解析するサンプルxml

<DmtTask xsi:type="SqlTask">
        <TaskSeverity></TaskSeverity>
      <TaskCategory></TaskCategory>
      <TaskTitle></TaskTitle>
      <TaskMessage></TaskMessage>
      <TaskCode></TaskCode>
          <DSqlGenerated></DSqlGenerated>
      <TaskName>VALIDATE_COMPANIES_MISSING_AVAILABILITY_DATE</TaskName>
      <SqlQuery>DROP TABLE CLIENT_VALIDATION.COMPANIES_MISSING_AVAILABILITY_DATE IF EXISTS;
            CREATE TABLE CLIENT_VALIDATION.COMPANIES_MISSING_AVAILABILITY_DATE AS
            (SELECT * FROM CLIENT.COMPANIES WHERE AVAILABILITY_DATE = '');
            </SqlQuery>
          <ReportError>SELECT 'Missing Availability Date' AS ERROR_DESC,
            ORGANIZATION_NAME,AVAILABILITY_DATE,COUNTRY,EMAIL_ADDRESS,INSTANT_MESSENGER_ADDRESS,REVERSE_DEBIT_CREDIT,KEEP_DEBIT_CREDIT_AND_REVERSE_SIGN
            FROM CLIENT_VALIDATION.COMPANIES_MISSING_AVAILABILITY_DATE</ReportError>
      <MetricSchemaName>DMTSCRIPTS</MetricSchemaName>
    </DmtTask>

コードビハインドからテーブルを更新するために作成した動的クエリ。TaskEditorText はカスタム コレクション List のオブジェクトです

for (int i = 0; i < taskEditorText.Count; i++)
                        {
                            //string sqlGenerated = "false";
                            db.ExecuteNonQuery("INSERT INTO " + Schema + ".DMTScriptTasks(DmtScriptId,TaskSeverity,TaskCategory,TaskTitle,TaskMessage,TaskCode,TaskName,Execute,UpdatedUser,UpdatedTime) VALUES('" + id + "','" + taskEditorText[i].TaskSeverity + "','" + taskEditorText[i].TaskCategory + "','" + taskEditorText[i].TaskTitle + "','" + taskEditorText[i].TaskMessage + "','" + taskEditorText[i].TaskCode + "','" + taskEditorText[i].TaskName + "','" + true + "','" + CreatedUser + "','" + CreatedDate + "');");
                        }

構文エラーになるサンプル値

DROP TABLE CLIENT_VALIDATION.COMPANIES_INVAL_AVAILABILITY_DATE IF EXISTS;
        CREATE TABLE CLIENT_VALIDATION.COMPANIES_INVAL_AVAILABILITY_DATE AS
            (SELECT * 
            FROM CLIENT.COMPANIES   
            WHERE
                AVAILABILITY_DATE != ''
            AND
                AVAILABILITY_DATE NOT LIKE '____-__-__');

特殊文字を置き換えてみたり、正規表現を書いたり、Regex.Escape を使用したりしましたが、何もうまくいきませんでした。解析するxmlを制御することはできません。私も H2Database は初めてです。したがって、このタイプの値をデータベースの列に挿入する方法を知っている人がいたら、助けてください。

ここで使用しているデータベースは H2DataBase (Java データベース) です。

4

1 に答える 1

0
PreparedStatement prep = reader.Connection.prepareStatement("INSERT INTO " + Schema + ".DMTScriptTasks(DmtScriptId,TaskSeverity,TaskCategory,TaskTitle,TaskMessage,TaskCode,TaskName,Execute,UpdatedUser,UpdatedTime,SqlQuery) VALUES (?,?,?,?,?,?,?,?,?,?,?)");
Then loop through the collection

for (int i = 0; i < taskEditorText.Count; i++)
                        {
                            prep.setString(1, id);
                            prep.setString(2, taskEditorText[i].TaskSeverity);
                            prep.setString(3, taskEditorText[i].TaskCategory);
                            prep.setString(4, taskEditorText[i].TaskTitle);
                            prep.setString(5, taskEditorText[i].TaskMessage);
                            prep.setString(6, taskEditorText[i].TaskCode);
                            prep.setString(7, taskEditorText[i].TaskName);
                            prep.setString(8, "true");
                            prep.setString(9, CreatedUser);
                            prep.setString(10, CreatedDate);
                            prep.setString(11, taskEditorText[i].SqlQuery);
                            //batch insert
                            prep.addBatch();
                            reader.Connection.setAutoCommit(false);
                            prep.executeBatch();
                            reader.Connection.setAutoCommit(true);

                        }

ここで taskEditorText はリストであり、値を挿入しようとしているデータベースは H2Database です。

次に、挿入クエリのバッチ更新を行いました。

于 2013-05-06T06:09:31.393 に答える