Ghurnid_ 2025-06-10 21:03 采纳率: 0%
浏览 31

Cannot invoke "java.sql.Connection.prepareStatement(String)" because "this.conn" is null

jsp页面无法连接到数据库,创建一个测试类可以成功运行查找到数据,但是在jsp页面中根本无法链接到数据库,怎么办,希望能够帮我解决一下

img

创建一个成绩类

img

连接数据库

package db;

import java.sql.Connection;
import java.sql.DriverManhttps://i-blog.csdnimg.cn/ask/626f23da51474ae8adc3e59bdef6f8a3.png "#left")
ager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class DB {
    //String url = "jdbc:mysql://<host>:<port>/<db>?useSSL=false&serverTimezone=UTC";
    String url = "jdbc:mysql://localhost:3306/db";
    String username = "root";
    String password = "20051220yu";
    
    Connection conn = null;
    
    public void create() {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, username, password);
            if (conn != null) {
                System.out.println("连接成功");
            } else {
                System.out.println("连接失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public void close() {
        try {
            if (conn != null) {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    public List<score> queryScore(String sno,String sname,String sclass) throws SQLException {
        this.create();
        String sql = "SELECT * FROM score WHERE sno = ? and sname=? and class=?";
        PreparedStatement pst = conn.prepareStatement(sql);
        pst.setString(1, sno);
        pst.setString(2, sname);
        pst.setString(3, sclass);
        ResultSet rst = pst.executeQuery();
        List<score> list = new ArrayList<>();
        while (rst.next()) {
            score sl = new score();
            sl.setSno(rst.getString("sno"));
            sl.setName(rst.getString("sname"));
            sl.setSclass(rst.getString("class"));
            sl.setGrade(rst.getBigDecimal("garde"));
            list.add(sl);
        }
        pst.close();
        rst.close();
        this.close();
        return list;
    }
}




创建表单输入查询数据

img

处理数据连接数据库的jsp页面

img

创建测试类可以运行成功

img

  • 写回答

7条回答 默认 最新

  • 阿里嘎多学长 2025-06-10 21:03
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题分析

    问题是:在 JSP 页面中无法连接到数据库,创建了一个测试类可以成功运行查找到数据,但是在 JSP 页面中根本无法链接到数据库。

    解决方案

    1. 检查数据库连接信息是否正确 检查 conn 对象是否正确地连接到了数据库,如果连接信息错误,可能会导致无法连接到数据库。
    2. 检查 conn 对象是否被正确地初始化 在 JSP 页面中,可能需要在 init 方法中初始化 conn 对象。
    3. 检查数据库驱动程序是否正确 确保使用的数据库驱动程序正确,例如 MySQL 驱动程序。

    代码示例

    以下是一个简单的示例代码,连接到 MySQL 数据库:

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    
    public class DBUtil {
        private static Connection conn;
    
        public static void init() {
            try {
                Class.forName("com.mysql.cj.jdbc.Driver");
                conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "your_username", "your_password");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static Connection getConn() {
            return conn;
        }
    }
    

    在 JSP 页面中,可以使用以下代码来连接到数据库:

    <%@ page language="java" %>
    <%@ page import="db.DBUtil" %>
    
    <%
        DBUtil.init();
        Connection conn = DBUtil.getConn();
        PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM your_table");
        // ...
    %>
    

    结论

    问题可能是由于数据库连接信息错误、conn 对象未被正确地初始化或数据库驱动程序错误导致的。在检查这些问题后,如果仍然无法解决,可以提供更多的代码和信息来帮助 debug。

    评论

报告相同问题?

问题事件

  • 修改了问题 6月10日
  • 创建了问题 6月10日