微软的ODBC驱动程序把工作表中的第一行作为列名(译者注:即字段名),工作表名作为数据库表名。
要通过JDBC访问工作表,我们还必须创建一个新的ODBC数据源,在Windows 2000系统上创建数据源的过程如下:
进入“控制面板” --> “管理工具” --> “数据源(ODBC)”,(译者注:打开后选择系统DSN),点击添加,在弹出窗口中选择“Driver do Microsoft Excel(*.xls)”
然后在数据源名处输入一个名字myexcel(译者注:相当于数据库名),然后点击“选择工作簿”,然后找到并选取你要读取的Excel文件。点击确定,系统数据源列表中会出现你设置的数据源名称,点击确定完成配置。
注:现在如果我们想挑出test1列中的所有“测试”值,那就需要用以下的SQL查询:
SELECT test1 FROM [Sheet1$] WHERE test1=‘测试‘
要注意的是工作表名后面跟了一个“$”符号,这个符号是不可缺少的。因为他的前后有方括号,因为“$”是SQL语句中的保留字。
下面是例子程序:
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.DriverManager;
public class ExcelReader {
public static void main( String[] args ) {
Connection c = null;
Statement stmnt = null;
try {
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
c = DriverManager.getConnection( "jdbc:odbc:myexcel", "", "" );
stmnt = c.createStatement();
String query = "SELECT test1 FROM [Sheet1$] WHERE test1=‘测试‘";
ResultSet rs = stmnt.executeQuery( query );
System.out.println( "查得匹配‘测试‘的test1的记录为:" );
while( rs.next() ) {
System.out.println( rs.getString( "test1" ) );
}
}
catch( Exception e ) {
System.err.println( e );
}
finally {
try {
stmnt.close();
c.close();
}
catch( Exception e ) {
System.err.println( e );
}
}
}
}
另外,该程序为读取Excel中所有记录的程序:
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.DriverManager;
public class ExcelReader {
//ODBC连接Excel
public static void main(String[] args) {
Connection conn = null;
Statement stm = null;
ResultSet rs = null;
try {
//加载ODBC驱动
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//创建连接对象
conn = DriverManager.getConnection("jdbc:odbc:myexcel");
stm = conn.createStatement();//创建Statement对象
String sql = "select * from [sheet1$]";//查询excel中的工作表时后面要加上$符号并在最外层加上[]
rs = stm.executeQuery(sql);//执行sql语句,得到查询结果集
//遍历结果集
while(rs.next()){
//输出每一行记录的相关数据
//System.out.println(rs.getString("name")+"-"+rs.getInt("age"));
System.out.println(rs.getString(1)+"-"+rs.getInt(2));//可以通过上一行代码利用列名进行获取数据,也可以用列数来获取数据,列数从1开始
}catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
if (rs != null) {
rs.close();
}
if (stm != null) {
stm.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e2) {
e2.printStackTrace();
}
}
}