每次手动为软件创建新数据库,同时将其分发给新用户?

时间:2015-05-06 08:45:40

标签: java mysql database phpmyadmin

我使用java创建了一个基于桌面的商店管理软件,它将保存每个产品细节,并通过互联网(phpmyadmin)在数据库中销售特定商店的历史记录。我创建了一个连接器类,并提供连接到数据库的数据库名称的路径。问题是,对于每个不同的商店,我需要创建一个不同的数据库。如果我制作我的软件的.exe文件或安装文件并将其分发给用户,我将如何通过安装过程为每个用户(在本例中为每个商店)创建不同的数据库。有没有办法动态地执行此操作,或者我必须每次创建数据库,然后再将其分发给新用户(实际上是为新商店)?

提前致谢, 我从不制作商业软件。这对我来说是新的。

注1:让我解释一下我的问题, 首先来看看我的连接器类

public class ispConnect {
static Connection connection;

public static Connection connecterDb(){
    try{
        Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection("jdbc:mysql://ServeName/DatabaseName","root","");
        System.out.println("Connection Established!");
        return connection;
    }catch(Exception e){
            System.out.print("Connection Failed!");
            return null;
    }
}

这是连接数据库“DatabaseName”的连接器类。现在,如果我创建安装程序文件,我无法更改“DatabaseName”。假设我有两个客户X,Y两者都需要我的申请。对于他们两个我需要创建两个数据库名称 - 让X的DatabaseName1和Y的DatabaseName2,否则他们的数据将保存到同一个数据库 - “DatabaseName”。现在我的问题是我是否必须每次为每个客户手动更改数据库名称,然后在将应用程序交付给他们之前再次安装安装程序,或者还有其他选项可以执行此操作!

2 个答案:

答案 0 :(得分:2)

是的,可以动态创建数据库。 SQL语言允许这样做,您可以使用java调用SQL表达式。

在SQL中创建数据库MyDatabase,您需要调用:

CREATE DATABASE MyDatabase

在java中,您可以使用以下代码执行此操作:

Connection conn = DriverManager.getConnection("jdbc:mysql://databasehost/?user=root&password=rootpassword"); 
Statement statement = conn.createStatement();
int result=statement.executeUpdate("CREATE DATABASE MyDatabase");

请注意,SQL是强大的语言,您还可以添加/删除用户,授予/撤消访问权限等。您可以使用Java代码调用SQL表达式。

检查此链接以获取MySQL SQL参考:http://dev.mysql.com/doc/refman/5.6/en/sql-syntax.html

更新№1:

请注意,databasehostroot用户名和密码不应该是硬编码的。您的应用程序应在首次启动时询问此信息,以生成数据库。

<小时/> 更新№2:

如果您为您的应用程序向客户提供MySQL服务器基础结构,并且客户无需在其计算机上部署和使用单独的独立MySQL实例,那么您需要采用不同的方法。

在为您的应用程序销售许可证后,使用客户提供的信息自动生成(例如使用PHP)MySQL数据库。之后,为您的客户提供用户名/密码和数据库名称以访问您的服务器。

当您的应用程序启动时,它会询问这些数据库名称,用户名/密码,客户在启动时指定此信息并开始使用您的产品。

作为提供更多便利的选项,因为您已生成服务器数据库,用户名和密码,请将此信息保存在(加密)设置文件中,并将其与应用程序一起提供,客户将要下载。

<小时/> 更新№3

不要将数据库名称,登录名和密码硬编码到java代码中。声明变量:

String dbName;
String username;
String password;

并使用这些变量连接到您的数据库,如:

connection = DriverManager.getConnection("jdbc:mysql://ServeName/" + dbName, username, password);

将dbName,用户名和密码存储在separate text file中,并将您的Java代码设为read this text file,以填充dbNameusernamepassword个变量。

当用户要下载购买的软件时,您可以生成此文本文件(也称为Java Properties file)。在服务器端,您使用PHP,应生成数据库,用户名和密码,并将此信息(dbName,用户名和密码)写入文本文件。

您可以使用PHP创建和填充文本文件。这是教程: http://www.w3schools.com/php/php_file_create.asp

创建文本文件后,您可以将其与exe文件一起压缩,也可以使用PHP,这里是简短的方法:Creating .zip file

希望这会有所帮助:)

答案 1 :(得分:0)

您可以捆绑创建所需数据库结构的脚本,因此,简而言之,当您的应用程序将尝试连接到数据库并且找不到数据库时,它将运行预定义的脚本,该脚本将创建所有必要的结构。

每当应用程序无法找到数据库时,您可以扩展上述功能以创建数据库,但是,如果您选择此选项,我建议首先向用户显示弹出窗口,通知他们发生了什么,你会做什么。