【发布时间】:2021-12-27 22:27:26
【问题描述】:
因此,我尝试通过我电脑上的 Visual Studio 代码中的 jsch 在 raspberryPi 上启动 Java 程序。该程序连接到 mariadb 数据库并执行一个简单的 Select 语句。
如果我通过 putty 登录 raspberryPi,java 程序和 mariadb 之间的连接工作正常。如果我尝试通过另一个带有 jsch 的 java 程序执行该程序,该程序将启动但不会执行行 connection = verbindung_datenbank.getConnection(dbURL, user, password);
我放置了一些System.out.println(); 行来查找程序停止工作的行。在它工作的线路之前,它没有。
我不明白的是,为什么我通过putty登录程序可以工作,但如果通过SSH登录程序就不能工作?
这里是完整的代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.io.*;
import java.sql.*;
public class connection_db {
public static Connection getConnection(String dbURL, String user, String password) throws SQLException {
Connection connection = DriverManager.getConnection(dbURL, user, password);
connection.setAutoCommit(true);
return connection;
}
public static void main(String[] args) {
Connection connection = null;
Integer aId=null;
String dbURL = "jdbc:mariadb://192.168.178.39:3306/temperature";
String user = "pi";
String password = "test";
try {
connection = verbindung_datenbank.getConnection(dbURL, user, password);
String query = "SELECT MAX(id) FROM table1" ;
System.out.println(query);
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
while(rs.next())
{
Integer id = rs.getInt("MAX(id)");
System.out.println(id);
aId = id;
}
double temperature = -15;
String query2 = "UPDATE table1 SET theke_1 = "+temperature +" WHERE id = "+ aId;
System.out.println(query2);
Statement stmt2 = connection.createStatement();
stmt2.executeQuery(query2);
stmt2.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// connection.close();
}
}
}
希望有人可以帮助我。
编辑: jsch程序的代码:
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
public class main_slave {
public static void main(String[] args) throws JSchException, InterruptedException, IOException{
String host = "192.168.178.46";
String user = "pi";
String password = "password";
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, 22);
session.setUserInfo(new main_slaveUserInfo(user, password));
session.connect();
Channel channel = session.openChannel("exec");
InputStream in = channel.getInputStream();
((ChannelExec) channel).setCommand("java
connection_db");
channel.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while((line = reader.readLine()) != null) {
System.out.println(line);
}
channel.disconnect();
session.disconnect();
}
}```
【问题讨论】:
-
"如果我尝试通过另一个带有 jsch 的 java 程序执行该程序..." 另一个使用 jsch 的程序的代码在哪里?当您的代码到达
getConnection()行时会发生什么?你说它停止工作,但实际发生了什么?您是否收到错误消息或异常?错误说明了什么? -
您好,添加了代码,第二点是我的问题。我没有收到任何消息或异常。我知道在那一行发生了一些事情的唯一原因是,我在该行之后放置了一个
System.out.println("1")和System.out.println("2"),并且只得到了 1 作为终端输出。 -
没听说过 plink,试试看。新行不在我的程序中,不知道为什么stackoverflow会这样显示。
-
我尝试通过 ssh 脚本连接另一个 pi,现在我收到消息:没有找到适合 jdbc:mariadb 的驱动程序....所以它不会使用.bashrc 的类路径?这可以解释为什么它不起作用