Java 语句=null; } } 捕获(SQLE异常){ //无法关闭语句 } ... } 返回结果; }

Java 语句=null; } } 捕获(SQLE异常){ //无法关闭语句 } ... } 返回结果; },java,sqlite,jdbc,arraylist,Java,Sqlite,Jdbc,Arraylist,如果您没有使用JDBC,那么您必须自己管理数据库连接——这可能会很乏味,并且是应用程序错误的常见来源。几乎所有现代Java应用程序都使用数据源实现(并且池化数据源非常常见),而不是简单的JDBC连接 当然,使用Spring要简单得多,但是知道如何使用普通的老JDBC还是不错的 创建一个Java类来保存结果对象并返回列表中的对象,而不是返回列表对象 您可以在专门设计用于返回这些对象的方法中执行此操作 例如,如果创建了一个用户类,则可以执行以下操作: private static String SQ

如果您没有使用JDBC,那么您必须自己管理数据库连接——这可能会很乏味,并且是应用程序错误的常见来源。几乎所有现代Java应用程序都使用数据源实现(并且池化数据源非常常见),而不是简单的JDBC连接

当然,使用Spring要简单得多,但是知道如何使用普通的老JDBC还是不错的

创建一个Java类来保存结果对象并返回列表中的对象,而不是返回列表对象

您可以在专门设计用于返回这些对象的方法中执行此操作

例如,如果创建了一个用户类,则可以执行以下操作:

private static String SQL = "SELECT * FROM Users";
...

private List<User> getUsers()
{
    List<User> results = new ArrayList<>();

    try
    {
        PreparedStatement statement = connection.prepareStatement(SQL);
        ResultSet rs = statement.executeQuery(SQL);
        while(rs.next()) {
          User aUser = new User();
           aUser.setUserid(rs.getString("USER_ID"));
           aUser.setUserName(rs.getString("USERNAME"));
           ...
         results.add(aUser);
        }
    }
    catch(SQLException e) {
     // log any exceptions ...
    }
    finally() {
     // always close your JDBC resources - google it
     // example
     try{
        if (statement != null) {
           statement.close();
           statement=null;
        }
      }
      catch(SQLException e) {
        // couldn't close statement
      }
      ...
    }

    return results;
}
private static String SQL=“SELECT*FROM Users”;
...
私有列表getUsers()
{
列表结果=新建ArrayList();
尝试
{
PreparedStatement=connection.prepareStatement(SQL);
ResultSet rs=语句.executeQuery(SQL);
while(rs.next()){
用户aUser=新用户();
aUser.setUserid(rs.getString(“USER_ID”);
aUser.setUserName(rs.getString(“用户名”);
...
结果:添加(aUser);
}
}
捕获(SQLE异常){
//记录任何异常。。。
}
最后(){
//始终关闭您的JDBC资源-谷歌it
//范例
试一试{
if(语句!=null){
语句。close();
语句=null;
}
}
捕获(SQLE异常){
//无法关闭语句
}
...
}
返回结果;
}

如果您没有使用JDBC,那么您必须自己管理数据库连接——这可能会很乏味,并且是应用程序错误的常见来源。几乎所有现代Java应用程序都使用数据源实现(并且池化数据源非常常见),而不是简单的JDBC连接

您确定不考虑“一个结果集中的行数组列表”吗?我首选返回的结构是
列表
结果集
不是可以传递和使用的,因为它与查询(即
语句
)和
连接
关联。您需要阅读它,最好将结果解析到您自己的域对象中并传递给他人。嗯,那么可能我没有正确理解ResultSet。我认为它是一个保存查询结果的对象,因为它是一个对象,所以我可以传递它(或者更确切地说是对它的引用)。如果我不知道结果集将包含什么/如果查询有多个结果集,我将如何继续并将结果集的结果存储在我自己的对象中?我建议您阅读JDBC apidoc,如果1a)对同一
语句
对象执行新语句,结果集将关闭,1b在自动提交中对同一连接执行任何语句,2)关闭
语句,3)关闭
连接,4)提交/回滚事务(并且结果集在提交时不可保留),或5)对语句调用
getMoreResults()
。结果集应尽快处理和关闭,而不是传递。您确定不考虑“一个结果集的行数组列表”吗?我首选返回的结构是
列表
结果集
不是可以传递和使用的,因为它与查询(即
语句
)和
连接
关联。您需要阅读它,最好将结果解析到您自己的域对象中并传递给他人。嗯,那么可能我没有正确理解ResultSet。我认为它是一个保存查询结果的对象,因为它是一个对象,所以我可以传递它(或者更确切地说是对它的引用)。如果我不知道结果集将包含什么/如果查询有多个结果集,我将如何继续并将结果集的结果存储在我自己的对象中?我建议您阅读JDBC apidoc,如果1a)对同一
语句
对象执行新语句,结果集将关闭,1b在自动提交中对同一连接执行任何语句,2)关闭
语句,3)关闭
连接,4)提交/回滚事务(并且结果集在提交时不可保留),或5)对语句调用
getMoreResults()
。应尽快处理和关闭结果集,而不是传阅。
public static void main(String[] args)
{
    [...]

    dbInterface.excecute("DROP TABLE IF EXISTS Users");
    dbInterface.excecute("CREATE TABLE IF NOT EXISTS Users (id INTEGER, name STRING(20));");
    dbInterface.excecute("INSERT INTO Users (id, name) VALUES (1, \"Hans\");");
    dbInterface.excecute("INSERT INTO Users (id, name) VALUES (2, \"Peter\");");

    ArrayList<ResultSet> results = dbInterface.excecute("SELECT * FROM Users;");

    log(tag, ""+results.size());
    for(int i = 0; i < results.size(); i++)
    {
        ResultSet set = results.get(i);
        try
        {
            ///*
            while(set.next())
            {
                //TODO Here the information can no longer be retrieved... :(
                Main.log(tag, ""+set.getString("name")+", row:"+set.getRow());
            }
            //*/
        }
        catch (Exception e)
        {
            Main.log(tag, e);
        }
    }
}
public List resultSetToArrayList(ResultSet rs) throws SQLException {
    ResultSetMetaData md = rs.getMetaData();
    int columns = md.getColumnCount();
    List<Map<String, Object>> list = new ArrayList<>();
    while (rs.next()) {
        Map<String, Object> row = new HashMap<>(columns);
        for (int i = 1; i <= columns; ++i) {
            row.put(md.getColumnName(i), rs.getObject(i));
        }
        list.add(row);
    }

    return list;
}
private static String SQL = "SELECT * FROM Users";
...

private List<User> getUsers()
{
    List<User> results = new ArrayList<>();

    try
    {
        PreparedStatement statement = connection.prepareStatement(SQL);
        ResultSet rs = statement.executeQuery(SQL);
        while(rs.next()) {
          User aUser = new User();
           aUser.setUserid(rs.getString("USER_ID"));
           aUser.setUserName(rs.getString("USERNAME"));
           ...
         results.add(aUser);
        }
    }
    catch(SQLException e) {
     // log any exceptions ...
    }
    finally() {
     // always close your JDBC resources - google it
     // example
     try{
        if (statement != null) {
           statement.close();
           statement=null;
        }
      }
      catch(SQLException e) {
        // couldn't close statement
      }
      ...
    }

    return results;
}