有没有人知道如何使用SoapUI中的JDBC连接字符串连接到cassandra。
我试过了,但无法连接。基于这项研究,我发现org.apache.cassandra.cql.jdbc.CassandraDriver
并不支持。
我正在使用以下信息。
org.apache.cassandra.cql.jdbc.CassandraDriver
jdbc:cassandra://localhost:8080/test3
答案 0 :(得分:3)
现在Thrift在Cassandra接口方面已经死了,你需要使用本机CQL协议来做任何有用的事情。幸运的是,如果JDBC wrapper是您唯一的集成选项,则可以使用cassandra.yaml,并且本机驱动程序的概念将比旧的Thrift协议更好地映射到JDBC。
JDBC驱动程序类:com.github.adejanovski.cassandra.jdbc.CassandraDriver
JDBC URL:jdbc:cassandra:// host1 - host2 - host3:9042 / keyspace
其中9042是默认的本机传输端口,可通过updated version配置。
似乎还有一个Maven Central基于Thrift的JDBC驱动程序用于Cassandra 3.x,但Apache或Cassandra开发人员不再支持它。
由于此处的其他答案一直在共享(有时是虚假的)依赖关系的固定列表,我认为我最好提一下正确的依赖关系管理,因为如果不同的jar版本不在,很多事情都会起作用#&# 39; t all up up(特别是,2.x到3.x对于Cassandra本身和cassandra-driver-core都是一个突破性的变化)。
上面提到的包装器项目包含一个pom.xml,它指定所有依赖项并发布到{{3}}。您应该能够使用任意数量的依赖管理工具(包括maven,ivy或grape)来解析和下载特定驱动程序版本所需的所有jar。
或者,开发人员似乎提供了一个包含所有必需依赖项的jar,但这将与特定的驱动程序版本绑定。
答案 1 :(得分:0)
这很有趣,我之前从未和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。
答案 2 :(得分:0)
我能够通过创建Cassandra集群并使用它来连接到cassandra,如下所示:
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
def rs;
//query
def qry = "select id soapuikeyspace.users where id='aaa';"
//create cluster for cassandra
Cluster cluster = new Cluster.Builder().addContactPoint("localhost").withCredentials("cassandra", "cassandra").withPort(9042).build();
//get seesionm from cassandra claster
session = cluster.connect();
//get result set
rs = session.execute(qry);
必需的jar:
答案 3 :(得分:0)
我通过cql连接成功连接到Cassandra 3.x和SoapUI版本5.3.0。
以下是我的步骤:
将这些罐子复制到bin / ext:
DSE-java的驾驶员芯1.4.0
DSE-java的驱动程序映射-1.4.0
度量核-3.0.2
netty-all-4.1.6.Final
从lib更新guava jar:
番石榴-18.0
启动soapui并创建groovy脚本:
import com.datastax.driver.core.*;
Cluster cluster = null;
cluster = new Cluster.Builder().addContactPoints("127.0.0.1").withPort(9042).build();
Session session = cluster.connect();
PreparedStatement statement = session.prepare("select * from keyspace.exemple_table");
ResultSet rs = session.execute(statement.bind());
Row row = rs.one();
&#13;