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