0

我对 Java 世界很陌生,我不太确定如何做到这一点。

我有一个 MySQL 类,它可以很好地提取一个表,并将其打印到控制台。但是,我需要从另一个类执行自定义 SQL 查询,但我不知道该怎么做。有谁能帮忙吗?

这是mysql类:

import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class mySQL {

    public static void main(String[] args) {

        Connection con = null;
        PreparedStatement pst = null;
        ResultSet rs = null;

        String url = "jdbc:mysql://host:port/database";
        String user = "user";
        String password = "password";

        try {

            con = DriverManager.getConnection(url, user, password);
            pst = con.prepareStatement("SELECT * FROM NFT_users");
            rs = pst.executeQuery();
            con = DriverManager.getConnection(url, user, password);

            while (rs.next()) {
                System.out.print(rs.getInt(1));
                System.out.print(": ");
                System.out.println(rs.getString(2));
            }

        } catch (SQLException ex) {
                Logger lgr = Logger.getLogger(mySQL.class.getName());
                lgr.log(Level.SEVERE, ex.getMessage(), ex);

        } finally {

            try {
                if (rs != null) {
                    rs.close();
                }
                if (pst != null) {
                    pst.close();
                }
                if (con != null) {
                    con.close();
                }

            } catch (SQLException ex) {
                Logger lgr = Logger.getLogger(mySQL.class.getName());
                lgr.log(Level.WARNING, ex.getMessage(), ex);
            }
        }
    }
}
4

1 回答 1

1

您的问题不是关于SQL,而是关于软件设计。

考虑一个类,它的全部存在都是为了让您访问数据。它会做所有的连接工作(private void loadConnection),然后有类似的方法ArrayList<User> getUsers()

然后,当您需要Users 列表时,您所要做的就是做myDatabaseObject.getUsers(),或者在另一种情况下,做myDatabaseObject.getOtherObjects()。但是您的其余代码都不知道有关 SQL 或连接到数据库的任何信息。


如果你想做的不仅仅是非常简单的数据库访问,你应该考虑学习Hibernate维基百科链接。如果您曾经阅读过该站点上的问题并想知道 Hibernate 是什么,那么它正是执行此操作的工具。

至于如何自己做,只需将连接代码放在构造函数中,将连接保存到字段,然后让上述方法进行查询(最好使用PreparedStatement)。

于 2012-11-30T20:11:57.790 回答