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();
}
}
分享到:
相关推荐
本文将深入探讨如何在C#中读取SQL Server的数据,并将其在DataGridView控件中进行展示,以此来实现数据的可视化呈现。此过程不仅涉及到了数据库连接、SQL查询语句的执行,还涵盖了数据集(DataSet)的使用以及...
Microsoft SQL Server 2005 JDBC Driver是一款由微软公司开发的Java数据库连接(JDBC)驱动程序,专门用于Java应用程序与Microsoft SQL Server 2005数据库之间的通信。这款驱动程序实现了Java Database Connectivity...
总的来说,SQL Server驱动jar包是Java开发者与SQL Server数据库交互的重要工具,通过这些jar文件,Java应用能够利用JDBC接口实现各种数据库操作,如读取数据、插入记录、更新表结构等。正确理解和使用这些jar包对于...
6. **元数据获取**:JDBC驱动允许开发者获取关于数据库架构的信息,如表结构、列信息、索引等,便于动态构建SQL语句。 7. **性能优化**:sqljdbc_1.0版本可能包含了针对SQL Server 2005的特定优化,比如TDS协议的...
在这个"Sqoop-sqlserver-hdfs.rar"压缩包中,我们有两个关键文件:sqljdbc.jar和sqoop-sqlserver-1.0.tar.gz,它们是实现SQL Server到HDFS数据迁移的关键组件。 首先,`sqljdbc.jar`是Microsoft提供的Java驱动程序...
- **创建表结构**:在SQL Server中,可以创建一个包含BLOB字段的表,如`ImagesTable`,包含一个名为`ImageData`的`varbinary(max)`字段,用于存储图片的二进制数据。 - **保存图片**:通过读取图片文件并将其转换...
private final String url = "jdbc:microsoft:sqlserver://"; private final String serverName = "localhost"; private final String portNumber = "1433"; private final String databaseName = "ckgl"; ...
- 数据库连接:使用JDBC(Java Database Connectivity)API,JSP可以建立与SQL Server的连接,执行SQL语句。 - CRUD操作:JSP页面可以实现创建(Create)、读取(Read)、更新(Update)和删除(Delete)数据库...
String url = "jdbc:sqlserver://localhost:1433;databaseName=YourDatabaseName"; String username = "your_username"; String password = "your_password"; try { // 加载驱动 Class.forName(...
在这个"jsp连接SQLserver数据库实现增删改查"的项目中,你将学习到如何结合JSP、JDBC和SQL Server来创建一个完整的Web应用。教程中的详细步骤会指导你完成每个操作,让你快速掌握数据库操作的核心技能。记住,实践是...
- **数据库设计**:可能包括商品表、用户表、购物车表等多个表,每个表都有明确的字段定义以存储相关数据。 ### 功能特点 1. **商品浏览**:用户可以查看商品列表,点击进入详情页面。 2. **购物车管理**:用户可以...
【SQL Server课程设计工资管理系统】是一个综合性的项目,旨在教授如何使用SQL Server 2005数据库管理系统与Java编程语言协同工作,构建一个实用的工资管理应用。这个系统能够帮助组织有效地跟踪和处理员工的工资...
3. 数据访问层:使用JDBC连接到SQL Server 2000,执行SQL语句以读取或写入数据。 安全性和性能优化是此类网站必须关注的要点: 1. 安全性:确保用户密码的安全存储,使用加密算法如MD5或SHA家族。防止SQL注入攻击,...
对于SQL Server,URL一般格式为`jdbc:sqlserver://<服务器地址>:<端口>;databaseName=<数据库名>`。 2. **定义实体类**:创建Java类来映射数据库表,使用Hibernate的注解(如`@Entity`, `@Table`, `@Id`等)来指定...
本项目"JSP-SQLserver2000.zip_jsp sqlserver2000"旨在帮助初学者理解如何将这两者结合,以构建一个简单的在线留言本应用。下面我们将深入探讨这两个技术以及它们在该项目中的应用。 **1. JavaServer Pages (JSP)**...
将转换后的数据文件加载到Oracle表之前,你需要创建匹配的目标表结构。 4. **连接与接口**: - 如果需要频繁进行数据迁移,可以使用ETL(Extract, Transform, Load)工具,如Oracle的Data Integrator或开源的...
同时,也需要准备SQL语句在SQL Server中创建表结构和插入数据。 4. **批处理操作**:处理大数据时,批处理是提高效率的关键。通过`Statement.addBatch()`和`Statement.executeBatch()`方法,可以一次性提交多条SQL...
【标题】"学生管理系统—图形化界面sqlserver"所涉及的知识点主要集中在以下几个方面: 1. **学生管理系统**:这是一个常见的信息系统项目,旨在通过计算机软件管理学生的个人信息、成绩、出勤、课程等数据,提高...
本压缩包“用Excel操作SQLServer数据.zip”很显然是关于如何在Excel中连接并操作SQL Server数据库的教程或指南。以下将详细阐述这个主题中的关键知识点。 首先,要实现Excel与SQL Server之间的交互,你需要了解ODBC...
4. **构建SQL插入语句**:根据CSV列名与数据库表结构对应,构造SQL的INSERT INTO语句。使用PreparedStatement的`setXXX()`方法设置参数值。 5. **执行插入操作**:调用PreparedStatement的`executeUpdate()`方法...