jxl 从excel导入数据到数据库中;java中jdbc连接数据库

来源:互联网 发布:数据库decode 编辑:程序博客网 时间:2024/05/22 07:06

第一 导入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一行数据时,判断如果一行中每个单元格中数据都为空,那么就跳过本次操作。执行下次操作。