Java通过unix,传入参数而不是硬编码字符串

Java通过unix,传入参数而不是硬编码字符串,java,database,string,unix,args,Java,Database,String,Unix,Args,我有以下脚本(已清理,因为其中可能包含连接字符串等敏感内容) 它工作,它工作得相当好,我唯一担心的是数据库用户名和密码在那里被硬编码,我试图找出如何在执行时传递字符串,但毫无乐趣 import java.io.PrintStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.

我有以下脚本(已清理,因为其中可能包含连接字符串等敏感内容) 它工作,它工作得相当好,我唯一担心的是数据库用户名和密码在那里被硬编码,我试图找出如何在执行时传递字符串,但毫无乐趣

import java.io.PrintStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class map_check {
  private static final String CONNECT = "ConnectionString goes here";
  private static final String Query1 = "SELECT 1 \n"+
                                       " , 2 \n"+
                                       " , 3 \n"+
                                       " , 4 \n"+
                                       " , 5 \n"+
                                       " , 6 \n"+
                                       " , 7 \n"+
                                       " , 8  \n"+
                                       "FROM db.tab.log \n"+
                                       "where   CONVERT(VARCHAR(19),StartTime,104)  \n"+
                                       "= CONVERT(VARCHAR(19),GETDATE(),104) \n"+
                                       "order by starttime asc";
  private static final String SQLUSER = "**SCOTT**";
  private static final String SQLPSWD = "**TIGER**";

  public static void main(String[] paramArrayOfString) {
    try {
      Class.forName("net.sourceforge.jtds.jdbc.Driver");
    } catch (ClassNotFoundException localClassNotFoundException1) {
      System.out.print("ClassNotFoundException: ");
      System.out.println(localClassNotFoundException1.getMessage());
      System.exit(2);
    }

    try {
      Connection SQL_CONN = DriverManager.getConnection(CONNECT, SQLUSER, SQLPSWD);

      Statement SQL_Stmt = SQL_CONN.createStatement();
      ResultSet SQL_RS = SQL_Stmt.executeQuery(Query1);
      String format = "%-40s%s%n";
      System.out.println("1, 2, 3, 4, 5, 6, 7, 8");
      while (SQL_RS.next()) {
        System.out.println(SQL_RS.getString("1")+","+
                           SQL_RS.getString("2")+","+
                           SQL_RS.getString("3")+","+
                           SQL_RS.getString("4")+","+
                           SQL_RS.getString("5")+","+
                           SQL_RS.getString("6")+","+
                           SQL_RS.getString("7")+","+
                           SQL_RS.getString("8"));
      }

      SQL_Stmt.close();
      SQL_CONN.close();

      System.exit(0);
    } catch (SQLException localSQLException) {
      System.err.println("SQLException: " + localSQLException.getMessage());
    }
  }
}

我想我是在倒行逆施,我应该在下一次“尝试”中把它们调暗吗?

万分感谢@Peter Lawrey-我明白你现在所说的,答案如下,真的很感激,java一点也不简单

import java.io.PrintStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class map_check_new {
  private static final String MAPCONNECT = "connstring";
  private static final String Query1 = "SELECT 1 \n"+
                                       " , 2 \n"+
                                       " , 3 \n"+
                                       " , 4 \n"+
                                       " , 5 \n"+
                                       " , 6 \n"+
                                       " , 7 \n"+
                                       " , 8  \n"+
                                       "FROM db.tab.audit \n"+
                                       "where   CONVERT(VARCHAR(19),StartTime,104)  \n"+
                                       "= CONVERT(VARCHAR(19),GETDATE(),104) \n"+
                                       "order by starttime asc";
  public static void main(String[] args) {
 try {
      Class.forName("net.sourceforge.jtds.jdbc.Driver");
    } catch (ClassNotFoundException localClassNotFoundException1) {
      System.out.print("ClassNotFoundException: ");
      System.out.println(localClassNotFoundException1.getMessage());
      System.exit(2);
    }

    try {
      Connection SQL_CONN = DriverManager.getConnection(CONNECT, args[0], args[1]);

      Statement SQL_Stmt = SQL_CONN.createStatement();
      ResultSet SQL_RS = SQL_Stmt.executeQuery(Query1);
      String format = "%-40s%s%n";
      System.out.println("1, 2, 3, 4, 5, 6, 7, 8");
      while (SQL_RS.next()) {
        System.out.println(SQL_RS.getString("1")+","+
                           SQL_RS.getString("2")+","+
                           SQL_RS.getString("3")+","+
                           SQL_RS.getString("4")+","+
                           SQL_RS.getString("5")+","+
                           SQL_RS.getString("6")+","+
                           SQL_RS.getString("7")+","+
                           SQL_RS.getString("8"));
      }

      SQL_Stmt.close();
      SQL_CONN.close();

      System.exit(0);
    } catch (SQLException localSQLException) {
      System.err.println("SQLException: " + localSQLException.getMessage());
    }
  }
}

传递字符串的问题到底是什么?当您通过命令行执行程序时,您可以提供以空格分隔的参数,并且它们将按照您在命令行中提供的顺序提供给main方法String[]。您可以根据参数索引访问它们。这不是你想做的吗?对不起,这里需要什么还不清楚。另外,暗显是什么意思?关于
DriverManager.getConnection(CONNECT,paramArrayOfString[0],paramArrayOfString[1])
虽然我会称它为
args
抱歉,我是Java新手,我正试图让类接受SQLUSER=“SCOTT”和SQLPSWD=“TIGER”,但作为args[0]和args[1],当我运行这个时可以调用它?我使用java-cp jtds-1.2.2.jar运行它。类的名称,并希望执行类似于java-cp jtds-1.2.2.jar的操作:。map_check“SCOTT”“TIGER”,有点我好像做错了:/Thank@PeterLawrey,我现在已经更改了这个,但是我在编译时出错了,说“map_check_new.java:23:缺少方法体,或者声明抽象公共静态void main(String[]paramArrayOfString[])^@BenCoughlan您把语法搞乱了。我建议您坚持使用公共静态voidmain(String[]args){的常见模式,直到您更加自信为止。