public class dbConn { public dbConn() { try { jbInit(); } catch (Exception e) { e.printStackTrace(); } } private Statement conn() { try { // 加载驱动 Class.forName("com.mysql.jdbc.Driver"); // 数据库名称,管理员账号、密码 String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String pwd = "123456789"; // 连接 Connection con = null; con = DriverManager.getConnection(url, user, pwd); Statement stat = con.createStatement(); return stat; } catch (ClassNotFoundException ex) { return null; } catch (SQLException ex1) { return null; } } // 查询数据库 public ResultSet getRs(String sql) { try { Statement stat = conn(); ResultSet rs = stat.executeQuery(sql); System.out.println(rs); return rs; } catch (SQLException ex) { System.err.println("------------" + ex.getMessage()); return null; } } // 更新数据库 public int getUpdate(String sql) { try { Statement stat = conn(); int i = stat.executeUpdate(sql); return i; } catch (Exception ex) { System.out.println(">>>>>>>>" + ex.getMessage()); return -1; } } private void jbInit() throws Exception { conn(); } }代码报错java.lang.NullPointerException: Cannot invoke "java.sql.Statement.executeQuery(String)" because "stat" is null
时间: 2023-06-20 19:05:36 浏览: 139
这个错误是因为在执行查询语句时,可能出现了连接数据库失败的情况,导致 `conn()` 函数返回了 `null`,所以在 `getRs(String sql)` 函数中执行 `stat.executeQuery(sql)` 时,会抛出 `NullPointerException` 异常。你可以在 `conn()` 函数中增加一些调试信息,找出具体的原因,比如输出连接数据库的 URL、用户名和密码等。同时,建议在使用完数据库连接之后,显式地关闭连接,避免数据库连接过多而导致的性能问题。
相关问题
package com.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DBConn { Connection conn; Statement stmt; ResultSet rs; //返回值 参数 public void openDB(){ try { Class.forName("com.mysql.cj.jdbc.Driver"); String url="jdbc:mysql://localhost:3306/test?useSSL=fasle&serverTimezone==GMT%2B8"; conn = DriverManager.getConnection(url,"root","123456"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public int execUpdate(String sql){ int n=0; try { stmt = conn.createStatement(); n = stmt.executeUpdate(sql); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return n; } public void closeDB(){ try { stmt.close(); conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }找错误
这段代码看起来没有明显错误,但是在使用之前需要先调用 openDB 方法来打开数据库连接。如果没有调用 openDB 方法就直接调用 execUpdate 方法,就会出现空指针异常,因为 conn 对象还没有被初始化。因此,在使用 DBConn 类的时候,需要按照以下步骤来操作:
1. 创建 DBConn 对象。
2. 调用 openDB 方法来打开数据库连接。
3. 调用 execUpdate 方法来执行 SQL 语句。
4. 调用 closeDB 方法来关闭数据库连接。
如果你已经按照以上步骤来使用 DBConn 类,但仍然出现错误,可以检查以下几个方面:
1. 检查数据库连接字符串是否正确。
2. 检查数据库用户名和密码是否正确。
3. 检查是否有足够的权限来访问数据库。
4. 检查 SQL 语句是否正确。
如果还无法解决问题,可以考虑将错误信息打印出来,以便更好地定位问题。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class L43 { public static final String url = "jdbc:mysql://localhost:3306;DatabaseName=yggl"; private final static String username = "root"; private final static String password = "ziyexue"; public static void main(String args[]) { try { Class.forName("com.mysql.cj.jdbc.Driver"); System.out.println("加载驱动成功!"); } catch (Exception e) { e.p rintStackTrace(); System.out.println("OK"); } try { String url="jdbc:mysql://localhost:3306/yggl"+"?useUnicode=true&characterEncoding=UTF-8&userSSL=true&serverTimezone=UTC"; Connection dbConn=DriverManager.getConnection(url, username, password); Statement st= dbConn.createStatement(); System.out.println("连接数据库成功!"); } catch (Exception e) { e.printStackTrace(); System.out.println("SQL Server连接失败!"); } } }
这段代码是 Java 编程语言中使用 JDBC 连接 MySQL 数据库的示例代码。在代码中,首先通过 `Class.forName()` 方法加载 MySQL JDBC 驱动程序,然后通过 `DriverManager.getConnection()` 方法获取数据库连接对象,最后通过 `Connection.createStatement()` 方法创建一个语句对象 `Statement`,用于执行 SQL 语句。其中,`url` 变量是连接数据库的 URL,`username` 和 `password` 变量是数据库的用户名和密码。这段代码还可以进行一些优化,比如将数据库连接放在一个单独的类中,使用连接池等。
阅读全文