第一 导入jxl.jar;sqljdbc4.jar
第二 创建数据库表users(id,name,age)
第三 创建users的model类,里面是基本属性,并生成set、get方法。
主要代码如下:
package sinosoft.com;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import jxl.Sheet;
import jxl.Workbook;
public class ImportExcel {
static String fileNames = "D://users.xls";
static Statement stmt;//命令对象
static ResultSet rs;//结果集
/**
* @param args
* @throws SQLException
*/
public static void main(String[] args) throws SQLException {
// TODO Auto-generated method stub
//addUser(); //JDBC添加数据信息
//updateUser(); //JDBC修改数据信息
//deleteUser(); //JDBC删除数据信息
//queryUser(); //JDBC查询数据信息
List<Users> usersList = new ArrayList<Users>();
String error = ImportExcelData(fileNames,usersList);
if(error != null && !"".equals(error)){
System.out.println("错误信息:"+error);
}else{
//执行导入操作
for(int i = 0 ; i< usersList.size() ;i++){
Users users = usersList.get(i);
Integer id = users.getId();
String name = users.getName();
Integer age = users.getAge();
String sql = "insert into users (id,name,age) values ("+id+","+"'"+name+"',"+age+")";
stmt = DataConnection().createStatement();
stmt.executeUpdate(sql);
System.out.println("执行添加操作:"+sql);
}
stmt.close();
}
}
/**
* jxl从excel中导入数据库(sql server 2008)
* @param fileName 文件路径
* @param usersList 读取数据
* @return
*/
public static String ImportExcelData(String fileName,List<Users> usersList){
StringBuffer error = new StringBuffer("");
File file = new File(fileName);
InputStream temStream = null;
try {
temStream = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Workbook wb = null;
try {
wb = Workbook.getWorkbook(temStream);
} catch (Exception e) {
e.printStackTrace();
}
Sheet st = wb.getSheet(0); //获取excel页
Users users = null;
for(int i=1 ; i < st.getRows() ; i++){
users = new Users();
//这块可以加验证是否合格,暂时加简单验证,在正式开发时,根据需求而定
String id = st.getCell(0,i).getContents();
String name = st.getCell(1,i).getContents();
String age = st.getCell(2,i).getContents();
//如果一行中所有单元格中内容都为空,那么就不进行处理,跳过本次操作。
if("".equals(id) && "".equals(name) && "".equals(age)){
continue;
}
if(id == null || "".equals(id)){
error.append("第"+i+"行,id不能为空。");
}else{
users.setId(Integer.parseInt(id));
}
if(name == null || "".equals(name)){
error.append("第"+i+"行,name不能为空。");
}else{
users.setName(name);
}
if(name == null || "".equals(age)){
error.append("第"+i+"行,age不能为空。");
}else{
users.setAge(Integer.parseInt(age));
}
usersList.add(users);
}
return error.toString();
}
/**
* 添加数据库信息
* @throws SQLException
*/
public static void addUser() throws SQLException{
String sql = "insert into users (id,name,age) values (5,'renxin',25)";
stmt = DataConnection().createStatement();
stmt.executeUpdate(sql);
stmt.close();
}
/**
* 修改数据库信息
* @throws SQLException
*/
public static void updateUser() throws SQLException{
String sql = "update users set name ='rrrr' where id = 5";
stmt = DataConnection().createStatement();
stmt.executeUpdate(sql);
stmt.close();
}
/**
* 删除数据库信息
* @throws SQLException
*/
public static void deleteUser() throws SQLException{
String sql = "delete from users where id = 5";
stmt = DataConnection().createStatement();
stmt.executeUpdate(sql);
stmt.close();
}
/**
* 查询数据库信息
* @throws SQLException
*/
public static void queryUser() throws SQLException{
String sql = "select * from users";
stmt = DataConnection().createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()){
System.out.println(rs.getString("id"));
System.out.println(rs.getString("name"));
System.out.println(rs.getString("age"));
}
stmt.close();
rs.close();
}
/**
* 获取数据库连接(sql server 2008)
* @return
*/
public static Connection DataConnection(){
//加载JDBC驱动
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
//连接服务器和数据库sample
String dbURL = "jdbc:sqlserver://192.168.200.133:1433;DatabaseName=renxin_demo;user=sa;password=sa";
//默认用户名
String userName = "sa";
//密码
String userPwd = "sa";
Connection dbConn = null;
try {
Class.forName(driverName);
dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
//如果连接成功 控制台输出Connection Successful!
} catch (Exception e) {
e.printStackTrace();
}
return dbConn;
}
}
注意:
1. 在导入时如果用excel2007版本时,导入时老出错。换成2003版本导入时就可以。还没找到原因。
2. 用jxl导入数据时,有一个问题就是老会读取空行。明明只有3行,可执行时有时就会多读几行。解决方法就是读取excel一行数据时,判断如果一行中每个单元格中数据都为空,那么就跳过本次操作。执行下次操作。