- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题:如何将我在 Windows 7 计算机上编写的 Java 应用程序连接到同一台计算机上的 ScotchBox Vagrant box?
我是 Java 的 super 新手。我已经使用 PHP 编写代码两年了,我的团队将在接下来的几个月内切换到 Java。为了更好地理解 Java,我想我会尝试连接到数据库、运行查询并在 Eclipse 中迭代结果。 (特别是 Spring,但我还没有为此使用它。现在只是简单的 Java。)在部署到生产环境之前,我有一个用于本地开发的 Vagrant ScotchBox(LAMP 堆栈)。我在使用这个 Vagrant Box 方面处于中等水平。
在为 Java 下载了 MySQL 驱动程序,将它们放在 Eclipse 项目的 lib 文件夹中,并将它们添加到类路径中后,我运行了以下代码,它可以很好地连接到我的生产数据库:
//import java SQL library
import java.sql.*;
//main class
public class App {
//main method
public static void main(String[] args) {
//You have to put this whole thing in a try { } catch { }
try {
//Connection strings (Changed for this post)
String db = "jdbc:mysql://123.456.78.90:3306/db_name";
String user = "username";
String pwd = "password";
//1. Get connection to database
Connection myConn = DriverManager.getConnection(db, user, pwd);
//2. Create statement
Statement myStmt = myConn.createStatement();
//3. Execute SQL query
ResultSet myRs = myStmt.executeQuery("SELECT * FROM people");
//4. Process result set
while (myRs.next()) {
System.out.println(myRs.getString("firstName") + ", " + myRs.getString("lastName"));
}
}
//Exception handling
catch (Exception exc) {
exc.printStackTrace();
}
}
}
当我将 IP 地址更改为用于 ScotchBox 的默认地址时...
String db = "jdbc:mysql://192.168.33.10:3306/db_name";
...我收到以下错误;
[REMOVED - SEE UPDATE BELOW PLEASE]
请记住,我本地 ScotchBox Vagrant Box 上的数据库在名称、表和列方面与我的生产数据库完全相同。用户名和密码也相同。
我已经尝试了一些方法来解决这个问题。
当我使用 HeidiSQL(安装在我的 Windows 计算机上)连接到我的 ScotchBox 数据库时,我使用 127.0.0.1。所以我尝试在我的 Java 代码中使用 127.0.0.1 而不是 192.168.33.10,即 String db = "jdbc:mysql://127.0.0.1:3306/db_name";
。那没有用。
我尝试在我的 ScotchBox 上的 /etc/mysql/my.cnf 中打开权限。在显示 bind-address = 127.0.0.1
的行中,我将 IP 地址更改为 0.0.0.0
然后重新启动 mysql 和 apache,但没有用。所以我用#号注释掉整行,然后重启mysql和apache。那也没有用。
我执行了上述操作,同时还进入了 HeidiSQL 中的用户权限并添加了主机 %
的 user,然后重新启动了所有内容。那没有用。因此,我随后将主机添加为 user 作为我的 Window 计算机的 IP 地址(通过运行 Powershell 然后通过 ipconfig 获得)。然后重新启动一切。那没有用。
我假设值得注意的是,当您使用 ScotchBox 的 MySQL 数据库时,您必须使用网络类型 SSH 隧道登录。它需要 MySQL 用户名和密码,然后是带有 SSH 主机的 SSH 用户名和密码,以及一个叫做 plink 文件的东西。我不确定这是否与此有关。
我没有想法和谷歌搜索。我相当有信心这与 Java 关系不大,而与 MySQL 中某处的权限关系更大,但我只是不知道或没有足够的知识在用尽所有其他已知选项后弄清楚它。
请帮忙!
更新
我已将 JSch / jcraft 添加到我的项目中,我认为这是我需要进入的方向。但是,我仍然遇到连接问题。
我正在使用 Vagrant ScotchBox 页面中的所有 MySQL 信息,该页面位于页面底部的 HERE。
以下是我更新后的代码,其中包含我遇到的新错误。
//import java SQL library
import java.sql.*;
import com.jcraft.jsch.*;
//main class
public class App {
//main method
public static void main(String[] args) {
//You have to put this whole thing in a try { } catch { }
try {
int lport;
String rhost;
int rport;
JSch jsch = new JSch();
Session session = jsch.getSession("vagrant", "192.168.33.10", 0);
lport = 3307;
rhost = "localhost";
rport = 3306;
session.setPassword("vagrant");
session.setConfig("StrictHostKeyChecking", "no");
System.out.println("Establishing Connection...");
session.connect();
int assinged_port=session.setPortForwardingL(lport, rhost, rport);
System.out.println("localhost:"+assinged_port+" -> "+rhost+":"+rport);
//Connection strings
String db = "jdbc:mysql://192.168.33.10:3306/ug_warehouse";
String user = "root";
String pwd = "root";
Connection myConn = null;
//1. Get connection to database
myConn = DriverManager.getConnection(db, user, pwd);
//2. Create statement
Statement myStmt = myConn.createStatement();
//3. Execute SQL query
ResultSet myRs = myStmt.executeQuery("SELECT * FROM user");
//4. Process result set
while (myRs.next()) {
System.out.println(myRs.getString("firstname") + ", " + myRs.getString("lastname"));
}
}
//Exception handling
catch (Exception exc) {
exc.printStackTrace();
}
}
}
-
Establishing Connection...
com.jcraft.jsch.JSchException: java.net.ConnectException: connect: Address is invalid on local machine, or port is not valid on remote machine
at com.jcraft.jsch.Util.createSocket(Util.java:349)
at com.jcraft.jsch.Session.connect(Session.java:215)
at com.jcraft.jsch.Session.connect(Session.java:183)
at App.main(App.java:23)
Caused by: java.net.ConnectException: connect: Address is invalid on local machine, or port is not valid on remote machine
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at com.jcraft.jsch.Util.createSocket(Util.java:343)
... 3 more
我觉得这是我要走的正确道路。知道我在做什么/输入错误吗?我觉得我只是不了解端口的去向。
最佳答案
当您使用 HeidiSQL 连接时,您通过 SSH 隧道连接到 mysql 服务器,并使用您拥有的用于 VM 框的 key 。这对您来说(或多或少)是透明的,您只需连接到您的 mysql 服务器即可。
当您编写 Java 程序时,您实际上想要做同样的事情,但这不是您使用 "jdbc:mysql://123.456.78.90:3306/db_name"
您正在直接连接到服务器。
话虽如此,您可能需要进行更多 Java 编码(这对您有好处,但不确定您是否会长期使用它)。 Java 中最著名的管理 SSH 连接的库是 http://www.jcraft.com/jsch/。还有一个很好的 blog post 关于让它工作。
关于java - 将 Windows/Eclipse 中的 Java 连接到 ScotchBox Vagrant Box MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34317972/
考虑这样的代码: trait Foo { fn foo(&self); } fn consume_func(b: Box>) { unimplemented!(); } fn prod
考虑这样的代码: trait Foo { fn foo(&self); } fn consume_func(b: Box>) { unimplemented!(); } fn prod
我不明白在 Rust 中,当我们 Box 父结构时,结构中的结构发生了什么。 struct Outer1 { child: Inner1, } struct Inner1 { n: i
我将开始开发一个新网站,并准备处理浏览器用于计算元素宽度和高度的不同方法 (box model stuff)。不知何故,我想到了:如果我只是将 box-sizing 应用于网站中的所有元素会怎么样?
在 java 应用程序中使用 box java sdk 访问 box api 时,我遇到了下面提到的错误。请指出此问题的原因。 Exception in thread "main" com.box.s
计算盒子的宽高时,outline width like outline: 5px dashed red; 如果 box-sizing:border-box,框的宽度/高度是否会考虑轮廓? 最佳答案 我
读完the subtyping chapter of the Nomicon ,我无法理解类型参数的协方差。特别是对于 Box类型,描述为:T is covariant . 但是,如果我写这段代码:
给定这段代码: trait Trait {} struct Child; impl Trait for Child {} struct Father { child: &'a Box, } i
与文件 chooser for dropbox 类似,box.com 有没有? 最佳答案 Box 目前不维护自己的“文件选择器”;然而,有一个很棒的服务叫做 filepicker.io,它充当几乎所有
感谢您对我的问题的回复:Is this a bug of Box API v2 when getting events 这是一个与此相关的新问题。问题是我不能可靠地使用从以前的调用中获得的 next_
我试图让 Box Enterprise API 使用 As-User 工作。我有一个管理员帐户,我用它来尝试检索子帐户中的内容。 我首先使用管理员帐户检索子帐户的用户ID。并将用户 ID 添加为字段“
我想在一个简单的导轨中本地查看我的 Box 帐户中的图像 app .目标是使用这些图像进行幻灯片放映。我寻找必要的参数来传递每个图像相关 url成标签。看来我只能下载图像,或从 Box 应用程序中查看
这个问题在这里已经有了答案: Why doesn't Rust support trait object upcasting? (5 个答案) 关闭 4 年前。 给定代码 trait Base {
所以基本上我尝试从https://github.com/Gor-Ren/gym-jsbsim转换这个自定义健身房环境。使用farama基金会的gymnasium api。这是我正在处理的存储库:htt
我是BOX API的新手,因此正在使用API的v2。我正在从我的应用程序本地进行REST调用。 我想上传一个以前可能上传或未上传的文件。我知道父文件夹ID和文件名。我需要覆盖现有文件,或者至少要再
我已被授予访问(协作)文件夹的权限。我需要的是每天访问该文件夹并从中获取文件。现在我生成的开发者 token 将在 1 小时后过期。有什么办法可以得到authorization code没有第一站,它
我正在尝试将 Box 中上传的文件与另一个外部系统同步。我使用哪些 API 来获取“在给定 dd/mm/yy hh:mm:ss 后上传/更新的所有文件的列表”? 干杯! 最佳答案 我认为User Ev
Vagrant 文档和 CLI 使用术语“box”和“base box”。命名意味着基本框是一种特定类型的框,但是,这些术语似乎被用作同义词。 Vagrant“盒子”和 Vagrant“基础盒子”之间
Box 允许您为文件夹创建标签,但如何从 API 中获取该信息?我在 GET /folders/{id} API 中没有看到标签返回.标签也不被视为元数据。 最佳答案 如果你看看 Fields wri
我正在尝试确定应该使用哪个版本的 Box api。我的决定取决于 v1 api 的 EOL 时间线。我不想完成我的应用程序,就在应用程序发布之前(或之后不久),v1 api 停止工作。 我很乐意使用
我是一名优秀的程序员,十分优秀!