开发者

Querulous -- Is it usable with a database other than MySQL?

I'm studying querulous and started with this code:

import com.twitter.querulous.evaluator.QueryEvaluator
class Querulous {

  def test {
    val queryEvaluator = QueryEvaluator("org.h2.Driver", "jdbc:h2:tcp://localhost/~/test", "sa", "")
    val names = queryEvaluator.select("select (name) from mytable where id in (?)", List(1, 2, 3)) {
      row =>
        row.getString("name")
    }
    println(names)
  }
}

The result of execution is following:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1118) at com.mysql.jdbc.MysqlIO.(MysqlIO.java:343) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2308) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2122) at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:774) at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:49) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:375) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:289) at java.sql.DriverManager.getConnection(DriverManager.java:582) at java.sql.DriverManager.getConnection(DriverManager.java:185) at org.apache.commons.dbcp.Driver开发者_Go百科ManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:75) at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1148) at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106) at com.twitter.querulous.database.ApachePoolingDatabase.open(ApachePoolingDatabase.scala:93) at com.twitter.querulous.database.Database$class.withConnection(Database.scala:33) at com.twitter.querulous.database.ApachePoolingDatabase.withConnection(ApachePoolingDatabase.scala:45) at com.twitter.querulous.evaluator.StandardQueryEvaluator.withTransaction(StandardQueryEvaluator.scala:66) at com.twitter.querulous.evaluator.StandardQueryEvaluator.select(StandardQueryEvaluator.scala:23) at com.twitter.querulous.evaluator.QueryEvaluator$class.select(QueryEvaluator.scala:88) at com.twitter.querulous.evaluator.StandardQueryEvaluator.select(StandardQueryEvaluator.scala:19) at org.database.Querulous.test(Querulous.scala:10) at org.database.Main$.main(Main.scala:4) at org.database.Main.main(Main.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at sbt.Run.run0(Run.scala:60) at sbt.Run.execute$1(Run.scala:47) at sbt.Run$$anonfun$run$2.apply(Run.scala:50) at sbt.Run$$anonfun$run$2.apply(Run.scala:50) at sbt.TrapExit$.executeMain$1(TrapExit.scala:33) at sbt.TrapExit$$anon$1.run(TrapExit.scala:42) Caused by: java.net.UnknownHostException: org.h2.Driver at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:850) at java.net.InetAddress.getAddressFromNameService(InetAddress.java:1201) at java.net.InetAddress.getAllByName0(InetAddress.java:1154) at java.net.InetAddress.getAllByName(InetAddress.java:1084) at java.net.InetAddress.getAllByName(InetAddress.java:1020) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:275) at com.mysql.jdbc.MysqlIO.(MysqlIO.java:292) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2308) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2122) at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:774) at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:49) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:375) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:289) at java.sql.DriverManager.getConnection(DriverManager.java:582) at java.sql.DriverManager.getConnection(DriverManager.java:185) at org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:75) at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1148) at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106) at com.twitter.querulous.database.ApachePoolingDatabase.open(ApachePoolingDatabase.scala:93) at com.twitter.querulous.database.Database$class.withConnection(Database.scala:33) at com.twitter.querulous.database.ApachePoolingDatabase.withConnection(ApachePoolingDatabase.scala:45) at com.twitter.querulous.evaluator.StandardQueryEvaluator.withTransaction(StandardQueryEvaluator.scala:66) at com.twitter.querulous.evaluator.StandardQueryEvaluator.select(StandardQueryEvaluator.scala:23) at com.twitter.querulous.evaluator.QueryEvaluator$class.select(QueryEvaluator.scala:88) at com.twitter.querulous.evaluator.StandardQueryEvaluator.select(StandardQueryEvaluator.scala:19) at org.database.Querulous.test(Querulous.scala:10) at org.database.Main$.main(Main.scala:4) at org.database.Main.main(Main.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at sbt.Run.run0(Run.scala:60) at sbt.Run.execute$1(Run.scala:47) at sbt.Run$$anonfun$run$2.apply(Run.scala:50) at sbt.Run$$anonfun$run$2.apply(Run.scala:50) at sbt.TrapExit$.executeMain$1(TrapExit.scala:33) at sbt.TrapExit$$anon$1.run(TrapExit.scala:42) [info] == run == [error] Error running run: Nonzero exit code: 1

As for me, it doesn't look very nice. It seems that querulous can be used only with mysql rdbms. Is that true? Secondly, there are a bunch of querulous projects1 2 3 4 with slightly different instructions, for examle, from 1:

val queryEvaluator = QueryEvaluator("host", "username", "password")

(I didn't figure out what "host" means)

from 2:

val queryEvaluator = QueryEvaluator("com.mysql.jdbc.Driver", "jdbc:mysql://localhost/mydb", "username", "password")

(used this as sample)

And at last, I used "com.twitter" % "querulous_2.8.0" % "1.5.0" for binaries and cloned git://github.com/twitter/querulous.git to have sources (no 1.5 sources available for download) but they doesn't have any comments.

So, questions: can querulous be used with databases other than mysql? If so, please specify example how connect to it; scaladoc location; normal (with comments) sources location.


This fork claims to be more of a vanilla version of Querulous:

https://github.com/ollekullberg/querulous-light

From their readme:

Note about this Fork

This is a fork of Querulous-generic (Querulous-generic is in turn a fork of the Twitter version). This fork will:

  • Work on Scala 2.8
  • Work on all RDBMs (Well, I've only tried H2, so I do not really know)
  • Not have any dependencies to Twitters StandardProject module.

The more advanced features (timeout and so on) probably don't work, since I had to smash some code to get here.

While I use querulous, I've only used it with mysql and have not tried this fork myself.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜