2012-04-13 98 views
0

所以我用JDBC和mySQL连接到一个java应用程序中的测试mySQL数据库,一切正常。生产最终将在Oracle数据库上进行。看来我可以更改驱动程序和连接来完成这项工作。Oracle与JDBC的连接

我得到了这一点:/usr/local/oracle/product/10.1.0/client_1/bin/sqlplus -S用户/密码@服务@ something.sql

所以我假定这是怎么回事在本地访问。我也获得了主持人。所以我想连接的URL会转换为以下内容,我能够做到这一点:

String url = "jdbc:oracle:thin:user/[email protected]//host/SERVICE"

Connection c = DriverManager.getConnection(url);

,但这似乎并不奏效。我对@ something.sql部分感到困惑。我如何将其包含在我的连接网址中?在我当前的连接URL“jdbc:oracle:thin:user/password @ // host/SERVICE”中是否还有任何明显的错误?

+1

退房这个职位 - http://stackoverflow.com/questions/4832056/java-jdbc-how-to-connect-to-oracle-using-service-name-instead-of-sid – mazaneicha 2012-04-13 16:42:38

+0

我使用jdbc:oracle:thin:@host:1521:SERVICE语法,并提供用户名和密码分开。谢谢。 – 2012-04-13 19:09:00

回答

1

首先,sqlplus是一个来自Oracle的命令行工具,他们给了你一个例子,其中的值应该被替换为他们的例子。

如果你有一个名为“ababa”的用户有一个密码“芝麻”。假设该服务是服务器“瓶子”上的“精灵”。如果从命令行运行的SQL是“SELECT * FROM wishes LIMIT 3”,它位于名为“/tmp/wishes.sql”的文件中。

在命令行中,人们可以键入以下内容:

/usr/local/oracle/product/10.1.0/client_1/bin/sqlplus -S ababa/[email protected] @/tmp/wishes.sql 

从Java,一会叫:

Connection conn = DriverManager.getConnection("jdbc:oracle:thin://bottle/genie", 
               "ababa", 
               "sesame"); 
0

我通常不直接在我的代码中直接使用连接字符串,但看起来大部分是正确的。真正的问题是Oracle不是标准的,这就是为什么你在那里拥有愚蠢的@标志。

你也可能发现你的一些SQL也无法工作。那是因为Oracle有一些怪癖。在将其投入生产之前,您应该先对照Oracle数据库测试您的代码。

+2

没有像“标准”JDBC URL那样的东西。它**是**供应商特定的(根据定义)。顺便说一句:MySQL比Oracle有更多的怪癖(允许存储2月31日只是其中之一) – 2012-04-13 16:51:42

+0

哦,我确实在生产之前测试它。在代码中直接使用连接字符串的替代方法是什么? – 2012-04-13 19:08:42

+0

弹出JDBC的东西。 Apache dbUtils。还有其他几个可以为你抽象出JDBC的混乱的东西。 – 2012-04-17 16:49:31