亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將 PrepareStatement 點修復為空?

如何將 PrepareStatement 點修復為空?

元芳怎么了 2022-11-30 17:01:20
Prepare 語句以某種方式指向 null,我看不到它的合理原因。我試圖了解哪里出了問題,為什么它指向 null。我曾嘗試使用“com.mysql.jdbc.Driver”而不是“com.mysql.cj.jdbc.Driver”,但它似乎無關緊要。public class Main {    public static void main(String args[]) throws Exception {        saveData();    }    public static void saveData() throws Exception{        Car Ford = new Car();        Ford.setType("Car");        Ford.setModel("Ford");        Ford.setColour("Black");        Ford.setSunroof(true);        Ford.setDoor(4);        String query = "INSERT INTO sys.homework(ID,type,colour,sunroof,model,door)VALUES(?,?,?,?,?,?)";        try{            Connection con = getConnection();            PreparedStatement ps = con.prepareStatement(query); //Debugger points this line            ps.setInt(1,12);            ps.setString(2, Ford.getType());            ps.setString(3,Ford.getColour());            ps.setBoolean(4,Ford.isSunroof());            ps.setString(5, Ford.getModel());            ps.setInt(6, Ford.getDoor());            ps.executeUpdate();        }        catch (SQLException sql) {            sql.printStackTrace();        }    }    public static Connection getConnection() throws Exception {        try{            Class.forName("com.mysql.cj.jdbc.Driver");            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sys?useUnicode=true&usetetimeCode=false&serverTimezone=Germany","root","pass");            Statement st = con.createStatement();        }        catch(Exception ex){            System.out.println("Error: " + ex);        }        return null;    }}這是錯誤消息:Error: java.lang.ClassNotFoundException: com.mysql.cj.jdbc.DriverException in thread "main" java.lang.NullPointerException    at sample.Main.saveData(Main.java:26)
查看完整描述

2 回答

?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

“com.mysql.jdbc.Driver”而不是“com.mysql.cj.jdbc.Driver”,但它似乎無關緊要。

這很可能是相關的。但是根據您的報告,這不是完整的解決方案。

真正的問題是以下一項或兩項

  • 包含 JDBC 驅動程序的 JAR 文件可能不在類路徑中。

  • 您可能為 JDBC 驅動程序使用了錯誤的類名:

    • 對于舊版本的 MySQL 連接器/J 驅動程序,名稱是com.mysql.jdbc.Driver.

    • 對于較新的版本,它是com.mysql.cj.jdbc.Driver

    • 更改發生在 8.0 版本中。

我還想指出,您的很多問題都歸因于一些實施錯誤:

  • 你不應該趕上Exception。只捕獲您知道如何處理的異常。

  • 您通常不應printStackTrace()在異常處理程序中使用。應記錄異常。分散調用打印堆棧跟蹤使得維護生產代碼變得更加困難。

  • 您不應將方法聲明為throws Exception. 這意味著調用者必須能夠處理所有異常,并且不知道會發生什么。

  • null如果出現錯誤,返回通常不是一個好主意。要么讓異常傳播到可以有效處理的地方,要么將其包裝在不同的異常中并拋出它。

目前發生的情況是getConnection方法中的任何錯誤都會導致它返回null。并且調用的代碼getConnnection沒有正確處理這個......導致NullPointerException. 所以你有一個問題,你現在有兩個。


最后,如果你仔細查看你的代碼,你會發現有一個錯誤導致它總是返回null。即使沒有例外。


查看完整回答
反對 回復 2022-11-30
?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

您需要在 try 塊中返回連接。


public static Connection getConnection() throws Exception {

    try{

        Class.forName("com.mysql.cj.jdbc.Driver");

        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sys?useUnicode=true&usetetimeCode=false&serverTimezone=Germany","root","pass");

        Statement st = con.createStatement();

        return con;

    }

    catch(Exception ex){

        System.out.println("Error: " + ex);

    }

    return null;

}


查看完整回答
反對 回復 2022-11-30
  • 2 回答
  • 0 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號