Unhandled exception: java.sql.SQLException错误

问题遇到的现象和发生背景

代码如下,任务要求是连接该sql server数据库,并以5秒为周期读取表中全部数据,出现了如下错误

问题相关代码,请勿粘贴截图
import com.sun.org.apache.bcel.internal.generic.ACONST_NULL;
import java.sql.*;
import java.util.Timer;
import java.util.TimerTask;
    public class MyMain {
        public static String url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=isms_data)";//定义静态变量数据库地址
    public static String username="sa";//定义静态变量用户名
    public static String password="123456";
    public static Connection conn;//定义静态变量con
    public static Statement sta;
    public static ResultSet res;
    public static void main(String[] args) {
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//加载驱动
            Connection conn= DriverManager.getConnection(url, username, password);//创建conn
            Statement sta=conn.createStatement();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        Timer timer=new Timer();
        timer.schedule(new MyTimerTask1(),0,5000);
    }
}
class MyTimerTask1 extends TimerTask{
    public void run(){
        Statement sta=MyMain.sta;
        ResultSet resultSet=sta.executeQuery("selcet * from im_Alert202112");
    }
}

运行结果及报错内容

Unhandled exception: java.sql.SQLException:29

我的解答思路和尝试过的方法
我想要达到的结果

连接数据库在MyMain类创建的Statement对象可以在run方法中使用

有没有其他错误信息,截图发出来看下。

删除main函数的Connection ,Statement ,修改如下:

public static void main(String[] args) {
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//加载驱动
            conn= DriverManager.getConnection(url, username, password);//创建conn
            sta=conn.createStatement();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        Timer timer=new Timer();
        timer.schedule(new MyTimerTask1(),0,5000);
    }


1、Timer中引用的 MyMain.sta 是没有被赋值(即 空null),try {}中的 sta 变量作用域覆盖了。
2、静态修饰符static 不要乱用。
3、每次获取全量数据,如果只是测试玩倒也没啥。建议,从开始学编程就养成好的习惯,写些有一定意义的SQL。


public class MyMain {
    public static String url = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=isms_data)";//定义静态变量数据库地址
    public static String username = "sa";//定义静态变量用户名
    public static String password = "123456";
    // public static Connection conn; //定义静态变量con
    // public static Statement sta;
    public Statement sta;
    // public static ResultSet res;

    public static void main(String[] args) {
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//加载驱动
            Connection conn = DriverManager.getConnection(url, username, password);//创建conn
            // Statement sta = conn.createStatement();
            sta = conn.createStatement();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        Timer timer = new Timer();
        timer.schedule(new MyTimerTask1(), 0, 5000);
    }
}
class MyTimerTask1 extends TimerTask {
    public void run() {
        Statement sta = MyMain.sta;
        ResultSet resultSet = sta.executeQuery("selcet * from im_Alert202112");
    }
}