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){的常见模式,直到您更加自信为止。