我正在尝试运行maven脚本并删除并创建数据库。
这是我的xml
.....
<plugin>
<!-- Used to automatically drop (if any) and create a database prior
to running integration test cases. -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<version>1.5</version>
<dependencies>
<!-- <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.22</version>
</dependency> -->
<dependency>
<groupId>db2.connector</groupId>
<artifactId>db2.connector</artifactId>
<version>10.5.0.1</version>
<scope>system</scope>
<systemPath>${basedir}/../data/target/db2jcc.jar</systemPath>
</dependency>
<dependency>
<groupId>db2.connector</groupId>
<artifactId>db2.connector4</artifactId>
<version>10.5.0.1</version>
<scope>system</scope>
<systemPath>${basedir}/../data/target/db2jcc4.jar</systemPath>
</dependency>
</dependencies>
<configuration>
<!-- common configuration shared by all executions -->
<driver>com.ibm.db2.jcc.DB2Driver</driver>
<username>db2inst1</username>
<password>password</password>
<url>jdbc:db2://192.168.0.81:50000/db</url>
<forceMojoExecution>true</forceMojoExecution>
</configuration>
<executions>
<execution>
<id>drop-db-before-test-if-any</id>
<phase>pre-integration-test</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<autocommit>true</autocommit>
<sqlCommand>drop database db</sqlCommand>
<onError>continue</onError>
</configuration>
</execution>
<execution>
<id>create-db</id>
<phase>pre-integration-test</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<autocommit>true</autocommit>
<sqlCommand>create database db</sqlCommand>
</configuration>
</execution>
<execution>
<id>create-schema</id>
<phase>pre-integration-test</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<url>jdbc:db2://192.168.0.81:50000/sample</url>
<autocommit>true</autocommit>
<srcFiles>
<srcFile>${basedir}/../data/src/main/resources/create_database_db2.sql</srcFile>
</srcFiles>
</configuration>
</execution>
</executions>
</plugin>
.....
我得到的错误是
[ERROR] com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104,
SQLSTATE=42601, SQLERRMC=database;drop ;<program_or_package>, DRIVER=3.66.46
[INFO] 0 of 1 SQL statements executed successfully
create db。
的类似错误我在这做错了什么?
答案 0 :(得分:1)
我不是Maven专家,但您遇到的问题是,当它是DROP DATABASE
命令时,您尝试将DB2 Command-Line processor作为SQL命令运行。
This thread可能会有所帮助,它是关于用Java运行DB2 CLP命令。
答案 1 :(得分:1)
正如Bhamby所说,你不能执行“创建数据库”,也不能执行“删除数据库”作为SQL命令。这就是你遇到这类错误的原因。
通过exec-maven-plugin命令脚本
您可以做的是从Maven执行命令,但在此之前,您必须确保正确加载DB2环境。您可以使用exec-maven-plugin插件,但不是执行不同的命令来加载DB2配置文件然后创建数据库,您可以做的是编写一个脚本,它将接收数据库名称作为参数,脚本将创建数据库。这里的问题是你必须为Linux编写一个,为Windows编写一个。例如在linux中:
create.sh
#!/bin/bash
. /home/db2inst1/sqllib/db2profile
db2 create db $1
此处的实例主目录是:/ home / db2inst1。
此外,您必须确定,用于执行Maven的用户在实例上具有创建新数据库的必要权限。我的意思是,用户应该在sysadm或sysctrl组中:http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/topic/com.ibm.db2.luw.admin.cmd.doc/doc/r0001941.html
<强>爪哇强>
您无法通过Java创建数据库,因为DB2 API不为此提供Java API。相反,您可以从JNI创建C routine called并在Java中调用它。通过这种方式,您可以从Java个性化创建/删除过程,而不是从脚本中个性化。