`
gaojingsong
  • 浏览: 1211209 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【Java操作表元数据备份数据】Select2Insert ---2011年代码

阅读更多

代码作用:通过java查询表的元数据,然后把查询出来的数据转为Insert语句输出到文件中进行备份。

改进:

      刚毕业那会代码写的比较乱,没设计模式和分模块思想,没按照C语言的函数功能完成编码,有待改进。

      数据量太多会内存溢出,可以采用数据库分页思想解决。关于数据库分页可以参考:

              http://gaojingsong.iteye.com/blog/2266950【数据库分页】

      表太多,备份太慢,可以通过java多线程思想解决。

 

package com.nasoft.test;

 

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.io.PrintStream;

import java.io.Writer;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.List;

 

/**

 * @把一个表的Select语句转化为Insert语句,做备份使用

 */

public class TestInsert {

 

//public static final String DRIVER="com.mysql.jdbc.Driver";

//

//public static final String URL="jdbc:mysql://localhost:3306/test";

//

//public static final String USERNAME="root";

//

//public static final String PASSWORD="123";

 

//public static final String DRIVER="oracle.jdbc.driver.OracleDriver";

//

//public static final String URL="jdbc:oracle:thin:@localhost:1521:ORCL";

//

//public static final String USERNAME="scott";

//

//public static final String PASSWORD="scottoracle";

 

public static final String DRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";

 

public static final String URL="jdbc:sqlserver://localhost:1433;DatabaseName=cibcdb";

 

public static final String USERNAME="sa";

 

public static final String PASSWORD="sql";

 

public Connection  getConn(){

Connection conn = null;

try {

Class.forName(DRIVER);

conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);

} catch (ClassNotFoundException e) {

e.printStackTrace();

}catch (SQLException e) {

e.printStackTrace();

}

return conn; //The local variable conn may not have been initialized:局部变量的使用必须初始化

}

 

public void init(String tableName){

Connection conn = this.getConn();

String sql ="select top 10 * from "+tableName;

try {

Statement stm = conn.createStatement();

ResultSet rs = stm.executeQuery(sql);

ResultSetMetaData rmd = rs.getMetaData();

int columncount = rmd.getColumnCount(); //得到列的数量

//

//    System.out.println(rmd.getCatalogName(1)); // 得到数据库的名称

//rmd.getColumnClassName(1);

//System.out.println(rmd.getTableName(1)); //得到表的名字

 

rmd.getColumnType(1); //获取指定列的 SQL 类型

System.out.println(rmd.getColumnType(1));

rmd.getColumnTypeName(1);

//System.out.println(rmd.getColumnTypeName(1)); //CHAR:字段对应的数据库中类型

//System.out.println(rmd.getColumnClassName(3));

                        //java.lang.String:字段对应的Java 数据类型

//stm.executeQuery(sql)

 

 

StringBuffer sb1 =  new StringBuffer();

for(int k=1 ;k <= columncount ;k++){

//String columntype = rmd.getColumnClassName(k);

String columnName = rmd.getColumnLabel(k);

//System.out.println(columntype + "---" +columnName);

if(k < columncount){

sb1.append(columnName+",");

}else{

sb1.append(columnName+") values(");

}

}

while(rs.next()){

StringBuffer sb =  new StringBuffer();

String insertsql="insert into "+tableName+"(";

sb.append(insertsql).append(sb1);

 

for(int i=1 ;i <=columncount ;i++){

String columntype = rmd.getColumnClassName(i);

if(i < columncount){

if(columntype.contains("Integer")){ //如果数字类型

sb.append(rs.getObject(i)+",");

else 

{

String str= (String) rs.getObject(i);

if(null ==str || "".equals(str)){

sb.append("'',");

}else {

sb.append("'"+str.trim()+"',");

}

}

}else{

if(columntype.contains("Integer")){ //如果数字类型

sb.append(rs.getObject(i));

else 

{

String str= (String) rs.getObject(i);

if(null ==str || "".equals(str)){

sb.append("'',");

}else {

sb.append("'"+str.trim()+"',");

}

}

}

}

//System.out.println( sb.toString()+");");

 

ExportTOFile(tableName,sb.toString()+");");

 

} catch (SQLException e) {

e.printStackTrace();

}

}

 

public void ExportTOFile001(String tableName,String sql){

File file = new File("D:/"+tableName+".sql");

FileOutputStream out = null;

try {

out = new FileOutputStream(file,true);

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

PrintStream pin = new PrintStream(out);

//System.setOut(pin.println());

pin.println(sql);

pin.close();

}

 

public void ExportTOFile(String tableName,String sql){

File file = new File("D:/"+tableName+".sql");

FileOutputStream out = null;

try {

out = new FileOutputStream(file,true);

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

Writer wr = new OutputStreamWriter(out);

try {

wr.write(sql+"\n");

wr.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

 

}

 

public List<String>  getTableName() throws Exception{

List list = new ArrayList();

Connection conn = this.getConn();

//String sql ="show tables";    MYSQL

String sql ="select * from tab";  //ORACLE

sql ="sp_help";  //SQL Server

Statement stm = conn.createStatement();

ResultSet rs = stm.executeQuery(sql);

while(rs.next()){

String tabname= rs.getString(1);

String type = rs.getString(3);

if("user table".equalsIgnoreCase(type)){

list.add(tabname);

}

}

 

return list;

}

 

 

public static void main(String[] args) throws Exception {

//tb_user

TestInsert tt = new TestInsert();

//tt.init("tb_user");

 

List<String> list = tt.getTableName();

for (int i = 0; i < list.size(); i++) {

//System.out.println(list.get(i));

tt.init(list.get(i));

}

 

}

 

}

 

0
3
分享到:
评论

相关推荐

    SQL SERVER 将select数据生成insert语句

    在SQL Server中,有时我们需要将一个数据库中的表结构和数据迁移到另一个数据库,或者备份部分数据以便于恢复或分析。在这种情况下,`SELECT INTO` 和 `INSERT INTO...SELECT` 语句是常用的工具,可以将数据从一个源...

    Insert-and-Select.zip_jsp insert

    在JavaServer Pages (JSP) 中,`SELECT` 和 `INSERT` 功能是数据库操作的基础,主要用于从数据库中检索数据和向数据库中插入新的记录。本文将深入探讨这两个概念及其在JSP中的实现。 首先,`SELECT` 语句是SQL中最...

    在同一数据库中将一个表中文件备份到另一个表

    本教程将聚焦于如何使用Java编程语言实现在Oracle同一数据库内将一个表中的文件备份到另一个表,这对于初学者来说是一次极好的学习机会。 首先,我们需要理解Oracle数据库的基础。Oracle数据库是一个关系型数据库...

    将sqlserver表中指定数据转化为insert语句

    在SQL Server中,有时我们需要将现有表中的特定数据导出为INSERT语句,以便在其他数据库或备份中重建这些记录。这通常在迁移数据、创建测试数据或者进行数据备份时非常有用。以下是如何将SQL Server表中指定数据转化...

    MYSQL SELECT INTO 和 INSERT INTO SELECT

    `INSERT INTO SELECT`语句主要用于将一个表中的数据复制到另一个已经存在的表中。这种方法不仅可以实现数据的简单复制,还可以根据需要对数据进行筛选和转换。此外,由于目标表已存在,因此可以在插入源表字段的同时...

    java备份mysql数据库

    标题“Java备份MySQL数据库”指的是使用Java编程语言来创建一个程序,该程序能够对MySQL数据库进行备份操作。这种备份通常涉及导出数据库的结构和数据,以便在需要时可以恢复到某个特定时间点的状态。在Java中实现这...

    select into和insert into select使用方法

    在数据库管理与操作中,`SELECT INTO`与`INSERT INTO SELECT FROM`是两种常见的用于复制或创建新表的方式。这两种语句虽然相似,但在实际使用场景中有着不同的作用和限制条件。 #### 1. `SELECT INTO` `SELECT ...

    基于Java的实例源码-备份数据源.zip

    2. **执行SQL备份命令**:备份过程可能涉及执行特定的SQL命令,比如在MySQL中,可以使用`mysqldump`工具生成SQL脚本,或者直接使用`SELECT INTO OUTFILE`命令将数据导出到文件。在Java中,你可以通过Statement或...

    JAVA将一个数据中数据定时自动复制(抽取)到另一个数据库

    在IT行业中,数据库同步是一个常见的需求,特别是在分布式系统或者数据备份场景下。本文将深入探讨如何使用Java编程语言实现从一个数据库中定时自动抽取数据并复制到另一个数据库,以达到数据库间的实时或近实时同步...

    insert-query-in-postgres-database.zip_in_postgres

    在PostgreSQL数据库中,插入查询是用于将新数据添加到现有表中的基本操作。这篇教程将深入探讨如何在PostgreSQL中执行插入查询,包括基本语法、插入多行数据、使用常量值、从其他表或查询中插入数据,以及处理日期和...

    db2常用命令 备份还原表

    根据给定文件的信息,我们可以总结出以下关于DB2数据库管理系统的相关知识点,这些知识点主要集中在DB2的常用命令、数据库的备份与恢复技术上,并且特别提到了对大对象表的操作。 ### DB2常用命令概览 #### 一、...

    SQL SERVER:把表里的数据导出成为INSERT INTO脚本的存储过程

    此存储过程将适用于多种数据类型,并能够动态生成插入语句,以便用户可以方便地导出数据作为脚本来进行备份或迁移等操作。 ### SQL Server 存储过程设计 #### 1. 存储过程概述 该存储过程的主要功能是接受一个表名...

    将数据库中的数据转换成insert语句

    在数据库管理与维护的过程中,经常会遇到需要导出表数据作为备份或迁移至其他环境的情况。本文档介绍了一种通过编写存储过程来实现这一目标的方法:将数据库中的数据转换为SQL INSERT语句。 #### 一、存储过程概述 ...

    insert-select-PostgreSQL

    在PostgreSQL这种强大的开源关系型数据库管理系统中,`INSERT INTO SELECT`语句被广泛用于从一个或多个表中选取数据,并将这些数据插入到另一个表中。这在处理大量数据时特别有用,例如在数据仓库环境中,数据需要...

    bootstrap-select 下拉框demo(含多种样式)

    bootstrap-select 下拉框demobootstrap-select 下拉框demobootstrap-select 下拉框demobootstrap-select 下拉框demobootstrap-select 下拉框demobootstrap-select 下拉框demobootstrap-select 下拉框demobootstrap-...

    备份和恢复MYSQL数据表

    本文将详细介绍如何使用 MySQL 命令行工具进行数据表的备份和恢复操作。 #### 一、备份数据表 **1. 使用 mysqldump 进行备份** `mysqldump` 是 MySQL 提供的一个非常强大的备份工具,它可以将整个数据库或者指定...

    ORACLE INSERT INTO SELECT *FROM 分批提交例子

    ORACLE INSERT INTO SELECT *FROM 分批提交例子

    Oracle导出INSERT语句V1.1

    在日常数据库管理和开发过程中,有时我们需要将Oracle数据库中的数据导出为INSERT语句,以便在其他环境或者备份恢复时使用。"Oracle导出INSERT语句V1.1"是一个专门为此目的设计的实用工具。 这个工具的主要功能是...

    java备份还原数据库

    - **逻辑备份**:通过执行SQL语句导出数据,例如`SELECT INTO OUTFILE`或`mysqldump --no-create-info`。Java可以连接到数据库并执行这些语句,然后将结果保存到文件。 2. **MySQL备份** - 使用`JDBC`驱动连接...

    Insert,Select,Update和Delete。

    本文将深入探讨四个基本的数据操作语句——Insert、Select、Update和Delete,这四个语句构成了SQL的核心功能,并通过它们来介绍比较操作符、选择断言以及三值逻辑等内容。 #### 一、Insert语句 **定义与用途**: -...

Global site tag (gtag.js) - Google Analytics