jsch를 통해 실행하면 자바 프로그램과 mariadb 연결이 되지 않습니다.
그래서 저는 제 PC의 비주얼 스튜디오 코드에서 jsch를 통해 raspberryPi에서 자바 프로그램을 시작하려고 합니다.프로그램은 mariadb 데이터베이스에 연결되어 간단한 Select 문을 수행합니다.
제가 라즈베리파이에 로그인되어 있으면 퍼티를 통해 자바 프로그램과 mariadb 연결이 잘 됩니다.jsch로 다른 자바 프로그램을 통해 프로그램을 실행하려고 하면 프로그램이 시작되지만 라인이 실행되지 않습니다.connection = verbindung_datenbank.getConnection(dbURL, user, password);
제가 좀 놓았습니다.System.out.println();
프로그램이 작동을 중지하는 선을 찾을 수 있는 선.라인이 작동하기 전에는 작동하지 않았고, 그 이후에는 작동하지 않았습니다.제가 이해할 수 없는 것은 오버퍼티에 로그인하면 프로그램이 작동하지만 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는 다른 bash 파일을 사용해서 내 프로그램이 작동하지 않았습니다.내 솔루션:내가 작은 bash 스크립트를 프로그래밍했습니다.
#!/bin/bash
export CLASSPATH=/home/pi/Documents/Java/mariadb-java-client-2.7.3.jar:.
java connection_db
실행 명령을 java connection_db에서 bash 스크립트로 변경하여 이제 모든 것이 정상적으로 작동합니다.
언급URL : https://stackoverflow.com/questions/70501054/connection-between-java-program-and-mariadb-wont-work-if-it-is-executed-via-jsc
'sourcecode' 카테고리의 다른 글
따옴표가 있는 URL을 표시하는 입력 필드 (0) | 2023.10.20 |
---|---|
쉼표로 구분된 목록 MySQL에서 항목 수를 세는 방법 (0) | 2023.10.20 |
SQL에서 출력을 정수로 선택/캐스팅 (0) | 2023.10.20 |
PowerShell에서 객체의 여러 항목을 합산하는 방법? (0) | 2023.10.20 |
PowerShell에서 점(.)과 앰퍼샌드(&)의 차이점은 무엇입니까? (0) | 2023.10.15 |