sourcecode

jsch를 통해 실행하면 자바 프로그램과 mariadb 연결이 되지 않습니다.

codebag 2023. 10. 20. 13:37
반응형

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

반응형