簡體   English   中英

無法在JDBC中執行MySQL存儲過程並獲得nullpointer異常

[英]Can't execute MySQL stored procedure in JDBC getting nullpointer exception

我不確定從這里去哪里我已經弄亂了我的代碼,但我仍然收到一個空指針異常。 讓我相信也許我的聯系混亂了……無論如何不確定任何幫助會很酷。

package callassstatement;
    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.Scanner;


    public class CallAssStatement {
    private static Connection conn;


    public static void printOptions() {

    System.out.println("enter 1 to get employee");
    System.out.println("enter 2 to get department");
    System.out.println("enter 3 to exit program");

}

public static String getEmployeeMethod(String id) {
    String abc = null;
    try {

        CallableStatement cs = conn.prepareCall(" { call sp_GetEmployee(1)}");


        cs.setString(1, id);
        //register the OUT parameter before calling the stored procedure
         cs.registerOutParameter(2, java.sql.Types.VARCHAR);
        cs.registerOutParameter(3, java.sql.Types.VARCHAR);
        cs.registerOutParameter(4, java.sql.Types.VARCHAR);
        cs.registerOutParameter(5, java.sql.Types.VARCHAR);

        cs.execute();

        //read the OUT parameter now
        String employeeId = cs.getString(1);
        String lastName = cs.getString(2);
        String firstName = cs.getString(3);
        String departmentId = cs.getString(4);
        String startDate = cs.getString(5);



            abc = ("EmplyeeID: " + employeeId + " " + lastName + "," + firstName + "" + " in " 
                    + departmentId + " Department "+ ", StartDate:"+ startDate);
            return abc;

    } catch (SQLException ex) {
        System.out.println(ex.getMessage());
    }
    return abc;
}

public static void main(String[] args) {

    CandDLoader.createConn();

    printOptions();
    Scanner s = new Scanner(System.in);
    Scanner id = new Scanner(System.in);

    String input = s.nextLine();


    switch (input) {
        case "1":
            System.out.println("calling get employee");
            System.out.println(" Enter employeeID:");
            String ab = id.nextLine();
            getEmployeeMethod(ab);
            break;
        case "2":
            System.out.print("calling get department");
            break;
        case "3":
            System.out.print("exiting");
            System.exit(0);
        default:
            System.out.print("what are you trying to do");
            printOptions();




    }
    }

這是我的連接課程。

package callassstatement;

   import java.sql.Connection;
   import java.sql.DriverManager;
   import java.sql.SQLException;


   public class CandDLoader {


   public static Connection createConn(){
Connection conn = null;
try{

Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost/timeclock", "timeclockuser", "password_1234");
    }
    catch(SQLException | ClassNotFoundException ex){}


    return conn;
    }
    }

createConn()您確實return conn ,但是在main() ,您說

CandDLoader.createConn(); 

因此,對返回的conn不執行任何操作,本質上將其丟棄。

要么將該行更改為此

conn = CandDLoader.createConn();

或改變

private static Connection conn;

對此

private static Connection conn = CandDLoader.createConn();

當您聲明對象字段而未分配時,它們被分配為null

例如

private static Connection conn;

和說的完全一樣

private static Connection conn = null;

檢查您的代碼庫的以下行

conn = DriverManager.getConnection("jdbc:mysql://localhost/timeclock", "timeclockuser", "password_1234");

此處提供的url不包含端口號,應如下所示:

conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/timeclock", "timeclockuser", "password_1234");

private static Connection conn; CallAssStatement類中始終為null的情況下,您可以在CandDLoader.createConn();創建一個連接CandDLoader.createConn(); 但實際上並沒有將其分配給CallAssStatementconn變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM