Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为数据库提供Java.jar文件?_Java_Database_Jdbc - Fatal编程技术网

为数据库提供Java.jar文件?

为数据库提供Java.jar文件?,java,database,jdbc,Java,Database,Jdbc,我想创建一个程序,用户只需运行一个.jar文件即可运行该程序。我希望这个程序能够访问一个数据库,当程序第一次下载时,数据库中会预先填充一些数据,当用户使用它时,会向数据库中添加更多的数据 数据库应本地存储在用户计算机上 我的最佳选择是什么?我应该使用哪个数据库引擎,我必须做些什么才能让用户在安装应用程序时不必设置数据库,它将预先填充.jar文件?使用,然后当用户第一次启动程序时,将脚本加载到数据库中。我会研究它。这是一个很棒的数据库,有很多持久化选项。此外,由于您使用java,我会考虑查看Hib

我想创建一个程序,用户只需运行一个.jar文件即可运行该程序。我希望这个程序能够访问一个数据库,当程序第一次下载时,数据库中会预先填充一些数据,当用户使用它时,会向数据库中添加更多的数据

数据库应本地存储在用户计算机上


我的最佳选择是什么?我应该使用哪个数据库引擎,我必须做些什么才能让用户在安装应用程序时不必设置数据库,它将预先填充.jar文件?

使用,然后当用户第一次启动程序时,将脚本加载到数据库中。

我会研究它。这是一个很棒的数据库,有很多持久化选项。此外,由于您使用java,我会考虑查看Hibernate。

< P>一个简单的解决方案是使用本地存储在磁盘上的嵌入式数据库(例如JAR文件附近)。您可以使用,甚至可以用于此

加载时,程序将检查数据库是否存在,如果不在这里,只需播放一个安装SQL脚本,该脚本将创建数据库结构和初始数据,否则就可以开始了,只需执行创建应用程序时要执行的操作

下面是h2数据库的一个非常简单的示例:

假设您正在JAR的
/resources/
文件夹中打包一个名为
init.SQL
的SQL文件,该文件将创建一个表,类似于:

create table foobar(bazz VARCHAR);
insert into foobar values('foo');
insert into foobar values('bar');
// and so on
然后,在代码中的某个地方,在需要访问数据的地方,您将尝试加载数据库或创建它(如果它还不存在)

Connection loadDatabase() throws Exception {
    Class.forName("org.h2.Driver");
    Connection con = null;
    try {
        // throws an exception if the database does not exists
        con = DriverManager.getConnection("jdbc:h2:./foo.db;ifexists=true");
    } catch (SQLException e) {
        // if the database does not exists it will be created
        conn = DriverManager.getConnection("jdbc:h2:./foo.db");
        // init the db
        initDatabase(con);
    }

    return con;
}

void initDatabase(Connection con) throws Exception {
    // load the init.sql script from JAR
    InputStreamReader isr = new InputStreamReader(
        getClass().getResourceAsStream("/resources/init.sql"));
    // run it on the database to create the whole structure, tables and so on
    RunScript.execute(con, isr);
    isr.close();
}

void doSomeStuffWithDb() throws Exception {
    Connection con = loadDatabase();
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("select * from foobar");
    // will print foo, then bar
    while (rs.next()) {
        System.out.println(rs.getString(1));
    }
    rs.close();
    stmt.close();
    conn.close();
}
执行后,在应用程序旁边应该有一个名为
foo.db
的文件,其中包含创建的表等


这是一个非常简单的示例,当然,您可以使用JDBC周围的任何包装器来避免使用ResultSet等,如spring jdbcTemplate,甚至可以加载连接实例等。

搜索内存中的数据库,您可以在java文件中启动这些数据库itself@Reddy不内存中将存储太多数据。@LuiggiMendoza是否必须安装它?请看这里:SQLite将有点棘手,因为它是本机代码。或者是否有某种预先打包的跨平台部署向导?是的,关于SQLite你说得对,我没有真正意识到,因为它已经安装在我的开发机器上,但是是的,如果他不想让用户参与安装其他东西,他应该更喜欢h2。有时,我也会遇到这样的问题:软件是由有帮助的系统管理员安装在我的机器上的,但我没有意识到这些软件并非无处不在!