数据库是Oracle哪位大哥有例子和代码,发来看看没什么思路
   可邮寄:[email protected].谢谢

解决方案 »

  1.   

    java有个jxl操作excel文件的包,网上有很多小例子。。google一下,百度不行
      

  2.   

    jxl和poi都可以,jxl使用起来可能更容易一些
      

  3.   

    同上 jxl 道理就是要找到你的excel文件存放的路径 然后由jxl的一个类进行实例化 然后就能操作了
    读取的每行每列的数据 一般通过批处理 存放到数据库
      

  4.   

    package com.C10.C1001.util;import java.io.FileInputStream;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Date;
    import jxl.Cell; 
    import jxl.Sheet;
    import jxl.Workbook;
    import java.lang.StringBuffer;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.FileSystemXmlApplicationContext;
    import org.springframework.jdbc.core.support.JdbcDaoSupport;
    import java.sql.PreparedStatement; 
    public class ExtractExcel extends JdbcDaoSupport{//将excle文件导入数据库
    static String colum_name="";
    static int n=0;
    static String table_name="零件类实测库";//表名称
    static String[]row_data;//储存数据的数组
    static String ID="E:\\资料\\data.xls"; public void read_data(String table_name,String ID)//读数据
    {
     jxl.Workbook rwb = null;
     StringBuffer colum_temp=new StringBuffer("");
    try
          {
        InputStream is = new FileInputStream(ID);
            rwb= Workbook.getWorkbook(is);//将读取的excle文件建立workbook
          }
          catch (Exception e)
          {
             e.printStackTrace();
          }
          Sheet rs = rwb.getSheet(table_name);//选择表
          Cell[] colum= rs.getRow(0);//将第一行的数据分别读到colum中
          n=colum.length;//列的个数
          row_data=new String[rs.getRows()];//初始化数据的大小
          for(int i=0;i<colum.length;i++)//去掉数据中的括号用下划线代替
          {
           String a=colum[i].getContents();
           StringBuffer temp=new StringBuffer(a);
           if(a.contains("(")&&a.contains(")"))
    {

    for(int j=0;j<temp.length();j++)
    {
    if(temp.charAt(j)=='(')
    {
    temp.deleteCharAt(j);
    temp.insert(j, '_');
    }
    if(temp.charAt(j)==')')
    {
    temp.deleteCharAt(j);
    }
    }
    }
           temp.append(" ").append("varchar(100)").append(",");
           a=temp.toString();
           colum_temp.append(a);   
          }
          colum_name=colum_temp.substring(0,colum_temp.length()-1);   //生成sql语句
         System.out.println(colum_name);
          for(int i=1;i<rs.getRows();i++)//读取数据,当遇到空格时用null代替
          {
           StringBuffer a=new StringBuffer("");
           String s;
           for(int j=0;j<colum.length;j++)
           {
           Cell temp=rs.getCell(j, i);
           s=temp.getContents();        if(!(s.equals("")))
           {
           a.append(s).append(",");
           }
           if(s.equals(""))
            {
           s="null";
           a.append(s).append(",");
            }
          row_data[i-1]=a.substring(0, a.length()-1);
           }
         // System.out.println(row_data[i-1]);
          
          } }
    public void insert_data(String []row_data)throws Exception//插入数据
    {
    StringBuffer a=new StringBuffer("");
    String b="";
    System.out.println(n);
    for(int i=0;i<n;i++)
    {
    a.append("?").append(",");
    }
    b=a.substring(0, a.length()-1);
    System.out.println(b);
    Connection conn = null;
    int count=0;
    try{
    PreparedStatement pstmt ; 
    conn = this.getJdbcTemplate().getDataSource().getConnection();
    pstmt =(PreparedStatement)conn.prepareStatement("insert into data_xls values"+"("+b+")");//取得连接 
                for(int i=0;i<row_data.length-1;i++)//插入数据,遇到null的用空格代替
                {
                 String[]temp=row_data[i].split(",");
                 for(int j=1;j<=n;j++)
                 {
                 System.out.print(temp[j-1] + "  ");
                 if(!temp[j-1].equals("null"))pstmt.setString(j, temp[j-1]);
                 if(temp[j-1].equals("null"))pstmt.setString(j, " ");
                 }
                 System.out.println();
                 count++;
                 pstmt.addBatch();    //将一组参数添加到此 PreparedStatement 对象的批处理命令中
                 if(0==count%1000)//读取1000次后用执行一次
                 {
                 pstmt.executeBatch();   
                 conn.commit();//使自从上一次提交/回滚以来进行的所有更改成为持久更改,并释放此 Connection 对象当前保存的所有数据库锁定。
                        System.out.println("插入数据成功");
                 }
                }
                pstmt.executeBatch();//处理循环里未处理的数据
                conn.commit();
                System.out.println("插入数据成功");
                pstmt.close();//关闭对象           
    }catch(Throwable e){
    System.out.println("插入数据失败");
    e.printStackTrace();
    }finally{
    if(conn != null) try{
    conn.close();
    }catch(SQLException e){
    e.printStackTrace();
    }
    }
    }
    public void createResultTable(String colum)throws Exception{//创建表 Connection conn = null;
    System.out.println(colum);
    try{
    conn = this.getJdbcTemplate().getDataSource().getConnection();
    Statement s = conn.createStatement();
    String sql = "";
    sql="drop table data_xls";
    try{
    s.execute(sql);
    System.out.println("删除成功");
    }catch(Exception e)
    {
    System.out.println("无data_xls表");

    sql = "create table data_xls" +"("+colum+")";
    try{
    s.execute(sql);
    System.out.println("创建成功");
    }
    catch(Exception e)
    {
    System.out.println("创建失败");

    }catch(Throwable e){
    System.out.println("exception thrown:");
    e.printStackTrace();
    throw new Exception();
    }finally{
    if(conn != null) try{
    conn.close();
    }catch(SQLException e){
    e.printStackTrace();
    }
    }
    }
        public static void main (String[] args)
        {
         ApplicationContext context = new FileSystemXmlApplicationContext("beans-config.xml");
         ExtractExcel data= (ExtractExcel)context.getBean("ExtractExcel");//数据库连接
         data.read_data(table_name, ID);//读数据
         Date begain0=null;
         Date begain1=null;
         Date end0=null;
         Date end1=null;
         long a,b;
         begain0=new Date();
         try{
    data.createResultTable(colum_name);
    }catch(Exception e){
    System.out.print("创建失败");
    } //创建表
    end0=new Date();
    begain1=new Date();
    try{
    data.insert_data(row_data);
    }catch(Exception e){
    } //插入数据
    end1=new Date();
    a=end0.getTime()-begain0.getTime();
    b=end1.getTime()-begain1.getTime();
    System.out.print(a+","+b);

        }
       
    }这个程序的效率还可以 已经运行测试过 需要帮助联系[email protected]
      

  5.   

    Excel自带的VBA已经够强大了,绝对能满足你的要求,而且学习也来的快
      

  6.   

    jxl,用这个类就OK可以搞定啦^_^
      

  7.   

    读取Excel的话,Excel肯定是固定格式的啊,然后就用jxl来读了,poi没用过,不知道其实baidu,google更好找到例子
      

  8.   

    package com.ddns.excel;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFFont;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.hssf.util.Region;
    /**
     * Created by IntelliJ IDEA.
     * User: Administrator
     * Date: 2010-6-28
     * Time: 10:56:48
     * To change this template use File | Settings | File Templates.
     */
    public class ExcelFile {
        /**
     * 新建一个Excel文件,里面添加5行5列的内容,再添加两个高度为2的大单元格。
     *
     * @param fileName
     */
    public void writeExcel(String fileName) { //目标文件
    File file = new File(fileName);
    FileOutputStream fOut = null;
    try {
    // 创建新的Excel 工作簿
    HSSFWorkbook workbook = new HSSFWorkbook(); // 在Excel工作簿中建一工作表,其名为缺省值。
    // 也可以指定工作表的名字。
    HSSFSheet sheet = workbook.createSheet("Test_Table"); //  创建字体,红色、粗体
    HSSFFont font = workbook.createFont();
    font.setColor(HSSFFont.COLOR_RED);
    font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //  创建单元格的格式,如居中、左对齐等
    HSSFCellStyle cellStyle = workbook.createCellStyle();
    //  水平方向上居中对齐
    cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    //  垂直方向上居中对齐
    cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    //  设置字体
    cellStyle.setFont(font); //下面将建立一个4行3列的表。第一行为表头。
    int rowNum = 0;//行标
    int colNum = 0;//列标
    //建立表头信息
    // 在索引0的位置创建行(最顶端的行)
    HSSFRow row = sheet.createRow((short) rowNum);
    //  单元格
    HSSFCell cell = null;
    for (colNum = 0; colNum < 5; colNum++) {
    // 在当前行的colNum列上创建单元格
    cell = row.createCell((short) colNum); // 定义单元格为字符类型,也可以指定为日期类型、数字类型
    cell.setCellType(HSSFCell.CELL_TYPE_STRING);
    //  定义编码方式,为了支持中文,这里使用了ENCODING_UTF_16
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
    //  为单元格设置格式
    cell.setCellStyle(cellStyle); // 添加内容至单元格
    cell.setCellValue("表头名-" + colNum);
    }
    rowNum++;
    for (; rowNum < 5; rowNum++) {
    //新建第rowNum行
    row = sheet.createRow((short) rowNum);
    for (colNum = 0; colNum < 5; colNum++) {
    //在当前行的colNum位置创建单元格
    cell = row.createCell((short) colNum);
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
    cell.setCellStyle(cellStyle);
    cell.setCellValue("值-" + rowNum + "-" + colNum);
    }
    } //合并单元格
    //先创建2行5列的单元格,然后将这些单元格合并为2个大单元格
    rowNum = 5;
    for (; rowNum < 7; rowNum++) {
    row = sheet.createRow((short) rowNum);
    for (colNum = 0; colNum < 5; colNum++) {
    //在当前行的colNum位置创建单元格
    cell = row.createCell((short) colNum);
    }
    }
    //建立第一个大单元格,高度为2,宽度为2
    rowNum = 5;
    colNum = 0;
    Region region = new Region(rowNum, (short) colNum, (rowNum + 1),(short) (colNum + 1));
    sheet.addMergedRegion(region);
    //获得第一个大单元格
    cell = sheet.getRow(rowNum).getCell((short) colNum);
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
    cell.setCellStyle(cellStyle);
    cell.setCellValue("第一个大单元格"); //建立第二个大单元格,高度为2,宽度为3
    colNum = 2;
    region = new Region(rowNum, (short) colNum, (rowNum + 1),(short) (colNum + 2));
    sheet.addMergedRegion(region);
    //获得第二个大单元格
    cell = sheet.getRow(rowNum).getCell((short) colNum);
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
    cell.setCellStyle(cellStyle);
    cell.setCellValue("第二个大单元格"); //工作薄建立完成,下面将工作薄存入文件
    //新建一输出文件流
    fOut = new FileOutputStream(file);
    //把相应的Excel 工作簿存盘
    workbook.write(fOut);
    fOut.flush();
    //操作结束,关闭文件
    fOut.close(); System.out
    .println("Excel文件生成成功!Excel文件名:" + file.getAbsolutePath());
    } catch (Exception e) {
    System.out.println("Excel文件" + file.getAbsolutePath()  + "生成失败:" + e);
    } finally {
    if (fOut != null){
    try {
    fOut.close();
    } catch (IOException e1) {
    }
    }
    }
    } /**
     * 读Excel文件内容
     * @param fileName
     */
    public void readExcel(String fileName) {
    File file = new File(fileName);
    FileInputStream in = null;
    try {
    //创建对Excel工作簿文件的引用
    in = new FileInputStream(file);
    HSSFWorkbook workbook = new HSSFWorkbook(in); //创建对工作表的引用。
    //这里使用按名引用
    HSSFSheet sheet = workbook.getSheet("Test_Table");
    //也可用getSheetAt(int index)按索引引用,
    //在Excel文档中,第一张工作表的缺省索引是0,其语句为:
    //HSSFSheet sheet = workbook.getSheetAt(0); //下面读取Excel的前5行的数据
    System.out.println("下面是Excel文件" + file.getAbsolutePath() + "的内容:");
    HSSFRow row = null;
    HSSFCell cell = null;
    int rowNum = 0;//行标
    int colNum = 0;//列标
    for (; rowNum < 5; rowNum++) {
    //获取第rowNum行
    row = sheet.getRow((short) rowNum);
    for (colNum = 0; colNum < 5; colNum++) {
    // 获取当前行的colNum位置的单元格
    cell = row.getCell((short) colNum);
    System.out.print(cell.getStringCellValue() + "\t");
    }
    //换行
    System.out.println();
    } in.close();
    } catch (Exception e) {
    System.out.println("读取Excel文件" + file.getAbsolutePath() + "失败:" + e);
    } finally {
    if (in != null){
    try {
    in.close();
    } catch (IOException e1) {
    }
    }
    }
    }
    public static void main(String[] args) throws Exception {
    ExcelFile excel = new ExcelFile();
    String fileName = "D:\\记录明细.xls";
    excel.writeExcel(fileName);
    excel.readExcel(fileName);
    }
    }