2010-07-07 39 views

Odpowiedz

11

Spójrz na samouczek "Using Scala with JDBC to connect to MySQL", zamień adres URL db i dodaj właściwą bibliotekę jdbc. Link został złamany tak oto treść bloga:

Korzystanie Scala z JDBC połączyć się z MySQL

HOWTO po podłączeniu Scala do bazy danych MySQL przy użyciu JDBC. Istnieje wiele bibliotek baz danych dla Scali, ale natrafiłem na problem z doprowadzeniem większości z nich do działania. Próbowałem użyć scala.dbc, scala.dbc2, Scala Query i Querulous, ale albo nie są one obsługiwane, mają bardzo ograniczony zestaw lub streszczenia SQL do dziwnego pseudojęzyka.

The Play Framework ma nową bibliotekę baz danych o nazwie ANorm, która stara się zachować interfejs do podstawowego SQL, ale z nieznacznie ulepszonym interfejsem scala. Jury wciąż jest dla mnie niedostępne, do tej pory używane tylko w jednym projekcie minimalnie. Poza tym widziałem tylko, że działa w aplikacji Play, nie wygląda na to, że można go wydobyć zbyt łatwo.

Więc skończyło się na podstawowym połączeniu Java JDBC i okazało się to dość łatwe rozwiązanie.

Oto kod dostępu do bazy danych za pomocą Scala i JDBC. Musisz zmienić parametry ciągu połączenia i zmodyfikować zapytanie do bazy danych. Ten przykład był nastawiony na MySQL, ale każdy sterownik JDBC Java powinien działać tak samo z Scala.

Zapytanie Podstawowe

import java.sql.{Connection, DriverManager, ResultSet}; 

// Change to Your Database Config 
val conn_str = "jdbc:mysql://localhost:3306/DBNAME?user=DBUSER&password=DBPWD" 

// Load the driver 
classOf[com.mysql.jdbc.Driver] 

// Setup the connection 
val conn = DriverManager.getConnection(conn_str) 
try { 
    // Configure to be Read Only 
    val statement = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY) 

    // Execute Query 
    val rs = statement.executeQuery("SELECT quote FROM quotes LIMIT 5") 

    // Iterate Over ResultSet 
    while (rs.next) { 
     println(rs.getString("quote")) 
    } 
} 
finally { 
    conn.close 
} 

Trzeba będzie pobrać słoik mysql-złącza.

Lub jeśli używasz maven, fragmentów pom załadować złącze mysql, musisz sprawdzić, co to jest najnowsza wersja.

<dependency> 
    <groupId>mysql</groupId> 
    <artifactId>mysql-connector-java</artifactId> 
    <version>5.1.12</version> 
</dependency> 

Aby uruchomić przykład, zapisz następujący tekst w pliku (query_test.scala) i uruchomić, stosując następujące określenia ścieżki klasy do słoika Złącze:

scala -cp mysql-connector-java-5.1.12.jar:. query_test.scala 

INSERT, UPDATE i DELETE

Aby wykonać wstawianie, aktualizowanie lub usuwanie, należy utworzyć obiekt instrukcji, który można zaktualizować. Polecenie execute jest nieco inne i najprawdopodobniej będziesz chciał użyć jakichś parametrów. Oto przykład robienia wstawki przy użyciu jdbc i scala z parametrami.

+1

fyi, link jest zepsuty –

+0

dziękuję, naprawiłem to –

+6

Nie było pytanie, jak połączyć się z postgres sql? –

3

Używamy Squeryl, który działa dobrze do tej pory dla nas. W zależności od twoich potrzeb może to załatwić sprawę.

Oto list z obsługiwane DB i adapters

1

Jeśli chcesz/potrzeby, aby napisać swój własny kod SQL, ale nienawidzę interfejs JDBC, spojrzeć na O/R Broker

+1

Ten link jest obecnie uszkodzony. – jedesah

+1

Naprawiono. – nilskp

+0

Zastanawiam się, czy SO oferuje odznakę "Złamany link skorygowano po pięciu lub więcej latach". Przypuszczam, że znaczek "Długoterminowa konserwacja". Plus jeden. Nazwałbym to "Go for Broker". –

6

Trzeba dodać zależność "org.postgresql" % "postgresql" % "9.3-1102-jdbc41" w build.sbt i można modyfikować następujący kod do łączenia i kwerendy bazy danych. Zamień DB_USER na swojego użytkownika bazy danych i DB_NAME na swoją nazwę bazy danych.

import java.sql.{Connection, DriverManager, ResultSet} 

object pgconn extends App { 
    println("Postgres connector") 

    classOf[org.postgresql.Driver] 
    val con_st = "jdbc:postgresql://localhost:5432/DB_NAME?user=DB_USER" 
    val conn = DriverManager.getConnection(con_str) 
    try { 
    val stm = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY) 

    val rs = stm.executeQuery("SELECT * from Users") 

    while(rs.next) { 
     println(rs.getString("quote")) 
    } 
} finally { 
    conn.close() 
    } 
} 
13

Polecam spojrzeć na Doobie.

This Rozdział w "Księdze Doobie" daje dobre wyczucie tego, jak będzie wyglądał twój kod, jeśli korzystasz z tej biblioteki.

Jest to biblioteka z wyboru już teraz, aby rozwiązać ten problem, jeśli jesteś zainteresowany w czystej stronie FP Scala, tj scalaz, scalaz-stream (prawdopodobnie fs2 i cats wkrótce) oraz nr przejrzystości w ogóle.

To nic nie znaczy, że Doobie NIE jest ORMEM. Zasadniczo jest to po prostu ładniejszy interfejs API wyższego poziomu niż JDBC.

Powiązane problemy