【问题标题】:passing multiple arguments in java在java中传递多个参数
【发布时间】:2019-09-02 06:39:22
【问题描述】:

我有以下代码为我工作。

import java.sql.*;
class MyClass {
  public static void main (String[] Owner ) throws Exception
  {
   Class.forName ("oracle.jdbc.OracleDriver");

   Connection conn = DriverManager.getConnection
     ("jdbc:oracle:thin:@//host:port/SID", "username", "password");

   try {
     Statement stmt = conn.createStatement();

     try {
          for (int i=0; i < owner.length; i++){
             String consumerName =  "TestConsumer";
             ResultSet msgs = Stmt.executeQuery("select msg_id from Table where owner = '" + owner[i] + "' and consumer_name = '" + consumerName + "' and msg_state = 'READY'" );

                   while (msgs.next())
                     System.out.println (msgs.getString(1));
                                     try { msgs.close(); } catch (Exception closeMsgsExcp) {}
             } 
        }     

            finally {
             try { stmt.close(); } catch (Exception closeStmtExcp) {}
               }
      } 

      finally {
           try { conn.close(); } catch (Exception closeConnExcp) {}
             }

   }

}

但是当我尝试将此代码更改为以下代码时,我收到一个错误 - 错误:在 MyClass 类中找不到主方法,请将主方法定义为:public static void main(String[] args)。 我需要接收 owner 和 consumerName 作为我的程序的参数/输入。

import java.sql.*;
class MyClass {
  public static void main (String[] Owner, String[] consumerName ) throws Exception
  {
   Class.forName ("oracle.jdbc.OracleDriver");

   Connection conn = DriverManager.getConnection
     ("jdbc:oracle:thin:@//host:port/SID", "username", "password");

   try {
     Statement stmt = conn.createStatement();

     try {
          for (int i=0; i < owner.length; i++){
             //String consumerName =  "TestConsumer";
             ResultSet msgs = Stmt.executeQuery("select msg_id from Table where owner = '" + owner[i] + "' and consumer_name = '" + consumerName[i] + "' and msg_state = 'READY'" );

                   while (msgs.next())
                     System.out.println (msgs.getString(1));
                                     try { msgs.close(); } catch (Exception closeMsgsExcp) {}
             } 
        }     

            finally {
             try { stmt.close(); } catch (Exception closeStmtExcp) {}
               }
      } 

      finally {
           try { conn.close(); } catch (Exception closeConnExcp) {}
             }

   }

}

,这怎么办?

【问题讨论】:

  • main 接受String[] args。你想传递两个字符串:所有者和消费者。它们将分别是args[0]args[1]
  • main 方法应该总是只有一个参数,类型为String[]。你真的需要多个所有者和多个消费者吗?如果没有,只需使用public static void main(String[] args),然后使用String owner = args[0]; String consumer = args[1];。接下来,您应该一定阅读参数化 SQL,而不是将值直接嵌入到 SQL 中。
  • 又一个“在不了解基础知识的情况下编写高级内容(持久性,...)”的案例,只需将所有输入放在单个字符串数组中即可。当你从命令提示符调用它时,你如何让你的程序知道哪个数组在哪里结束?
  • 我需要多个所有者和多个消费者@Jon Skeet
  • @HarisRahim 没有改变可用作入口点的主要方法的签名是固定的这一事实。

标签: java


【解决方案1】:

使用String-Array传入参数,main-Method只有args参数。

Java Doc: Main Method

您可以将所有所有者传递到数组中,然后将限制器字符串放入其中(不能是所有者或消费者),然后将所有消费者放入数组中。主要是遍历 args-array 并创建它的两个数组。

【讨论】:

  • 他正在使用字符串数组。最好指出使用 SINGLE String 数组。
  • 我可以将此主要方法更改为名为 MyMethod 的不同方法,然后该方法可以具有 2 个字符串数组(?),然后从将 2 个字符串数组作为 args 传递的主要方法调用它( ?)。
  • 启动应用程序时调用的方法必须是public static void main(String[] name)(参见上面的链接)。该方法可以调用其他方法,但名称必须为main。如果你想调用另一个方法(有两个数组),你必须从 args-array 中提取两个字符串。
  • 感谢@JensK 和 Jon Skeet 的建议,我现在采用一组 owner:consumer .... 然后拆分它。
【解决方案2】:

您不能更改 public static void main 的语法。

【讨论】:

  • 好吧,你可以——只是以后不能用它作为入口点。
猜你喜欢
  • 1970-01-01
  • 2012-05-20
  • 2012-07-30
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多