将 netbeans 中的数据库移动到另一台计算机
Moving a database in netbeans to another computer
我在 netbeans 中做了一个相当小的 java 程序,数据库保存在 database/mainUserData 下的 scr 文件夹中,在我的主电脑上,如果我将它导出到 .jar 文件夹,它有效,如果我将文件夹中的所有数据(70mb 的价值)复制到另一台电脑,它再也找不到数据库,我确保添加始终使用 jar 文件夹中的当前目录的代码作为 url 到数据库,这是连接代码:
myconObj = DriverManager.getConnection("jdbc:derby://localhost:1527/MainUserData", "jacovanstryp", "Password1234");
为什么当我将它移动到另一台计算机时(整个文件,它不再知道数据库在哪里?
我尝试过的:
URL url = this.getClass().getResource("/com/vanstryp/res/Database/MainUserData"); // This is the same directory as where the .jar is located
这只是 returns 空。
这是最上面的错误代码吧returns
java.sql.SQLNonTransientConnectionException: java.net.ConnectException : Error connecting to server localhost on port 1,527 with message Connection refused: connect.
这是我使用的方法的代码
public boolean checkLogin(String username, String password) {
try {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
//This code will connect the database to the java program
//Information to connect database obtained from --> https://www.youtube.com/watch?v=c7RZV4VLv3s
Connection myconObj = null; //allows to connect to database
Statement mystatObj = null; // create statement (Execute queries)
ResultSet myresObj = null; // get result
ResultSetMetaData mymeta = null;
try {
String query = "select * from JACOVANSTRYP.MAINUSERDATA";
URL databaseLocation = this.getClass().getResource("/com/vanstryp/database/MainUserData/");
myconObj = DriverManager.getConnection("jdbc:derby:/" + databaseLocation, "jacovanstryp", "Eduplex1234");
mystatObj = myconObj.createStatement();
myresObj = mystatObj.executeQuery(query);
mymeta = myresObj.getMetaData();
int colomnNo = mymeta.getColumnCount();
while (myresObj.next()) {
String dbUsername = myresObj.getString("Username");
String dbPassword = myresObj.getString("Password");
System.out.println();
if (username.equalsIgnoreCase(dbUsername) && password.equals(dbPassword)) {
PrintWriter activeUser = new PrintWriter(new FileWriter("activeUser.db"));
activeUser.println(dbUsername);
activeUser.close();
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
} catch
(ClassNotFoundException ex) {
Logger.getLogger(commonMethods.class.getName()).log(Level.SEVERE, null, ex);
}
return false;
}
这一行:
myconObj = DriverManager.getConnection("jdbc:derby://localhost:1527/MainUserData", ...);
使用 "jdbc:derby://localhost:1527/MainUserData"
的连接字符串。这意味着您已经在侦听端口 1527 的计算机上设置(可能通过 Netbeans)Derby 服务器。
复制一个 jar 和支持数据库的文件是不够的:您必须在新主机上启动 Derby 服务器或使用旧主机上的服务器:
myconObj = DriverManager.getConnection("jdbc:derby://other.host.full.name:1527/MainUserData", ...);
或者,您可以使用 Derby 的 embedded 模式。然后你只需要声明哪个文件夹包含数据库文件:
myconObj = DriverManager.getConnection("jdbc:derby:/path/to/MainUserData", ...);
在此模式下,您只需将 jar(及其可选的其他文件)和数据库都复制到新系统,如果您提供正确的路径,它应该会找到数据库。
我在 netbeans 中做了一个相当小的 java 程序,数据库保存在 database/mainUserData 下的 scr 文件夹中,在我的主电脑上,如果我将它导出到 .jar 文件夹,它有效,如果我将文件夹中的所有数据(70mb 的价值)复制到另一台电脑,它再也找不到数据库,我确保添加始终使用 jar 文件夹中的当前目录的代码作为 url 到数据库,这是连接代码:
myconObj = DriverManager.getConnection("jdbc:derby://localhost:1527/MainUserData", "jacovanstryp", "Password1234");
为什么当我将它移动到另一台计算机时(整个文件,它不再知道数据库在哪里?
我尝试过的:
URL url = this.getClass().getResource("/com/vanstryp/res/Database/MainUserData"); // This is the same directory as where the .jar is located
这只是 returns 空。
这是最上面的错误代码吧returns
java.sql.SQLNonTransientConnectionException: java.net.ConnectException : Error connecting to server localhost on port 1,527 with message Connection refused: connect.
这是我使用的方法的代码
public boolean checkLogin(String username, String password) {
try {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
//This code will connect the database to the java program
//Information to connect database obtained from --> https://www.youtube.com/watch?v=c7RZV4VLv3s
Connection myconObj = null; //allows to connect to database
Statement mystatObj = null; // create statement (Execute queries)
ResultSet myresObj = null; // get result
ResultSetMetaData mymeta = null;
try {
String query = "select * from JACOVANSTRYP.MAINUSERDATA";
URL databaseLocation = this.getClass().getResource("/com/vanstryp/database/MainUserData/");
myconObj = DriverManager.getConnection("jdbc:derby:/" + databaseLocation, "jacovanstryp", "Eduplex1234");
mystatObj = myconObj.createStatement();
myresObj = mystatObj.executeQuery(query);
mymeta = myresObj.getMetaData();
int colomnNo = mymeta.getColumnCount();
while (myresObj.next()) {
String dbUsername = myresObj.getString("Username");
String dbPassword = myresObj.getString("Password");
System.out.println();
if (username.equalsIgnoreCase(dbUsername) && password.equals(dbPassword)) {
PrintWriter activeUser = new PrintWriter(new FileWriter("activeUser.db"));
activeUser.println(dbUsername);
activeUser.close();
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
} catch
(ClassNotFoundException ex) {
Logger.getLogger(commonMethods.class.getName()).log(Level.SEVERE, null, ex);
}
return false;
}
这一行:
myconObj = DriverManager.getConnection("jdbc:derby://localhost:1527/MainUserData", ...);
使用 "jdbc:derby://localhost:1527/MainUserData"
的连接字符串。这意味着您已经在侦听端口 1527 的计算机上设置(可能通过 Netbeans)Derby 服务器。
复制一个 jar 和支持数据库的文件是不够的:您必须在新主机上启动 Derby 服务器或使用旧主机上的服务器:
myconObj = DriverManager.getConnection("jdbc:derby://other.host.full.name:1527/MainUserData", ...);
或者,您可以使用 Derby 的 embedded 模式。然后你只需要声明哪个文件夹包含数据库文件:
myconObj = DriverManager.getConnection("jdbc:derby:/path/to/MainUserData", ...);
在此模式下,您只需将 jar(及其可选的其他文件)和数据库都复制到新系统,如果您提供正确的路径,它应该会找到数据库。