【发布时间】:2017-01-03 17:34:52
【问题描述】:
我的计算机上有一个用于测试的简单数据库,我正在尝试从我的笔记本电脑上的数据库中检索一些信息。所以我希望我的笔记本电脑请求查看我的计算机 MySQL 数据库中的信息。下面显示了我试图在我的笔记本电脑上运行的 java 代码,以收集学生表中的第一个条目,该表位于我的计算机上。
我的笔记本电脑和电脑上都安装了 MySQL 工作台,如果电脑将存储数据而笔记本电脑只提取数据,是否需要同时在两台机器上。
到目前为止,我从研究中了解到,应该在 url 中使用公共 ip 而不是计算机的 ip,所以我添加了它,但我收到了 CommunicationsException 以及“连接超时”堆栈跟踪。我已经阅读了this 答案和this 对类似问题的答案,但是我很难理解这两种解决方案,有人可以向我推荐使用 MySQL 从数据库远程访问数据的初学者指南。
public class TestRemote{
//JDBC variables
Connection connection;
Statement statement;
ResultSet resultSet;
//String variables
String url;
String user;
String password;
public static void main(String[] args) {
TestRemote sql = new TestRemote();
ArrayList<String> firstnames = sql.getColumn("students", "firstname", "studentid=4");
System.out.println(firstnames.get(0));
}
// Constructor
public TestRemote()
{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("couldnt find class");
}
url = "jdbc:mysql://81.159.3.167:3306/test"; //?autoReconnect=true&useSSL=false";
user = "user";
password = "pass123";
connection = null;
statement = null;
resultSet = null;
}
private void closeConnection(){
try{
if(connection != null)
connection.close();
if(statement != null)
statement.close();
if(resultSet != null)
resultSet.close();
connection=null; resultSet=null; statement=null;
}catch(Exception e){
e.printStackTrace();
}
}
public ArrayList<String> getColumn(String table, String column, String where) {
ArrayList<String> resultsArray = new ArrayList<String>();
try {
connection = DriverManager.getConnection(url, user, password);
statement = connection.createStatement();
if(!where.equals(""))
resultSet = statement.executeQuery("SELECT "+column+" FROM "+table + " WHERE "+where);
else
resultSet = statement.executeQuery("SELECT "+column+" FROM "+table);
while(resultSet.next()) {
String val = resultSet.getString(1);
if(val==null)
resultsArray.add("");
else
resultsArray.add(val);
}
//resultsArray = (ArrayList<String>) resultSet.getArray(column);
} catch (SQLException ex) {
Logger lgr = Logger.getLogger(Model.class.getName());
lgr.log(Level.SEVERE, ex.getMessage(), ex);
}
closeConnection();
return resultsArray;
}
}
【问题讨论】:
-
两台笔记本电脑都安装了 MySQL 工作台 - 您需要连接 MySQL 数据库,而不是工作台。此外,只有一个很好。第二个可以使用它的 IP 地址通过同一网络访问它。
标签: java mysql remote-access