2014-05-22 4 views
-1

그리고 다음과 같은 스크립트 (연결 문자열과 같은 민감한 내용이있을 수 있으므로 청소)가 적용됩니다. DB 사용자 이름과 암호가 하드 코딩 된 것에 대해 걱정하고 있습니다. 실행하면서 문자열을 전달하는 방법을 알아 내려고 노력했지만 기쁨은 없습니다.유닉스를 통한 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 { 
    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()); 
    } 
    } 
} 

나는 모두를 거꾸로하고 있다고 생각하는데, 나는 다음 "시도"안에 그들을 어둡게해야합니까?

+0

문자열을 전달할 때의 문제는 무엇입니까? 명령 줄을 통해 프로그램을 실행하면 공백으로 구분 된 인수를 줄 수 있으며 명령 줄에서 제공 한 순서대로 기본 메서드 String []에 제공됩니다. 매개 변수 인덱스를 기반으로 액세스 할 수 있습니다. 그게 네가하고 싶은 일이 아닌가? 실례합니다.하지만 여기서 필요한 것이 무엇인지 명확하게 알 수는 없습니다. 또한 디밍으로 무엇을 의미합니까? – prabugp

+1

'DriverManager.getConnection (CONNECT, paramArrayOfString [0], paramArrayOfString [1])은''그냥''args '라고 부릅니다. –

+0

사과, 나는 Java를 처음 사용하는데 수업을 들으려고 노력하고 있습니다. SQLUSER = "** SCOTT **"및 SQLPSWD = "** TIGER **"에서 실행하지만 args [0] 및 args [1]로 실행하면 호출 할 수 있습니까? java -cp jtds-1.2.2.jar :와 함께 실행합니다. class_name이며, java -cp jtds-1.2.2.jar :와 같은 것을하고 싶습니다. map_check "SCOTT" "TIGER", 조금 잘못하고있는 것 같습니다 :/ –

답변

0

감사합니다. @Peter Lawrey - 당신이 지금 말한 것을 얻었습니다. 답변은 아래에 있습니다. 정말 감사합니다.

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()); 
    } 
    } 
} 
관련 문제