从类java

时间:2017-11-04 21:57:42

标签: java arrays function arraylist methods

我来自UFT背景。话虽如此,我对JAVA了解不多。 我有以下代码,我连接到SQL服务器并检索一些值并循环它们然后打印出来进行记录。有一个字符串数组varialbe" String [] sqlArr"包含从sql server检索的所有值。如何返回" String [] sqlArr"变量到不同的类?在这种情况下,主要类。

我不确定如何返回数组,但我尝试将返回类型更改为String并在方法close花括号之前放置一个return语句。我收到编译错误。

我想知道的是我怎样才能 1.而不是在方法中循环它,将数组返回到Main,这样我就可以根据需要使用数组的每个值。 2.如果在这种情况下无效,那么返回类型应该是什么? 3.也许有人可以推荐我或以不同的方式修改我的脚本,看起来更专业。

任何建议评论都将受到高度赞赏。

package com.mmia;

import java.sql.*;

public class Connect2SQLServer {

    //Current Username
    private String currentUser = System.getProperty("user.name");

    public void connect2SQLServer() throws SQLException, ClassNotFoundException {

        //Loading the required JDBC Driver class
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

        //Creating a connection to the database
        Connection conn = DriverManager.getConnection("jdbc:sqlserver://XXXXXXXXXXX;databaseName=Data_Table_Name;integratedSecurity=true");

        //Executing SQL query and fetching the result
        Statement st = conn.createStatement();

        //Sql query
        String sqlStr = "Select * From PropertiesTable where Username =" + "'" + currentUser + "'";

        //Execute the query
        ResultSet rs = st.executeQuery(sqlStr);

        while (rs.next()) {

            String Username = rs.getString("Username");
            String Environment = rs.getString("Environment");
            String WebDealer = rs.getString("WebDealer");
            String WebAgent = rs.getString("WebAgent");
            String WebPassword = rs.getString("WebPassword");
            String InternalUser = rs.getString("InternalUser");
            String InternalPassword = rs.getString("InternalPassword");
            String Browser = rs.getString("Browser");

            //String[] sqlArr;
            String[] sqlArr = {Username, Environment, WebDealer, WebAgent, WebPassword, InternalUser, InternalPassword, Browser};

            for (int i = 0; i < sqlArr.length; i++) {
                System.out.println(sqlArr[i]);
            }
        }
    }
}

3 个答案:

答案 0 :(得分:1)

可以为每条记录使用数组,但更好的方法是为每条记录创建一个对象,并将所有这些记录收集到一个列表中。

示例:

class Record {

    private String username;
    private String environment;
    private String webDealer;
    private String webAgent;
    private String webPassword;
    private String internalUser;
    private String internalPassword;
    private String browser;

    public Record(String username, String environment, String webDealer, String webAgent, String webPassword,
                  String internalUser, String internalPassword, String browser) {
        this.username = username;
        this.environment = environment;
        this.webDealer = webDealer;
        this.webAgent = webAgent;
        this.webPassword = webPassword;
        this.internalUser = internalUser;
        this.internalPassword = internalPassword;
        this.browser = browser;
    }

    public String getUsername() {
        return username;
    }

    public String getEnvironment() {
        return environment;
    }

    public String getWebDealer() {
        return webDealer;
    }

    public String getWebAgent() {
        return webAgent;
    }

    public String getWebPassword() {
        return webPassword;
    }

    public String getInternalUser() {
        return internalUser;
    }

    public String getInternalPassword() {
        return internalPassword;
    }

    public String getBrowser() {
        return browser;
    }
}

然后你可以使用它:

// the method signature has changed and now it returns a list of records
public List<Record> connect2SQLServer() throws SQLException, ClassNotFoundException {
    // ...


    // create the list that will hold the results (records)
    List<Record> results = new LinkedList<>();
    while (rs.next()) {

        String username = rs.getString("username");
        String environment = rs.getString("environment");
        String webDealer = rs.getString("webDealer");
        String webAgent = rs.getString("webAgent");
        String webPassword = rs.getString("webPassword");
        String internalUser = rs.getString("internalUser");
        String internalPassword = rs.getString("internalPassword");
        String browser = rs.getString("browser");

        // create a new record
        Record record = new Record(username, environment, webDealer, webAgent,
                                   webPassword, internalUser, internalPassword, browser);

        // add the record to results
        results.add(record);
    }

    return results;
}

评论:我冒昧地将变量的名称修改为。 not 以大写字母开头,以符合Java代码约定

答案 1 :(得分:0)

如果你想使用数组,那么你需要在while循环之前声明一个多维数组,指定查询将返回的行数(考虑到可以从源表中插入和删除记录,这很困难)以及表格的列数。

因此,我建议您使用嵌套的library(ggplot2) df <- data.frame( x = rep(seq(2, 15, 6.5), 2), y = c(rep(2,3), rep(6.5, 3)), h = rep(4, 6), w = rep(6, 6), info = c("78%\nmeaningless plots", "+10K\nhours wasted", "8/10\nzombies prefer brains", "ALL\ndogs go to heaven", "6\ninfoboxes", "< 0.5\ntarget pvalue"), color = factor(1:6) ) ggplot(df, aes(x, y, height = h, width = w, label = info, fill = color)) + geom_tile() + geom_text(color = "white", fontface = "bold") + coord_fixed() + scale_fill_brewer(type = "qual",palette = "Dark2") + theme_void() + guides(fill = F) 来存储记录。外ArrayList的每个ArrayList将由每条记录的每个字段的值组成。

如何完成前面提到的?

  1. 在while循环之前创建嵌套的ArrayList以累积其他ArrayList
  2. 对于循环的每次迭代,创建一个本地ArrayList来存储每条记录的字段,然后将ArrayList添加到循环外的ArrayList
  3. 确保方法ArrayList的返回类型为connect2SQLServer
  4. 返回嵌套的ArrayList<ArrayList<String>>
  5. 您可以通过创建表示源表的每个记录的具体类型来轻松扩展它,然后您不需要嵌套的ArrayList,而只需要ArrayList<ArrayList<String>>

    根据经验,您不应在ArrayList<TheType>中包含所有逻辑,因为此方法的唯一目的应该是连接到connect2SQLServer。相反,你应该有4个方法代表DBMS CRUD命令(如果你需要它们),每个方法都可以完成它的工作。但是,在这种情况下,由于您只执行读取命令,因此可以将该逻辑与SQL方法分开,使代码更容易维护,并且在代码变大时更不容易出错。

答案 2 :(得分:0)

我认为这就是你要做的事情:

public String[][] connect2SQLServer() throws SQLException, ClassNotFoundException {
    // code..
    List<String[]> data = new LinkedList<>();
    while (rs.next()) {
        // more code..
        String[] sqlArr = {Username, Environment, WebDealer, WebAgent, WebPassword, InternalUser, InternalPassword, Browser};
        data.add(sqlArr);
    }
    return data.toArray(new String[data.size()][]);
}

您的Main

public class Main {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Connect2SQLServer con = new Connect2SQLServer();
        String[][] data = con.connect2SQLServer();
    }
}