我应该把jar文件连接到远程数据库,ssh,java.lang.ClassNotFoundException:com.mysql.jdbc.Driver

时间:2017-03-07 10:45:11

标签: java mysql database exception ssh

我想在我的java程序中建立远程数据库ssh的连接,所以我为此编写了一个java代码,我可以从我的代码ssh到数据库服务器但是我无法访问数据库,这个是我的输出,其中包含错误:

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

我使用此命令运行我的.java类(我同时提供了jsch和mysql-connector jar文件,用于运行我的类)并且两个jar文件都在包含Main.java类的文件夹中

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

这是我的代码

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!");
        }

我很困惑,我想也许我应该把两个jar文件放在db-server中? (现在java代码文件夹中的javacode-server中有) 我应该把这些罐放在哪里,如果我必须将它们放在数据库服务器中?

0 个答案:

没有答案