在JavaSQLite中获取NullPointerException

在JavaSQLite中获取NullPointerException,java,sqlite,Java,Sqlite,我编写这个方法是为了在java中从SQLite表中获取结果 public String[][] select(String query, String table) throws ClassNotFoundException, SQLException { Connection con; Statement st; Class.forName("org.sqlite.JDBC"); con = DriverManager.getConnection("jd

我编写这个方法是为了在java中从SQLite表中获取结果

    public String[][] select(String query, String table) throws ClassNotFoundException, SQLException
{
    Connection con;
    Statement st;
    Class.forName("org.sqlite.JDBC");
    con = DriverManager.getConnection("jdbc:sqlite:"+table);
    con.setAutoCommit(false);
    st = con.createStatement();
    ResultSet rs = st.executeQuery(query);
    String[][] result = new String[100][4];
    int j = 0;
    while ( rs.next() ) {
        String  name = rs.getString("fullname");
        String  username = rs.getString("username");
        String  password = rs.getString("password");
        String  email = rs.getString("email");
        result[j][0] = name; // line number 63
        result[j][1] = username;
        result[j][2] = password;
        result[j][3] = email;
        j++;
    }
    rs.close();
    st.close();
    con.close();
    return result;
}
从我的主方法中,我实例化了这个方法:

    try{
        String[][] data = db.select("SELECT * FROM user", "fliplist.db"); // line number 37
        System.out.println(data);
    } catch (ClassNotFoundException | SQLException e){
        System.out.println(e.getMessage());
    }
这给了我一个错误:

run:
Exception in thread "main" java.lang.NullPointerException
at FlipList.Database.select(Database.java:63)
at FlipList.FlipList.main(FlipList.java:37)
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)
为了获取结果,它应该是怎样的

更新 我已经初始化了数组的第二维度,现在它显示了这个错误(很可能是garbez值):

如何返回数组?(感谢@lea;如果他们发布了一个数组,请告诉我)

您还需要初始化内部数组。在您的while循环中,将类似这样的内容放在顶部,它应该会起作用

data[j] = new String[4];
对于新错误,您希望遍历数组,而不是仅打印它。例如:

for (int i = 0; i < data.length; i++) {
    for (int j = 0; j < data[0].length; j++) {
        System.out.print(data[i][j] + "\t\t");
    }
    System.out.println();
}
您还需要将
数据的声明更改为
ArrayList result=new ArrayList()
,而不是
String[][]result=…
(这要感谢@lea;如果他们发布了一个,请告诉我)

您还需要初始化内部数组。在您的while循环中,将类似这样的内容放在顶部,它应该会起作用

data[j] = new String[4];
对于新错误,您希望遍历数组,而不是仅打印它。例如:

for (int i = 0; i < data.length; i++) {
    for (int j = 0; j < data[0].length; j++) {
        System.out.print(data[i][j] + "\t\t");
    }
    System.out.println();
}
您还需要将
数据的声明更改为
ArrayList result=new ArrayList()
,而不是
String[][]result=…
(这要感谢@lea;如果他们发布了一个,请告诉我)

您还需要初始化内部数组。在您的while循环中,将类似这样的内容放在顶部,它应该会起作用

data[j] = new String[4];
对于新错误,您希望遍历数组,而不是仅打印它。例如:

for (int i = 0; i < data.length; i++) {
    for (int j = 0; j < data[0].length; j++) {
        System.out.print(data[i][j] + "\t\t");
    }
    System.out.println();
}
您还需要将
数据的声明更改为
ArrayList result=new ArrayList()
,而不是
String[][]result=…
(这要感谢@lea;如果他们发布了一个,请告诉我)

您还需要初始化内部数组。在您的while循环中,将类似这样的内容放在顶部,它应该会起作用

data[j] = new String[4];
对于新错误,您希望遍历数组,而不是仅打印它。例如:

for (int i = 0; i < data.length; i++) {
    for (int j = 0; j < data[0].length; j++) {
        System.out.print(data[i][j] + "\t\t");
    }
    System.out.println();
}
您还需要将
data
的声明更改为
ArrayList result=new ArrayList()
,而不是
String[][]result=…

  • 一些非常基本的东西。请在数据库上执行查询并查看它返回的内容(有时查询可能不正确,例如表名可以是“users”而不是“user”,只是猜测):-
  • 从用户选择*

  • 如果上面没有问题,请尝试使用“columnIndex”而不是“columnName”提取行。e、 g

    String  name = rs.getString(1);
    String  username = rs.getString(2);
    String  password = rs.getString(3);
    String  email = rs.getString(4);
    
  • 这里我假设名称、用户名、密码和电子邮件分别属于第1、第2、第3和第4列

  • 一些非常基本的东西。请在数据库上执行查询并查看它返回的内容(有时查询可能不正确,例如表名可以是“users”而不是“user”,只是猜测):-
  • 从用户选择*

  • 如果上面没有问题,请尝试使用“columnIndex”而不是“columnName”提取行。e、 g

    String  name = rs.getString(1);
    String  username = rs.getString(2);
    String  password = rs.getString(3);
    String  email = rs.getString(4);
    
  • 这里我假设名称、用户名、密码和电子邮件分别属于第1、第2、第3和第4列

  • 一些非常基本的东西。请在数据库上执行查询并查看它返回的内容(有时查询可能不正确,例如表名可以是“users”而不是“user”,只是猜测):-
  • 从用户选择*

  • 如果上面没有问题,请尝试使用“columnIndex”而不是“columnName”提取行。e、 g

    String  name = rs.getString(1);
    String  username = rs.getString(2);
    String  password = rs.getString(3);
    String  email = rs.getString(4);
    
  • 这里我假设名称、用户名、密码和电子邮件分别属于第1、第2、第3和第4列

  • 一些非常基本的东西。请在数据库上执行查询并查看它返回的内容(有时查询可能不正确,例如表名可以是“users”而不是“user”,只是猜测):-
  • 从用户选择*

  • 如果上面没有问题,请尝试使用“columnIndex”而不是“columnName”提取行。e、 g

    String  name = rs.getString(1);
    String  username = rs.getString(2);
    String  password = rs.getString(3);
    String  email = rs.getString(4);
    

  • 这里我假设名称、用户名、密码和电子邮件分别属于第1、第2、第3和第4列。

    我将ArrayList重新定义为字符串列表,而不是数组

    public void tester()
        {
            ArrayList result = new ArrayList();
    
    
        try
        {
        Connection connect = DriverManager.getConnection(host, username, password);
    
        String sql="select * from FRIENDS";
    
        Statement stmt=connect.createStatement();
    
        ResultSet rs=stmt.executeQuery(sql);
    
    
    
        String[] nextRow = new String[4];
        while ( rs.next() ) {
    
    
                String  firstname = rs.getString("FIRSTNAME");
                String  lastusername = rs.getString("LASTNAME");
                String  nickname = rs.getString("NICKNAME");
                String  friendsince = rs.getString("FRIENDSINCE");
                String  email = rs.getString("EMAIL");
    
                System.out.print("Firstname :- "+firstname+" lastname :- "+lastusername+" nickname :-  "+nickname+" friendsince :- "+friendsince+" Email :- "+email);
    
                nextRow[0] = firstname; 
                nextRow[1] = lastusername;
                nextRow[2] = nickname;
                nextRow[3] = email;
    
                System.out.println("The values in array are :- "+nextRow);
    
    
    
    
                int i=0;
                for(i=0;i<nextRow.length;i++)
                {
                    String add1=nextRow[i];
    
                    result.add(add1);
                }
    
    
    
               }
    
        }
    
    public void tester()
    {
    ArrayList结果=新建ArrayList();
    尝试
    {
    Connection connect=DriverManager.getConnection(主机、用户名、密码);
    String sql=“从朋友中选择*”;
    语句stmt=connect.createStatement();
    结果集rs=stmt.executeQuery(sql);
    字符串[]nextRow=新字符串[4];
    while(rs.next()){
    String firstname=rs.getString(“firstname”);
    字符串lastusername=rs.getString(“LASTNAME”);
    字符串昵称=rs.getString(“昵称”);
    String-friendsince=rs.getString(“friendsince”);
    String email=rs.getString(“电子邮件”);
    系统输出打印(“Firstname:-“+Firstname+”lastname:-“+lastusername+”昵称:-“+昵称+”friendsince:-“+friendsince+”电子邮件:-”+电子邮件);
    nextRow[0]=firstname;
    nextRow[1]=lastusername;
    nextRow[2]=昵称;
    nextRow[3]=电子邮件;
    System.out.println(“数组中的值为:-”+nextRow);
    int i=0;
    
    对于(i=0;i我将ArrayList重新定义为字符串列表,而不是数组

    public void tester()
        {
            ArrayList result = new ArrayList();
    
    
        try
        {
        Connection connect = DriverManager.getConnection(host, username, password);
    
        String sql="select * from FRIENDS";
    
        Statement stmt=connect.createStatement();
    
        ResultSet rs=stmt.executeQuery(sql);
    
    
    
        String[] nextRow = new String[4];
        while ( rs.next() ) {
    
    
                String  firstname = rs.getString("FIRSTNAME");
                String  lastusername = rs.getString("LASTNAME");
                String  nickname = rs.getString("NICKNAME");
                String  friendsince = rs.getString("FRIENDSINCE");
                String  email = rs.getString("EMAIL");
    
                System.out.print("Firstname :- "+firstname+" lastname :- "+lastusername+" nickname :-  "+nickname+" friendsince :- "+friendsince+" Email :- "+email);
    
                nextRow[0] = firstname; 
                nextRow[1] = lastusername;
                nextRow[2] = nickname;
                nextRow[3] = email;
    
                System.out.println("The values in array are :- "+nextRow);
    
    
    
    
                int i=0;
                for(i=0;i<nextRow.length;i++)
                {
                    String add1=nextRow[i];
    
                    result.add(add1);
                }
    
    
    
               }
    
        }
    
    public void tester()
    {
    ArrayList结果=新建ArrayList();
    尝试
    {
    Connection connect=DriverManager.getConnection(主机、用户名、密码);
    String sql=“从朋友中选择*”;
    语句stmt=connect.createStatement();
    结果集rs=stmt.executeQuery(sql);
    字符串[]nextRow=新字符串[4];
    while(rs.next()){
    String firstname=rs.getStr