这很有趣,我以前从未与 Cassandra 合作过,所以我花了一些时间才弄清楚这一点,我想我知道了。
要使用 Cassandra,您需要多个 jar 文件,下面是我使用的文件的屏幕截图。
我使用 cassandra-cli 找出正确的端口号,在我的例子中是9160。
正确的连接字符串是jdbc:cassandra://localhost:9160/soapuikeyspace,正确的驱动程序是org.apache.cassandra.cql.jdbc.CassandraDriver。
当我尝试从 JDBC 步骤访问 Cassandra 时,我能够成功连接到 Cassandra,但是当我尝试运行选择查询时,我得到了
获取响应时出错
soapUI 日志中的以下错误跟踪
Sat Apr 05 17:33:09 ADT 2014:ERROR:java.sql.SQLFeatureNotSupportedException
java.sql.SQLFeatureNotSupportedException
at org.apache.cassandra.cql.jdbc.CassandraResultSet$CResultSetMetaData.getTableName(CassandraResultSet.java:1307)
at com.eviware.soapui.support.xml.XmlUtils.addResultSetXmlPart(XmlUtils.java:1712)
at com.eviware.soapui.support.xml.XmlUtils.createJdbcXmlResult(XmlUtils.java:1651)
at com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcResponse.<init>(JdbcResponse.java:38)
at com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcSubmit.createResponse(JdbcSubmit.java:334)
at com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcSubmit.runQuery(JdbcSubmit.java:199)
at com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcSubmit.run(JdbcSubmit.java:161)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
所以这种方法失败了。
这不是完全失败,因为我能够访问 Cassandra 并针对它运行查询。我使用下面的代码来做到这一点。
import java.sql.DriverManager;
import java.sql.SQLFeatureNotSupportedException;
import java.sql.Statement;
import javax.sql.DataSource;
import org.apache.cassandra.cql.jdbc.*;
com.eviware.soapui.support.GroovyUtils.registerJdbcDriver("org.apache.cassandra.cql.jdbc.CassandraDriver");
def con = DriverManager.getConnection("jdbc:cassandra://localhost:9160/soapuikeyspace"); //keyspace has to be in lowercase
def stmt = con.createStatement();
//add data
def qry = "insert into users (user_id, lname, fname) values (1747,'Abhishek','Asthana');"
def rs = stmt.executeUpdate(qry)
使用此代码时要记住的最重要的事情是将键空间名称写成小写。
对于任何感兴趣的人,我写了a blog about all this。