8
votes

Comment puis-je vous connecter à une base de données MySQL à l'aide de SCALA?

Je travaille sur un petit projet où j'aimerais analyser certaines données, puis la mettre dans une base de données. Je ne travaille pas avec l'ascenseur et je n'ai pas été capable de trouver une façon standard de le faire.

Je vais bien écrire les requêtes moi-même, mais je ne sais pas quoi utiliser pour se connecter à la DB.


1 commentaires

Cette question a beaucoup de bonnes informations: Stackoverflow.com/Questtions/1362748/...


6 Réponses :


12
votes

Vous pouvez utiliser JDBC - Les moyens standard d'obtenir Java de parler à Bases de données. Vous aurez besoin du pilote MySQL JDBC . Apache Dbutils fournit des classes utilitaires entourant JDBC et serait utile.

Si vous voulez une API de niveau supérieur qui prend une partie de la chaudière, puis consultez Intégration JDBC de Spring's .

Si vous voulez un orm (mappage d'objet-relation), alors Hibernate est un bon choix. < / p>

J'ai utilisé les trois à Scala avec succès.


0 commentaires

5
votes

J'ai réellement écrit un Shell de commandes SQL , à Scala, qui parle à tout arbitraire Base de données pour laquelle un pilote JDBC existe. Comme Brian Agnew note, cela fonctionne parfaitement. De plus, il existe des outils tels que Queruleux , SQUERYL et ou / courtier qui fournit Scala Couches de base de données d'amitié. Ils s'assoient au-dessus de JDBC, mais ils fournissent une sémantique supplémentaire (via DSLS, dans certains cas) pour vous faciliter la tâche.


0 commentaires

2
votes

Pour la complétude, consultez également Richsql . C'est le code de démonstration montrant comment envelopper JDBC pour faire plus d'opérations de type SCALA, mais c'est en fait assez utilisable. Il présente l'avantage d'être simple et petit, afin que vous puissiez facilement étudier la source pour voir ce qui se passe. N'oubliez pas de fermer () vos départis.


0 commentaires

3
votes

Essayez Courtier O / R :

case class MyObj(name: String, year: Int)

val ds = new com.mysql.jdbc.jdbc2.optional.MysqlDataSource
// set properties on ds

import org.orbroker._
val builder = new BrokerBuilder(ds)
val broker = builder.build

val myObj: MyObj = // Parse stuff to create MyObj instance
broker.transaction() { session =>
  session.execute("INSERT INTO MYTABLE VALUES(:obj.name, :obj.year)", "obj"->myObj)s
}

val myObjs: Seq[MyObj] = // Parse stuff to create sequence of MyObj instances
broker.transaction() { session =>
  session.executeBatch("INSERT INTO MYTABLE VALUES(:obj.name, :obj.year)", "obj"->myObjs)
}


0 commentaires

7
votes

Cours d'arrêt Vous pouvez utiliser toutes les versions Java compatibles avec JDBC (Hibernate, Spring, etc.), mais pour une meilleure utilisation de la langue Scala, je vous recommande d'utiliser un cadre spécifique Scala, qui possède une meilleure DSL.

  • ScalaQuery est une API / DSL (langue spécifique du domaine) construite sur JDBC pour accéder à des bases de données relationnelles dans SCALAA . Il a été conçu avec les objectifs suivants à l'esprit:
  • SCRAGYL est un orm scala et DSL pour parler avec des bases de données avec une garantie minimale de verbosité et de type maximum de type
  • SERORM est une framework SCALA ORM conçu pour éliminer le code de la chaudière et résoudre les problèmes d'évolutivité avec un Abstraction de haut niveau et style de programmation fonctionnel
  • SLICK - PROJET DE TYPEAFE avec cartographie relationnelle fonctionnelle

    Déconnectez plus sur ces cadres chez https: // Stackoverflow. Com / Questions / 1362748 / Recherche-à-la-Chapelle-comparaison-de-Scala-Persistance-cadres


1 commentaires

Considérez également SCODIKIJDBC , très similaire à celui indiqué ci-dessus. En outre, Jouez-le, Scalaanorm < / a> est similaire. J'ai créé une réponse complète sur SCIPIKIJDBC.



1
votes

Je viens de découvrir SCALKIJDBC qui offre une wrapper Scala comme API comme API pour JDBC .

(J'ai trouvé SCIDEDIJDBC lors de la recherche Comment utiliser scalaanorm a > sans jeu de jeu . Maintenant on dirait que je n'aurai pas besoin d'avoir besoin de ANORTINAL POUR MON PROJET.) P>

Voici un exemple simple, même s'il offre de nombreuses fonctionnalités intéressantes non présentées ici: P>

import scalikejdbc._

Class.forName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource")

ConnectionPool.singleton("jdbc:mysql://localhost:3306/myschema", "user", "password")

DB.localTx { implicit conn =>

  val data = sql"select mystringcol, myintcolumn from mytable".map {
    rs => (rs.string("mystringcol"), rs.int("myintcolumn"))
  }.list().apply()

  println(data)

}


0 commentaires