where I should put jar file, in connection to remo

2019-09-14 17:24发布

问题:

I want to make a connection to the remote database ssh, in my java program, so I write a java code for this, I can ssh to the database server from my code but I can't access to the database, this is my out put which contains the error :

identity added
session created.
session connected.....
shell channel connected....
db Method...
try-catch
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:264)
        at Main.connectToDB(Main.java:68)
        at Main.main(Main.java:46)
Goodbye!
done

I run my .java class with this command ( I give both jsch and mysql-connector jar file, for running my class) and both jar files are in the folder that contains Main.java class

 java -cp .:mysql-connector-java-5.0.7-bin.jar.:jsch-0.1.54.jar Main

and here is my code

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

public class Main {

    public static void main(String[] arg) {
        try {
            JSch jsch = new JSch();
            String user = "server-username";
            String host = "server-Ip";
            int port = 22;
            String privateKey = "id_rsa";

            jsch.addIdentity(privateKey);
            System.out.println("identity added ");

            Session session = jsch.getSession(user, host, port);
            System.out.println("session created.");

            java.util.Properties config = new java.util.Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);

            session.connect();
            System.out.println("session connected.....");

            Channel channel = session.openChannel("sftp");
            channel.setInputStream(System.in);
            channel.setOutputStream(System.out);
            channel.connect();
            System.out.println("shell channel connected....");


           connectToDB();

          System.out.println("done");

        } catch (Exception e) {

              System.err.println(e);
}
    }        
            static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";


   static final String DB_URL = "jdbc:mysql://localhost:3306/DBname";

        static final String USER = "username";
        static final String PASS = "";

        public static void connectToDB() {
                System.out.println("db Method...");
                Connection conn = null;
                Statement stmt = null;
                try{
                        System.out.println("try-catch");
                        Class.forName("com.mysql.jdbc.Driver");

                        System.out.println("Connecting to database...");

                        conn = DriverManager.getConnection(DB_URL,USER,"");

                        System.out.println("hey!");
                        stmt = conn.createStatement();
                        String sql;
                        sql="SELECT * from test";
                        ResultSet rs = stmt.executeQuery(sql);


                        try (BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"))) {
                                while(rs.next()){
                                       String name = rs.getString("name");

                                        bw.write(name);
                                        bw.newLine();

                                        System.out.println(" name: " + name);
                                }
                                bw.close();
                        } catch (IOException e) {
                                e.printStackTrace();


                     }
                        rs.close();
                        stmt.close();
                        conn.close();
                }catch(SQLException se){
                        se.printStackTrace();
                }catch(Exception e){
                        e.printStackTrace();
                }finally{
                        try{
                                if(stmt!=null)
                                        stmt.close();
                        }catch(SQLException se2){
                        }
                        try{
                                if(conn!=null)
                                        conn.close();
                        }catch(SQLException se){
                                se.printStackTrace();
                        }
                }
                System.out.println("Goodbye!");
        }

I confused , I think maybe I should put both jar files in the db-server ? ( Now there are in the javacode-server in the folder of java code) Where I should put this jars,if I have to put them in the Database Server?