gpt4 book ai didi

Java 存储来自选择查询的多行

转载 作者:行者123 更新时间:2023-12-02 04:52:17 25 4
gpt4 key购买 nike

这实际上是我的一个旧问题的重做,我已经完全重做了,因为我的旧问题似乎让人们感到困惑。

我编写了一个查询数据库的 Java 程序,旨在检索多行数据。我之前在 Informix-4GL 中编写过该程序,并且使用 sql 游标循环访问数据库并将每一行存储到“动态记录行”中。我知道 Java 中没有记录行,所以我最终得到了以下代码。

public class Main {

// DB CONNECT VARIABLE ===========================
static Connection gv_conn = null;

// PREPARED STATEMENT VARIABLES ==================
static PreparedStatement users_sel = null;
static ResultSet users_curs = null;
static PreparedStatement uinfo_sel = null;
static ResultSet uinfo_curs = null;

// MAIN PROGRAM START ============================

public static void main(String[] args) {

try {
// CONNECT TO DATABASE CODE
} catch(Exception log) {
// YOU FAILED CODE
}

f_prepare(); // PREPARE THE STATEMENTS

ArrayList<Integer> list_id = new ArrayList<Integer>();
ArrayList<String> list_name = new ArrayList<String>();
ArrayList<Integer> list_info = new ArrayList<String>();
ArrayList<String> list_extra = new ArrayList<String>();

try {

users_sel.setInt(1, 1);
users_curs = users_sel.executeQuery();

// RETRIEVE ROWS FROM USERS
while (users_curs.next()) {

int lv_u_id = users_curs.getInt("u_id");
String lv_u_name = users_curs.getString("u_name");

uinfo_sel.setInt(1, lv_u_id);
uinfo_curs = uinfo_sel.executeQuery();

// RETRIEVE DATA FROM UINFO RELATIVE TO USER
String lv_ui_info = uinfo_curs.getString("ui_info");
String lv_ui_extra = uinfo_curs.getString("ui_extra");

// STORE DATA I WANT IN THESE ARRAYS
list_id.add(lv_u_id);
list_name.add(lv_u_name);
list_info.add(lv_ui_info);
list_extra.add(lv_ui_extra);

}

} catch(SQLException log) {
// EVERYTHING BROKE
}

// MAKING SURE IT WORKED
System.out.println(
list_id.get(0) +
list_name.get(0) +
list_info.get(0) +
list_extra.get(0)
);

// TESTING WITH ARBITRARY ROWS
System.out.println(
list_id.get(2) +
list_name.get(5) +
list_info.get(9) +
list_extra.get(14)
);

}

// PREPARE STATEMENTS SEPARATELY =================

public static void f_prepare() {

String lv_sql = null;

try {

lv_sql = "select * from users where u_id >= ?"
users_sel = gv_conn.prepareStatement(lv_sql);

lv_sql = "select * from uinfo where ui_u_id = ?"
uinfo_sel = gv_conn.prepareStatement(lv_sql)

} catch(SQLException log) {
// IT WON'T FAIL COZ I BELIEEEVE
}

}

}

class DBConn {
// connect to SQLite3 code
}

总而言之,这些代码有效,我可以访问数据库一次,获取我需要的所有数据,将其存储在变量中并根据需要使用它们,但这感觉不对,我认为它远非最合适的考虑到我在 Informix-4GL 中只需要 15 行代码就可以做到这一点。

任何人都可以给我关于实现类似结果的更好方法的建议吗?

最佳答案

为了有效地使用 Java,您需要使用自定义对象。这里有一个类中的许多静态方法。看来您来自过程化背景,如果您尝试使用 Java 作为过程化语言,那么使用它不会有太大值(value)。因此,首先创建一个类型,您可以将其放在类中或将其创建为单独的文件:

class User
{
final int id;
final String name;
final String info;
final String extra;

User(int id, String name, String info, String extra)
{
this.id = id;
this.name = name;
this.info = info;
this.name = name;
}

void print()
{
System.out.println(id + name + info + extra);
}
}

然后循环变成:

      List<User> list = new ArrayList<User>();

try {

users_sel.setInt(1, 1);
users_curs = users_sel.executeQuery();

// RETRIEVE ROWS FROM USERS
while (users_curs.next()) {

int lv_u_id = users_curs.getInt("u_id");
String lv_u_name = users_curs.getString("u_name");

uinfo_sel.setInt(1, lv_u_id);
uinfo_curs = uinfo_sel.executeQuery();

// RETRIEVE DATA FROM UINFO RELATIVE TO USER
String lv_ui_info = uinfo_curs.getString("ui_info");
String lv_ui_extra = uinfo_curs.getString("ui_extra");

User user = new User(lv_u_id, lv_u_name, lv_ui_info, lv_ui_extra);

// STORE DATA
list.add(user);
}

} catch(SQLException log) {
// EVERYTHING BROKE
}

// MAKING SURE IT WORKED
list.get(0).print();

这不一定涉及行数。大多数使用 Java 的人不会通过这种低级 API 与数据库进行交互,但一般来说,如果您希望减少行数(一个值得怀疑的目标),那么 Java 不会是您的最佳选择。

关于Java 存储来自选择查询的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29104127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com