为什么没有数据库的URL,数据源是否正常工作?

时间:2014-12-20 04:27:01

标签: java jdbc derby

我想知道为什么我不需要为数据源对象指定URL。

这可能是另一回事,因为这里的大多数问题似乎都是为什么某些东西不起作用,但在这种情况下,它确实有效,但我不明白为什么。

我写了这段代码:

import javax.sql.DataSource;
import org.apache.derby.jdbc.ClientDataSource;
...

public class DataSourceFactory {

private static final transient Logger scribe = Logger.getLogger(MyUI.class.getName());

public static DataSource getDataSource() throws Exception {
    ClientDataSource ds = null;
    try {
        ds = new ClientDataSource();
        ds.setDatabaseName("capitalism");
        ds.setUser("alan");
        ds.setPassword("insecure");
    } catch (Exception e) {
        scribe.log(Level.SEVERE, "Mr Developer, you messed up", e);
    }
    return ds;
}

}

然后我使用了新的课程,期待出现问题:

public class MyUI extends UI {

    transient private FileHandler handler;
    private static final transient Logger scribe = Logger.getLogger(MyUI.class.getName());
    transient private DataSource ds;
    transient private Connection conn;

    protected void init(VaadinRequest vaadinRequest) {

    ...                
    try {
                ds = DataSourceFactory.getDataSource();
            } catch (Exception ex) {
                scribe.log(Level.SEVERE, "DataSource Didn't work", ex);
            }
            try {
                conn = ds.getConnection();
            } catch (SQLException ex) {
                scribe.log(Level.SEVERE, "Connection Didn't work", ex);
            }
            try {
                statement = conn.createStatement();
            } catch (SQLException ex) {
                scribe.log(Level.SEVERE, "Statement creation didn't work", ex);
            }
            String createSQL = "CREATE TABLE MYTABLE (FIRSTTHING VARCHAR(20), SECONDTHING VARCHAR(20))";
            try {
                statement.executeUpdate(createSQL);
            } catch (SQLException ex) {
                scribe.log(Level.SEVERE, "Statement didn't work", ex);
            }

但它并没有出错。它第一次工作。

在我开始处理数据源之前,即刚刚使用DriverManager时,我无法在没有数据库URL的情况下建立连接。我期待经历一个漫长的学习过程,找出如何让DataSource识别数据库,用JNDI注册它以及教程告诉你的所有内容,例如http://docs.oracle.com/javase/tutorial/jdbc/basics/connecting.html

相反,它只是找到了它。

我正在使用NetBeans 8.0.1,并创建了资本主义'数据库作为嵌入式JDBC数据库。对于它的价值,这个数据库的属性对话框说URL是jdbc:derby:// localhost:1527 / capitalism [alan on ALAN],它在我执行代码时运行。我能想到的唯一其他相关信息是,这是在vaadin项目中运行的。

我认为这是一个不寻常的问题,可以问为什么有效,但我想知道,因为如果我不知道它为什么有效,我就无法将其可靠地转移到工作中上下文。

1 个答案:

答案 0 :(得分:1)

大多数特定于数据库系统的DataSource实现默认为localhost和该数据库系统的默认端口。您不需要设置JDBC url,因为这些数据源是使用hostname,databasename等各个元素的属性配置的(它们通常甚至没有整个url的属性!)。

因此,如果您的数据库在localhost上运行,您只需要设置数据库名称,用户名和密码,数据源将知道如何连接。