`

JDBC 读取sqlserver2008所有用户表的表结构

阅读更多
   package com;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
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.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 还在改进中。。。。。下面将要对比sqlserver2008和oracle类型的转换
 * 从sqlserver取出来的列类型变换成oracle的,然后在oracle创建表
 * 接着在拼接创建表结构的时候拼接insert语句,类型转换想做成xml格式。
 * 以后方便不同数据库的类型转换。
 * @author HJ
 *2010-7-31 0:53
 */
public class SqlServerTest {

	private static String JDBCURL= "jdbc:jtds:sqlserver://localhost:1433;DatabaseName=Prison";
	private static String USER = "sa";
	private static String PWD = "123456";
	private static Connection con = null;
	private static Map<String,String> type= new HashMap<String, String>();
	
	static{
		try {
			if(type != null){
				type.put("int", "number");
				type.put("text", "blob");
				type.put("nvarchar", "varchar2");
			}
			Class.forName("net.sourceforge.jtds.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		SqlServerTest t  = new SqlServerTest();
		List<String> names = t.getAllTables("mssql", "");
		for (int i = 0; i < names.size(); i++) {
			System.out.println(names.get(i));
			System.out.println(t.getTableStruct(names.get(i),"mssql"));
		}
		
	}
	
	
	/**
	 * 获取连接
	 * @return
	 */
	public static Connection getConnection(){
		
		if(con == null){
			try {
				con = DriverManager.getConnection(JDBCURL,USER,PWD);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return con;
	}
	/**
	 * 获取某种数据库中中用户的所有表
	 * @param type
	 * @param database
	 * @return
	 */
	public List<String> getAllTables(String type,String database){
		
		List<String> list = null;
		if("mssql".equals(type)){
			//查询所有用户表
			StringBuffer sql = new StringBuffer("Select NAME FROM ")
							   .append(database)
							   .append("..SysObjects Where XType='U' orDER BY Name");
			Statement sta = null;
			ResultSet rs = null;
			try {
				sta = SqlServerTest.getConnection().createStatement();
				rs = sta.executeQuery(sql.toString());
				while(rs.next()){
					if(list == null){
						list = new ArrayList<String>();
					}
					list.add(rs.getString("NAME"));
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}finally{
				try {
					if(rs != null)
						rs.close();
					if(sta != null)
						sta.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		return list;
	}
	/**
	 * 获取表结构
	 * @param tableName 表名 
	 * @param dataType 数据库类型
	 * @return
	 */
	public String getTableStruct(String tableName,String dataType){
		
		StringBuilder sb = null;
		if("mssql".equals(dataType)){
			
			sb = new StringBuilder("drop table if exists ")
			  				  .append(tableName).append(";")
			                  .append("\n")
			  				  .append("create table ")
			  				  .append(tableName)
			  				  .append("(")
			  				  .append("\n\t");
			String sql = "select * from "+tableName;
			Statement sta = null;
			ResultSet rs = null;
			ResultSet key = null;
			ResultSetMetaData ma = null;
			DatabaseMetaData meta = null;
			try {
				meta =SqlServerTest.getConnection().getMetaData();//取得数据库连接元数据
				//判断表中是否有主键列
				key = meta.getPrimaryKeys(null, null, tableName);
				String keyColumn = null;
				if(key.next()){
					keyColumn = key.getString(4);
				}
				sta = SqlServerTest.getConnection().createStatement();
				
				rs = sta.executeQuery(sql.toString());
				ma = rs.getMetaData();
				
				int countColumn = ma.getColumnCount();
				
				for(int i = 1;i<=countColumn; i++){
					 
					sb.append(ma.getColumnName(i)).append("\t").append(
						       ma.getColumnTypeName(i));
					 //判断长度是否为0
					 if(!"0".equals(ma.getColumnDisplaySize(i))){
						 sb.append("(").append(
							       ma.getColumnDisplaySize(i)).append(")");
					 }
					 //System.out.println(keyColumn);
						//判断是否为主键
					 if(ma.getColumnName(i).equals(keyColumn)){
						 sb.append("  primary key");
					 }
					
					  // 判断字段是否能为空
					 if(ma.isNullable(i) == ResultSetMetaData.columnNoNulls) {
					     sb.append(" ").append("not null");
					 }
					 // 最后一列去掉逗号
					 if (i != countColumn) {
					     sb.append(", \n\t");
					 } else {
					     sb.append("\n");
					 }
				}
				sb.append(")");
			} catch (SQLException e) {
				e.printStackTrace();
			}finally{
				try {
					if(rs != null)
						rs.close();
					if(sta != null)
						sta.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}  
			
		}
		return sb.toString();
	}
}
分享到:
评论
1 楼 yuqihengsheng 2012-12-26  
参考了~   

相关推荐

    C#中读取sql server的数据,并在datagridview中显示

    本文将深入探讨如何在C#中读取SQL Server的数据,并将其在DataGridView控件中进行展示,以此来实现数据的可视化呈现。此过程不仅涉及到了数据库连接、SQL查询语句的执行,还涵盖了数据集(DataSet)的使用以及...

    Microsoft SQL Server 2005 JDBC Driver

    Microsoft SQL Server 2005 JDBC Driver是一款由微软公司开发的Java数据库连接(JDBC)驱动程序,专门用于Java应用程序与Microsoft SQL Server 2005数据库之间的通信。这款驱动程序实现了Java Database Connectivity...

    SQLserver驱动jar包

    总的来说,SQL Server驱动jar包是Java开发者与SQL Server数据库交互的重要工具,通过这些jar文件,Java应用能够利用JDBC接口实现各种数据库操作,如读取数据、插入记录、更新表结构等。正确理解和使用这些jar包对于...

    sql server 2005 jdbc

    6. **元数据获取**:JDBC驱动允许开发者获取关于数据库架构的信息,如表结构、列信息、索引等,便于动态构建SQL语句。 7. **性能优化**:sqljdbc_1.0版本可能包含了针对SQL Server 2005的特定优化,比如TDS协议的...

    Sqoop-sqlserver-hdfs.rar

    在这个"Sqoop-sqlserver-hdfs.rar"压缩包中,我们有两个关键文件:sqljdbc.jar和sqoop-sqlserver-1.0.tar.gz,它们是实现SQL Server到HDFS数据迁移的关键组件。 首先,`sqljdbc.jar`是Microsoft提供的Java驱动程序...

    SqlServer与Oracle保存与读取图片二进制流

    - **创建表结构**:在SQL Server中,可以创建一个包含BLOB字段的表,如`ImagesTable`,包含一个名为`ImageData`的`varbinary(max)`字段,用于存储图片的二进制数据。 - **保存图片**:通过读取图片文件并将其转换...

    SQLSERVER到ORACLE的数据库迁移

    private final String url = "jdbc:microsoft:sqlserver://"; private final String serverName = "localhost"; private final String portNumber = "1433"; private final String databaseName = "ckgl"; ...

    JSP+sql server论坛例子

    - 数据库连接:使用JDBC(Java Database Connectivity)API,JSP可以建立与SQL Server的连接,执行SQL语句。 - CRUD操作:JSP页面可以实现创建(Create)、读取(Read)、更新(Update)和删除(Delete)数据库...

    java连接数sqlserver例子

    String url = "jdbc:sqlserver://localhost:1433;databaseName=YourDatabaseName"; String username = "your_username"; String password = "your_password"; try { // 加载驱动 Class.forName(...

    jsp连接SQLserver数据库实现增删改查.这是一个完整的项目

    在这个"jsp连接SQLserver数据库实现增删改查"的项目中,你将学习到如何结合JSP、JDBC和SQL Server来创建一个完整的Web应用。教程中的详细步骤会指导你完成每个操作,让你快速掌握数据库操作的核心技能。记住,实践是...

    JSP购物车SQLSERVER版

    - **数据库设计**:可能包括商品表、用户表、购物车表等多个表,每个表都有明确的字段定义以存储相关数据。 ### 功能特点 1. **商品浏览**:用户可以查看商品列表,点击进入详情页面。 2. **购物车管理**:用户可以...

    SQL Server课程设计工资管理系统

    【SQL Server课程设计工资管理系统】是一个综合性的项目,旨在教授如何使用SQL Server 2005数据库管理系统与Java编程语言协同工作,构建一个实用的工资管理应用。这个系统能够帮助组织有效地跟踪和处理员工的工资...

    jsp+SQL Server 2000人才招聘网站

    3. 数据访问层:使用JDBC连接到SQL Server 2000,执行SQL语句以读取或写入数据。 安全性和性能优化是此类网站必须关注的要点: 1. 安全性:确保用户密码的安全存储,使用加密算法如MD5或SHA家族。防止SQL注入攻击,...

    Hibernate连接Sql Server所需的jar包

    对于SQL Server,URL一般格式为`jdbc:sqlserver://&lt;服务器地址&gt;:&lt;端口&gt;;databaseName=&lt;数据库名&gt;`。 2. **定义实体类**:创建Java类来映射数据库表,使用Hibernate的注解(如`@Entity`, `@Table`, `@Id`等)来指定...

    JSP-SQLserver2000.zip_jsp sqlserver2000

    本项目"JSP-SQLserver2000.zip_jsp sqlserver2000"旨在帮助初学者理解如何将这两者结合,以构建一个简单的在线留言本应用。下面我们将深入探讨这两个技术以及它们在该项目中的应用。 **1. JavaServer Pages (JSP)**...

    SQL Server导入Oracle数据库

    将转换后的数据文件加载到Oracle表之前,你需要创建匹配的目标表结构。 4. **连接与接口**: - 如果需要频繁进行数据迁移,可以使用ETL(Extract, Transform, Load)工具,如Oracle的Data Integrator或开源的...

    java实现oracle和sqlserver数据库转换(包含大数据)

    同时,也需要准备SQL语句在SQL Server中创建表结构和插入数据。 4. **批处理操作**:处理大数据时,批处理是提高效率的关键。通过`Statement.addBatch()`和`Statement.executeBatch()`方法,可以一次性提交多条SQL...

    学生管理系统—图形化界面sqlserver

    【标题】"学生管理系统—图形化界面sqlserver"所涉及的知识点主要集中在以下几个方面: 1. **学生管理系统**:这是一个常见的信息系统项目,旨在通过计算机软件管理学生的个人信息、成绩、出勤、课程等数据,提高...

    用Excel操作SQLServer数据.zip

    本压缩包“用Excel操作SQLServer数据.zip”很显然是关于如何在Excel中连接并操作SQL Server数据库的教程或指南。以下将详细阐述这个主题中的关键知识点。 首先,要实现Excel与SQL Server之间的交互,你需要了解ODBC...

    java导入csv到sqlserver数据库的简单实现

    4. **构建SQL插入语句**:根据CSV列名与数据库表结构对应,构造SQL的INSERT INTO语句。使用PreparedStatement的`setXXX()`方法设置参数值。 5. **执行插入操作**:调用PreparedStatement的`executeUpdate()`方法...

Global site tag (gtag.js) - Google Analytics