java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.Statement java.sql.Conn

问题描述

出现这个问题是我在连接数据使用语句查询的时候报的错误,当时反反复复检查线程里的数据库查询代码,一时没有发现问题。报的错误就是标题所述。
在这里插入图片描述
具体代码,当时也是立马到了85行代码这里(当然从代码的错误说明上也感觉是conn是空,后面有测试了一下,发现果然是这样。

package com.example.mysqlconnectiontest;

import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
   
   
    private Button button,button_delete,button_insert,button_update;
    private TextView textView;
    private static final int TEST_USER_SELECT = 1;
    int i =0,d=0,z=0;
    private EditText editText,</
### 解决 `java.lang.NullPointerException` 异常问题 在 Java 编程中,`NullPointerException` 是最常见的运行时异常之一。它通常发生于试图调用一个为 `null` 的对象实例上的方法或访问其字段时。以下是针对调用 `getName()` 方法时可能发生 `NullPointerException` 的几种解决方案及其详细解释。 #### 1. **空值检查** 最简单直接的方式就是在调用方法之前验证对象是否为 `null`。这种方法能够有效地防止因调用了 `null` 对象的方法而导致的异常。 ```java if (person != null) { name = person.getName(); } else { name = "Unknown"; } ``` 这种方式通过显式的条件判断避免了对 `null` 对象的操作[^3]。 #### 2. **使用 `Optional` 类** 自 Java 8 起引入的 `Optional` 类提供了一种更优雅的方式来处理可能为空的对象。它可以封装一个值,并允许开发者以函数式风格对其进行操作,而无需担心 `null` 值的存在。 ```java Optional<String> optionalName = Optional.ofNullable(person).map(Person::getName); name = optionalName.orElse("Unknown"); ``` 这里利用了 `Optional.ofNullable()` 来包裹可能为 `null` 的对象,并通过链式调用来安全地获取所需数据。如果中间任一环节返回 `null`,整个链条将不会抛出异常而是继续执行默认逻辑[^1]。 #### 3. **异常捕获机制 (`try-catch`)** 虽然推荐优先使用预防措施而非依赖异常处理来控制程序流,但在某些特定情况下也可以采用 `try-catch` 结构来应对潜在的 `NullPointerException`。 ```java try { name = person.getName(); } catch (NullPointerException e) { name = "Unknown"; } ``` 尽管如此,频繁使用此法可能会掩盖其他更重要的错误源码位置,故应谨慎选用[^1]。 #### 4. **初始化对象** 确保所有引用类型变量都被适当地初始化后再被使用也是一个有效的办法。例如,在定义阶段就赋予它们合理的初始状态而不是单纯设置成 `null`。 ```java Books book = new Books("Effective Java", "Joshua Bloch", 49.99); System.out.println("Book details: " + book.getName() + ", by " + book.getAuthor()); ``` 这样即使后续忘记单独做额外的安全检测也不会轻易触发类似的崩溃状况[^4]。 综上所述,以上四种途径都可以不同程度地帮助我们规避掉由调用 `null` 实例成员所造成的麻烦情形;其中前两者尤其适用于那些存在较高可能性会出现缺失链接节点的应用场合之中。 --- ###
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪の星空朝酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值