我有一种方法可以将记录插入Postgres
DB中,并返回为所述记录生成的标识字段。问题是,如果我在我的POM文件中包含Redshift驱动程序,那么该驱动程序将代替Postgres驱动程序被使用-
Redshift驱动程序不允许返回标识值。
代码是:
try {
Class.forName( "org.postgresql.Driver" ).newInstance();
Connection connection = DriverManager.getConnection( "jdbc:postgresql://localhost:5433/postgres", "postgres", "password" );
Statement stmt = connection.createStatement();
stmt.execute( "insert into public.job ( job_name ) values ( 'test' )" , Statement.RETURN_GENERATED_KEYS );
ResultSet keyset = stmt.getGeneratedKeys();
if ( keyset.next() ) System.out.println( keyset.getLong( 1 ) );
}
catch ( Exception e ) {
e.printStackTrace();
}
使用此POM时,它可以工作:
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4-1201-jdbc41</version>
</dependency>
</dependencies>
使用此POM时,它不起作用:
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>redshift.jdbc</artifactId>
<version>1.1.2.0002</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4-1201-jdbc41</version>
</dependency>
</dependencies>
是什么让Java选择Redshift驱动程序而不是Postgres驱动程序?
(Redshift驱动程序的类路径为 com.amazon.jdbc41.Driver ,因此我认为这不是类路径冲突)
TIA
您的问题是Java支持ServiceLoader
JDBC 4.0 的机制。
在JDBC 4中,DriverManager
将META- INF/services/java.sql.Driver
根据其jar文件中的设置查找并注册驱动程序。调用getConnection()
DriverManager时,将为给定的jdbc
URL选择第一个合适的驱动程序。
现在redshift和postgres驱动程序在jdbc网址方面有所不同,但是(引自redshift文档http://docs.aws.amazon.com/redshift/latest/mgmt/configure-
jdbc-connection.html#obtain-jdbc-
url):
以jdbc:postgresql:// endpoint:port / database的以前格式指定的JDBC URL仍然可以使用。
现在,发生的事情是,来自redshift的JDBC驱动程序被加载到服务条目上,并将自己放置为redshift jdbc URL和postgres
URL的驱动程序。
我无法确切说明是否DriverManager
允许通过加载另一个驱动程序来覆盖现有的jdbc-driver-
links,但是解决您的问题的方法可能是显式控件,该控件要么先加载postgres驱动程序(如果URL仅被注册一次),要么显式加载它在redshift驱动程序之后(如果可以覆盖JDBC
URL映射)。
我不能告诉您是否存在禁止redshift驱动程序注册postgres URL的属性。
从MATLAB R2017a Windows-7连接数据库的尝试失败。 错误消息:找不到JDBC驱动程序 JDBC驱动程序是: null null 尝试这些JDBC驱动程序的尝试都没有成功,因为在javaclass路径中单独测试了每个文件: C:\drivers\mysql-connector-java-6.0.6\mysql-connector-java-6.0.6-bin.jar C:\dri
复习我的Java技能,伙计们。我曾经在类内用Java声明我的连接细节。这次我决定尝试使用context和@Resource方法,但出现了一些错误 信息:服务器在1701毫秒内启动ervlet.java:725SQLException:无法为hain.java:2912的连接URL'jdbc: oracle:瘦@hain.internal'创建类'org.apache.catalina.core.O
《2013年水晶报告》。使用Informix JDBC驱动器ifxjdbc.jar。报告之前正在工作 情况: > crconfig.xml已编辑,因此类路径中包含以下内容: C:\Program Files(x86)\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\java/lib/ifxjdbc.jar null 获取JDBC驱
那么,为什么Oracle JDBC驱动程序创建使用ISO-8859-1字节编码的字符串呢?如何在不改变数据库(也不转换字符串)的情况下获得UTF-8字节编码的字符串?我可以从驱动程序配置ou JMV args中更改它吗?
有一个问题,它不隐藏浏览器,我能做什么?
我正试图使用IntelliJ IDE从Spark连接到老虎机数据库。有人能帮助jdbc驱动程序(。jar)文件吗?我正在寻找“com.tigergraph.jdbc.驱动程序”。 我确实找到了下面的gitHub存储库,其中包含了所有必需的信息。java文件。但是,我不知道如何在我的spark项目中使用它。https://github.com/tigergraph/ecosys/tree/maste