如何导出oracle数据库表中的insert语句 (在线等) 本帖最后由 t495144179 于 2011-05-07 19:21:28 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 JDBC的API都用上就差不多了~ 这样可以查到表的字段名,但是这样查要求有足够的权限才行,我试了一下,如oracle 中的scott用户是不行的,可能DBA级别可以吧,下面的是用system试的select COLUMN_NAME from dba_tab_columns where TABLE_NAME='EMP';只要查到了表名,你的问题也就解决了,简单点就拼个串应该可以OK吧~! JDBC可以查看数据库的元数据,便可以获取到具体表的相关信息,但你还要再再出数据,一条一条的拼装,应该是比较麻烦跟耗内存的操作,元数据的东东很多都可以在网上查得到 虽然大家的答案没我需要的,但我还是谢谢大家的留言!以下是小弟自己写的 ,熬了一天 自己终于把这程序写完了!哪位大仙看了,如果有好的建议可以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(); }} 呵呵。想起了一句老话,人都是逼出来的。 还不错啊。 一点小建议:数据库URL,username, password,table_name 等不要硬编码,放到配置文件里。自己读出来。这样就可以做一个通用的工具了。 怪了!初始化块里面访问实例变量的奇怪问题,高手请进解释! 求教,关于radio跳转的 关于电脑非正常关机以后,MyEclipse中项目报错的问题 java获取文件绝对路径中的空格问题 对谁能够谈谈对Spring中的事务的理解 Java文件写入的时候 用什么方法可以做到跳过n个字节开始写? 如何向jetty里部署应用程序? J2EE SDK环境变量配置问题! 高分请教!!servlet调用会话Bean 时报错!分不够再加! 请指教在oracle中怎么样才能得到一个数据库的脚本 急急急.... s标签 迭代输出 list<对象a> 中那个a的属性 哪个高手帮帮忙
select COLUMN_NAME from dba_tab_columns where TABLE_NAME='EMP';
只要查到了表名,你的问题也就解决了,简单点就拼个串应该可以OK吧~!
代码如下:
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();
}
}