本帖最后由 t495144179 于 2011-05-07 19:21:28 编辑

解决方案 »

  1.   

    JDBC的API都用上就差不多了~
      

  2.   

    这样可以查到表的字段名,但是这样查要求有足够的权限才行,我试了一下,如oracle 中的scott用户是不行的,可能DBA级别可以吧,下面的是用system试的
    select COLUMN_NAME from dba_tab_columns where TABLE_NAME='EMP';
    只要查到了表名,你的问题也就解决了,简单点就拼个串应该可以OK吧~!
      

  3.   

    JDBC可以查看数据库的元数据,便可以获取到具体表的相关信息,但你还要再再出数据,一条一条的拼装,应该是比较麻烦跟耗内存的操作,元数据的东东很多都可以在网上查得到
      

  4.   

    虽然大家的答案没我需要的,但我还是谢谢大家的留言!以下是小弟自己写的 ,熬了一天 自己终于把这程序写完了!哪位大仙看了,如果有好的建议可以M我哦!
    代码如下:
    package com.tym;import java.io.FileWriter;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;/**
     * 
     *  实现到导出Oracle中表的insert语句
     *
     *
     */
    public class Derive { public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException {
      
       //加载驱动程序
       Class.forName("oracle.jdbc.driver.OracleDriver");
       //打开连接
           Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:tian", "tian", "tian");
           //输入
           Scanner scanner= new Scanner(System.in);
           System.out.println("请输入你要导出表的名字:");
           String tableName=scanner.next();
           
           
           //定义column集合保存所有的字段名
           List<String> column= new ArrayList<String>();
           //定以list集合保存表中的数据
           List<String> list= new ArrayList<String>();
           //sql语句
           String sql ="select * from "+tableName;
           //执行sql
           PreparedStatement prst =conn.prepareStatement(sql);
           //返回结果
           ResultSet rs = prst.executeQuery();
           //获取关于 ResultSet 对象中列的类型和属性信息的对象
           ResultSetMetaData rmd = rs.getMetaData();
           //循环得到所有的字段名字保存到column集合中
           for(int i=1;i<=rmd.getColumnCount();i++)
           {
                column.add(rmd.getColumnName(i));
           } 
           //System.out.println(column);
           //循环读出表中数据,保存到list集合中
           while(rs.next())
           {
            //从column集合中取得数据,便于读出数据库表的数据
            for (String n:column)
            {
            //取得数据
     n=rs.getString(n);
     //加载到list中
     list.add(n);
       }
           }
           String str="";
           //定义st集合,用于保存一个对象数据
           List<String> st=null;
           //column的长度, 也就是列数
           int num =column.size();
           
           StringBuffer sb2= new StringBuffer();
           //保存最终的sql语句
           String insert="";
           int r=0;
           while(r<list.size())
           {
            //截取集合,得到一个对象的数据
            st=list.subList(r,r+num);
           
            //定义Stringbuffer截取字符串
            StringBuffer sb = new StringBuffer();
            //循环出单个的值
            for (int i = 0; i<st.size(); i++)
            {
     String ss=st.get(i);
     if(i==st.size()-1)
     {
     sb.append("'"+ss+"'");
     }else
     {
     sb.append("'"+ss+"'"+","); 
     }
     //拼写insert语句
            str="insert into "+tableName+" values("+sb+");";
       }
                 sb2.append(str);
             insert=sb2.toString();
            
             r=r+num;
           }
           
           /*
               * 创建输出流对象
                */
            FileWriter fw = new FileWriter("d:\\aa.sql");
            //把insert放到fw所指的文件夹中
            fw.write(insert);
            //关闭输出流
            if(null!=fw)
            {
             fw.close();
            }
      
         /*
          * 关闭相关连接
          */
           rs.close();
           prst.close();
           conn.close();
    }
    }
     
      

  5.   

    呵呵。想起了一句老话,人都是逼出来的。 还不错啊。 一点小建议:数据库URL,username, password,table_name 等不要硬编码,放到配置文件里。自己读出来。这样就可以做一个通用的工具了。