2013-11-01 4 views
3

Я большой поклонник ORM, особенно когда речь заходит о .NET с Entity Framework и использовании LINQ делает доступ к данным менее утомительным и приятным.JOOQ с SQL Server

Однако я сейчас работаю над Java и особенно смотрю на ORM. Я пробовал nHybernate против нашей базы данных SQL Server - и с отсутствием ключей (уникальных ограничений) на некоторых таблицах я начал смотреть на JOOQ.

Однако мне удалось сгенерировать мои классы Java из базы данных SQL Server - без ошибок - с помощью JOOQ (v3.2.0).

В соответствии с этой страницей JOOQ Connections он упоминает класс org.jooq.util.sqlserver.SQLServerDatabase. Однако, когда я сгенерировал с этим в конфигурации, я получил класс, не найденный исключение, и ничего не было создано. Мне нужно было использовать org.jooq.util.jdbc.JDBCDatabase для генерации моего кода.

Вот мой конфигурационный файл (myjooqdbconfig.xml):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-3.2.0.xsd"> 
    <jdbc> 
    <driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver> 
    <url>jdbc:sqlserver://MYSERVER:1433;DatabaseName=MYDB</url> 
    <user>MYUSER</user> 
    <password>PWD</password> 
    </jdbc> 

    <generator> 
    <name>org.jooq.util.DefaultGenerator</name> 

    <database> 
     <name>org.jooq.util.jdbc.JDBCDatabase</name> 

     <inputSchema>dbo</inputSchema> 

     <includes>.*</includes> 

     <excludes></excludes> 
    </database> 

    <target> 
     <packageName>com.quorum.sentinel.dataAccess</packageName> 

     <directory>F:\Libraries\jooq\jOOQ-3.2.0\lib\gen</directory> 
    </target> 
    </generator> 
</configuration> 

С класса не найден исключения я имел возможность заглянуть в JAR файл jooq-мета-3.2.0.jar с помощью Java Decompiler, где он появятся эти классы. Я не вижу определения класса org.jooq.util.sqlserver.SQLServerDatabase.

JOOQ Decompile

Я компиляции с:

Java -classpath jooq-3.2.0.jar; jooq-мета-3.2.0.jar; jooq-Codegen-3.2.0.jar; sqljdbc4 .jar ;. org.jooq.util.GenerationTool /myjooqdbconfig.xml

Это определение org.jooq.util.sqlserver.SQLServerDatabase существует в любом JAR?

Кроме того, создав код из вышеуказанной конфигурации, он, казалось, занимал много времени и, казалось, находился в некотором цикле.

Поиск в сгенерированных файлах под dbo - Keys/Tables/Dbo, были дубликаты имен моих таблиц, которые я заметил, когда копировал файлы в проект Netbeans (много ошибок). Я удалил дубликаты и до сих пор так хорошо, я могу читать различные таблицы из базы данных в моем коде ниже:

public static void main(String[] args) { 
    Connection conn = null; 

    String userName = "MYUSER"; 
    String password = "PWD"; 
    String url = "jdbc:sqlserver://MYSERVER:1433;DatabaseName=MYDB"; 

    try { 
     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); 
     conn = DriverManager.getConnection(url, userName, password); 

     DSLContext create = DSL.using(conn); 
     SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     System.out.println(simpleDateFormat.format(new Date(new GregorianCalendar().getTimeInMillis()))); 
     SelectJoinStep<Record> from = create.select().from(Configuration.CONFIGURATION); 
     Result<Record> result = from.fetch(); 
     System.out.println(simpleDateFormat.format(new Date(new GregorianCalendar().getTimeInMillis()))); 
     for (Record r : result) { 
      Object id = r.getValue(Configuration.CONFIGURATION.NAME); 
      Object time = r.getValue(Configuration.CONFIGURATION.VALUE); 
      System.out.println("Record:    : ID: " + id + " Time: " + time); 
     } 

     System.out.println(simpleDateFormat.format(new Date(new GregorianCalendar().getTimeInMillis()))); 

    } catch (Exception e) { 
     // For the sake of this tutorial, let's keep exception handling simple 
     e.printStackTrace(); 
    } finally { 
     if (conn != null) { 
      try { 
       conn.close(); 
      } catch (SQLException ignore) { 
      } 
     } 
    } 
} 

Так просто повторить мои вопросы среди этой неразберихи:

  1. Где SQL Серверный класс org.jooq.util.sqlserver.SQLServerDatabase?
  2. Является ли приведенная выше информация о том, как вы обычно генерируете сопоставления объектов SQL Server?
  3. Учитывая, что приведенное выше почти сгенерировано правильно и что существуют дубликаты определений, сгенерированных в файлах Keys/Tables/Dbo .java, я не хочу сразу сказать, что это ошибка с Jooq, но может быть плохой дизайн базы данных/неправильная конфигурация/глупый разработчик!

ответ

7

С jOOQ 3.2, jOOQ стал dual-licensed. Интеграция с SQL Server доступна только с jOOQ Professional Edition license. Вы можете, однако, download a free 30 day trial version, который работает с SQL Server.

Примечание: есть также a fix for jOOQ 3.2.1 (будет выпущен в ближайшее время), чтобы предоставить пользователям сообществ больше информации, чем просто трассировку стека.

Смотрите также: jooq-3.2.0 and db2 database

+0

Спасибо за информацию Lukas – Andez

1

Я хочу поделиться своим рабочим конфигурации для SQL Server 2012 и 2014, что и сделало его работу после многих попыток. Я загрузил корпоративную версию jooq3.7.2, чтобы она работала.

Вот мой пример конфигурационного файла «Library.xml»

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-3.7.0.xsd"> 
    <!-- Configure the database connection here --> 
    <jdbc> 
    <driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver> 
    <url>jdbc:sqlserver://testdelta1:1433;databaseName=NEO_DB</url> 
    <user>LOB_ManilaUsers</user> 
    <password>lobpassword3123</password> 
    </jdbc> 

    <generator> 
    <!-- The default code generator. You can override this one, to generate your own code style. 
     Supported generators: 
     - org.jooq.util.JavaGenerator 
     - org.jooq.util.ScalaGenerator 
     Defaults to org.jooq.util.JavaGenerator --> 
    <name>org.jooq.util.JavaGenerator</name> 

    <database> 
     <!-- The database type. The format here is: 
      org.util.[database].[database]Database --> 
     <!--<name>org.jooq.util.mysql.MySQLDatabase</name> --> 
     <name>org.jooq.util.sqlserver.SQLServerDatabase</name> 
     <!-- The database schema (or in the absence of schema support, in your RDBMS this 
      can be the owner, user, database name) to be generated --> 

     <!-- specify database name --> 
     <inputSchema>dbo</inputSchema> 

     <!-- All elements that are generated from your schema 
      (A Java regular expression. Use the pipe to separate several expressions) 
      Watch out for case-sensitivity. Depending on your database, this might be important! --> 
     <includes>.*</includes> 

     <!-- All elements that are excluded from your schema 
      (A Java regular expression. Use the pipe to separate several expressions). 
      Excludes match before includes --> 
     <excludes></excludes> 
    </database> 

    <target> 
     <!-- The destination package of your generated classes (within the destination directory) --> 
     <packageName>com.neoapi.entity</packageName> 

     <!-- The destination directory of your generated classes --> 
     <directory>jooq_directory/src_generated</directory> 
    </target> 
    </generator> 
</configuration> 

Обычно значение схемы по умолчанию является "ДБО. Сначала я ввел «NEO_DB», который не работал.

Вы можете указать желаемое и

Бесплатная версия или с открытым исходным кодом jooq 3.7.2 не содержит имя базы данных SQLServerDatabase. Издание предприятия (30 дней). Я не знаю, как начнутся подсчет пробных дней.

вот образец журнала от моего терминала:

> INFO: Generating table   : Tobservationrawdataobservations.java [input=tObservationRawDataObservations, output=tObservationRawDataObservations, pk=PK_ObservationRawDataObservations] 
Feb 16, 2016 7:03:35 AM org.jooq.tools.JooqLogger info 

INFO: Generating table   : UdvPublisheddata.java [input=udv_PublishedData, output=udv_PublishedData, pk=N/A] 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating table   : UdvPublishinghistory.java [input=udv_PublishingHistory, output=udv_PublishingHistory, pk=N/A] 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating table   : UdvScreamertanksystems.java [input=udv_ScreamerTankSystems, output=udv_ScreamerTankSystems, pk=N/A] 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating table   : UdvSiradwmconfig.java [input=udv_SiraDWMConfig, output=udv_SiraDWMConfig, pk=N/A] 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating table   : Vwauditlog.java [input=vwAuditLog, output=vwAuditLog, pk=N/A] 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating table   : Vwcompanysitetanksystem.java [input=vwCompanySiteTankSystem, output=vwCompanySiteTankSystem, pk=N/A] 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating table   : Vwdocketdeliveries.java [input=vwDocketDeliveries, output=vwDocketDeliveries, pk=N/A] 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Tables generated   : Total: 01:06 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating table references 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Table refs generated  : Total: 01:06, +17.847ms 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating Keys   
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Keys generated   : Total: 01:06, +49.833ms 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating table records 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : _Tmptsis_20151019Record.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : DataRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : FuncgetchasedatatableRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : FuncgetcompliancestatisticspasstableRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : FuncgetcurrentfailsinctableRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcalibrationsRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcompaniesRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcompanyfilereadersRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcompanyrolecontactsRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcompanyrolepermissionsRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcompanyrolesRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcontactregionsRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcontactsRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcontactsitesRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcorrectiongroupRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TcorrectiongroupsiteRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TdomainusersRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TfilereadersRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TgradealiasesRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TgradesRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TimportedfilemessagesRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating record  : TimportedfilesRecord.java 
Feb 16, 2016 7:03:40 AM org.jooq.tools.JooqLogger info 
INFO: Generating routine  : SpCreatediagram.java 
Feb 16, 2016 7:03:43 AM org.jooq.tools.JooqLogger info 
INFO: Generating routine  : SpDropdiagram.java 
Feb 16, 2016 7:03:45 AM org.jooq.tools.JooqLogger info 
INFO: Generating routine  : SpHelpdiagramdefinition.java 
Feb 16, 2016 7:03:45 AM org.jooq.tools.JooqLogger info 
INFO: Generating routine  : SpHelpdiagrams.java 
Feb 16, 2016 7:03:46 AM org.jooq.tools.JooqLogger info 
INFO: Generating routine  : SpRenamediagram.java 
Feb 16, 2016 7:03:46 AM org.jooq.tools.JooqLogger info 
INFO: Routines generated  : Total: 01:11, +5.132s 
Feb 16, 2016 7:03:46 AM org.jooq.tools.JooqLogger info 
INFO: Packages fetched   : 0 (0 included, 0 excluded) 
Feb 16, 2016 7:03:46 AM org.jooq.tools.JooqLogger info 
INFO: Removing excess files  
Feb 16, 2016 7:03:46 AM org.jooq.tools.JooqLogger info 
INFO: GENERATION FINISHED: dbo : Total: 01:11, +2.713ms 
Смежные вопросы