如何使用tnsname从Ant连接到Oracle数据库?

zak*_*vdm 5 ant oracle jdbc

我正在寻找类似于Ant sql任务的东西,但是它将接受格式的JDBC url:

JDBC:预言:瘦:@TNS_NAME

一种可能的方法似乎是编写我自己的Ant任务,该任务使用OracleDataSource来创建Connection,但有没有办法直接在Ant中执行此操作?

编辑: 感谢你们的答复到目前为止.我希望如果我详细说明我得到的错误会有所帮助.

我的Ant任务看起来如下:

<target name="MyTarget" >
    <property name="oracle.net.tns_admin" value="/opt/oracle/product/10.2.0.1/NETWORK/ADMIN" />
    <property name="jdbc.driver" value="ojdbc5.jar" />
    <property name="jdbc.i18n.support" value="orai18n.jar" />
    <property name="jdbc.driver.class" value="oracle.jdbc.OracleDriver" />
    <path id="sql.class.path">
        <pathelement location="${jdbc.driver}" />
        <pathelement location="${jdbc.i18n.support}" />
    </path>

    <sql driver="${jdbc.driver.class}" url="jdbc:oracle:thin:@THE_TNS_NAME" userid="USER" password="PASSWORD" classpathref="sql.class.path" >
        <![CDATA[
        #SOME ARBITRARY SQL HERE
        ]]>
    </sql>
</target>
Run Code Online (Sandbox Code Playgroud)

这失败并出现错误:

java.sql.SQLException:Io异常:指定了未知主机

用"jdbc:oracle:thin:@HOST:PORT:INSTANCE"替换url工作正常,我也可以调整上面使用的tns名称,所以我知道它是有效的.

Dou*_*ter 6

今天刚刚和这个人一起工作,偶然发现了失踪的一块.需要将TNS位置设置为系统属性,如下所示:Oracle瘦JDBC到TNS名称

要建立与TNS别名(tnsname)的Oracle瘦JDBC连接,请确保将oracle.net.tns_admin系统属性传递给JVM.它的值应该是tnsnames.ora文件所在的目录.之后,您只需传递TNS别名来代替JDBC URL中的主机名.

例如,如果您只是尝试连接到jdbc:oracle:thin:@MYDB,它位于您的tnsnames.ora文件中,您将获得一个SQLException,其中包含Io异常的详细消息:指定了未知主机.如果使用-Doracle.net.tns_admin =/oracle/10g/NETWORK/ADMIN启动JVM,或在启动后使用System.setProperty(String,String),则将成功建立连接.

完成此操作后,我能够仅使用TNS别名成功连接.