[英]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();
但實際上並沒有將其分配給CallAssStatement
的conn
變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.