这里,我们探讨的Windows和Linux环境下如果使用Java开发C/S结构的程序(命令行模式)。
案例背景,采购员希望每天定时收到未来三天内到货提醒。我提示采购员可以在ERP系统中查询到,但是他们说麻烦。如果登陆一下系统也闲麻烦的话,估计做这个提醒也不会起什么作用。既然业务部门提出需求,我们就得响应啊。ERP系统在Linux服务器上,使用的是Oracle数据库,通过一句sql很容易查询到未来三天的到货物品明细记录。
开始动手吧。
先安装JDK,并配置好环境变量JAVA_HOME和CLASSPATH,在Windows命令提示符或Linux命令行中输入java –version,能够成功打印java版本信息就说明安装好了。如果你不知道如何配置环境变量,请参照环境变量配置章节。
Windows环境下安装JDK
安装文件jdk-6u3-windows-i586-p.exe,自动安装后,配置环境变量
JAVA_HOME=C:\Program Files\Java\jdk1.6.0_03
CLASSPATH= C:\Program Files\Java\jdk1.6.0_03\lib\dt.jar; C:\Program Files\Java\jdk1.6.0_03\lib\ tools.jar;
Linux环境下安装JDK
安装文件jdk-6u16-linux-i586.rpm
通过命令 rpm –ivh jdk-6u16-linux-i586.rpm
然后在/etc/profile中配置环境变量
JAVA_HOME=/usr/java/jdk1.6.0_16;export JAVA_HOME
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:/opt/ErpQuery/bin/:/opt/ErpQuery/lib/ojdbc14.jar;export CLASSPATH
安装Eclips Java Develpoer版本。
Windows环境
使用Eclips创建一个Java项目ErpQuery
配置lib路径,将ojdbc14.jar添加到项目。
新建ErpQueryMain.java文件
内容如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class ErpQueryMain {
public static void main(String[] args)
{
//还是传统些,打印一下Hello World!吧
try
{
String DB_URL = "jdbc:oracle:thin:@192.168.0.1:1521:erp";
String DB_DRIVER = "oracle.jdbc.driver.OracleDriver";
String DB_USERNAME = "username";
String DB_PASSWORD = "password";
Connection conn = null;
Class.forName(DB_DRIVER);
//建立连接
conn = DriverManager.getConnection(DB_URL,DB_USERNAME,DB_PASSWORD); Statement s = conn.createStatement();
String sql = "select name from dual";
ResultSet rs = s.executeQuery(sql);
System.out.println("采购员");
while(rs.next())
{
//打印rs数据集中第一列
}
s.close();
//关闭数据库链接
if(!conn.isClosed()){
conn.close();
}
}
catch(Exception ex){ex.printStackTrace();}
}
}
在Eclips中按Ctrl+S,ErpQueryMain.java会自动编译成ErpQueryMain.class,可以在bin目录下找到。
打开命令提示符,设置好环境变量CLASSPATH,
E:\ErpQuery\bin>
E:\ErpQuery\bin\>set CLASSPATH = .%CLASSPATH%;E:\ErpQuery\bin\;E:\ErpQuery\lib\ojdbc14.jar;
E:\ErpQuery\bin\>echo %CLASSPATH%
E:\ErpQuery\bin\>java ErpQueryMain
我通常的做法是创建一个start.bat批处理文件
set path=C:\Program Files\Java\jdk1.6.0_03\bin;
set CLASSPATH = .%CLASSPATH%;E:\ErpQuery\bin\;E:\ErpQuery\lib\ojdbc14.jar;
java ErpQueryMain
使用start.bat总会有个黑色的命令窗口,如何把他隐藏呢?
办法总是有的,
创建一个start.vbs文件
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c start.bat",vbhide
本案例中,不合适,我们只有通过控制台才能看到输出。
Linux环境
我们并不打算在Linux上进行Java程序开发,只需要知道怎么部署就可以了。
将ErpQuery文件夹上传到Linux上,例如/opt/ErpQuery,
配置环境变量CLASSAPTH
[root@localhost opt]#CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:/opt/ErpQuery/bin/:/opt/ ErpQuery /lib/ojdbc14.jar;
[root@localhost opt]#export CLASSPATH
[root@localhost opt]#echo $CLASSPATH
[root@localhost opt]#:/usr/java/jdk1.6.0_16/lib/dt.jar:/usr/java/jdk1.6.0_16/lib/tools.jar:/opt/ErpQuery/bin/:/opt/ErpQuery/lib/ojdbc14.jar
创建start.sh文件
[root@localhost opt]#cd ErpQuery
[root@localhost ErpQuery]#cd bin
[root@localhost bin]#vi start.sh
#!/bin/sh
java ErpQueryMain > data.log
#iconv --from-code UTF-8 --to-code GBK -c data.log > data1.log
[root@localhost bin]# sh start.sh
这就可以了
iconv --from-code UTF-8 --to-code GBK -c data.log > data1.log这一句很重要,默认情况下Linux产生的文件是UTF-8格式的,如果要直接看的话,将显示是乱码,但可以通过iconv命令转换文本文件编码格式。
如果你要在cron中执行java程序,那么还需要做一些设置工作。Cron是Linux下的一个定时器,通过cron执行bash脚本时,并不会加载环境变量,所以要手动配置上。
#这一句很关键,如果不是正确的字符编码的话,通过java程序输出的中文很可能是乱码。
export LANG=zh_CN.GB2312
#定义临时环境变量
JAVA_HOME=/usr/java/jdk1.6.0_16
CLASSPATH=/usr/java/jdk1.6.0_16/lib/dt.jar:/usr/java/jdk1.6.0_16/lib/tools.jar:/opt/ErpQuery/bin/:/opt/ ErpQuery /lib/ojdbc14.jar
#注意参数-classpath要指定
$JAVA_HOME/bin/java -classpath $CLASSPATH ErpQueryMain