【发布时间】: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