0 0

关于一个jdbcUtil的底层工具的使用10

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

import org.hibernate.Hibernate;
import org.hibernate.type.NullableType;



public class JDBCUtil {
	public static class Column {      
		        public String name;      
		        public int sqlType;      
		        public int sqlColumnLength;      
		        public int sqlDecimalLength;      
		        public boolean sqlNotNull;      
		        public boolean sqlReadOnly;      
		        public NullableType hibernateType;      
		        public Class javaType;      
		        public String sqlTypeName;      
		        public String defalutValue;      
		        public boolean equals(Object o) {      
		            boolean rv = false;      
		            if (o != null && o instanceof JDBCUtil.Column) {      
		                rv = (name.equals(((JDBCUtil.Column)o).name));      
		            }      
		            return rv;      
		        }      
		        public int hashCode() {      
		            return (name != null) ? name.hashCode() : 0;      
		        }      
		        public String getName() {      
		            return name;      
		        }      
		        public void setName(String name) {      
		            this.name = name;      
		        }      
		        public NullableType getHibernateType() {      
		           return hibernateType;      
		        }      
		        public void setHibernateType(NullableType hibernateType) {      
		            this.hibernateType = hibernateType;      
		        }      
		        public Class getJavaType() {      
		            return javaType;      
		        }      
		        public void setJavaType(Class javaType) {      
		            this.javaType = javaType;      
		        }      
		       public int getSqlColumnLength() {      
		            return sqlColumnLength;      
		       }      
		        public void setSqlColumnLength(int sqlColumnLength) {      
		           this.sqlColumnLength = sqlColumnLength;      
		        }      
		        public int getSqlDecimalLength() {      
		            return sqlDecimalLength;      
		        }      
		        public void setSqlDecimalLength(int sqlDecimalLength) {      
		            this.sqlDecimalLength = sqlDecimalLength;      
		        }      
		        public boolean isSqlNotNull() {      
		            return sqlNotNull;      
		       }      
		        public void setSqlNotNull(boolean sqlNotNull) {      
		            this.sqlNotNull = sqlNotNull;      
		        }      
		        public boolean isSqlReadOnly() {      
		            return sqlReadOnly;      
		        }      
		        public void setSqlReadOnly(boolean sqlReadOnly) {      
		            this.sqlReadOnly = sqlReadOnly;      
		        }      
		        public int getSqlType() {      
		            return sqlType;      
		        }      
		        public void setSqlType(int sqlType) {      
		            this.sqlType = sqlType;      
		        }      
		        public String getSqlTypeName() {      
		            return sqlTypeName;      
		        }      
		        public void setSqlTypeName(String sqlTypeName) {      
		            this.sqlTypeName = sqlTypeName;      
		        }      
		        public String getDefalutValue() {      
		            return defalutValue;      
		        }      
		        public void setDefalutValue(String defalutValue) {      
		            this.defalutValue = defalutValue;      
		        }      
	            
		              
		    };      
	public static List getTableColumns(Connection c, String catalog, String schema, String table, String columnPattern) throws SQLException {      
	        DatabaseMetaData dmd = c.getMetaData();      
	        ResultSet rs = null;      
	        try {      
	            rs = dmd.getColumns(catalog, schema, table, columnPattern);      
	            List columns = new LinkedList();      
	            while (rs.next()) {      
	                JDBCUtil.Column aCol = new JDBCUtil.Column();      
	                aCol.sqlTypeName = rs.getString(6);      
	                aCol.defalutValue = rs.getString(13);      
	                aCol.name = rs.getString(4);      
	                aCol.sqlType = rs.getShort(5);      
		                aCol.sqlColumnLength=rs.getInt(7);      
		              aCol.sqlDecimalLength=rs.getInt(9);      
		              aCol.sqlNotNull = ("NO".equals(rs.getString(18)));      
		            aCol.hibernateType = getHibernateType(      
		                  aCol.sqlType,      
		                 aCol.sqlColumnLength,      
		                   aCol.sqlDecimalLength      
		                );      
		               aCol.javaType = getJavaType(      
		                  aCol.sqlType,      
		                   aCol.sqlColumnLength,      
		                  aCol.sqlDecimalLength      
		               );      
		                columns.add(aCol);      
	           }      
		           return columns;      
		        }      
		        finally {      
		            if (rs != null) rs.close();      
		       }      
		             
		   }     
	 public static Class getJavaType(int sqlType, int columnSize, int decimalDigits) {      
		         Class rv=String.class;      
		         if (sqlType == Types.CHAR || sqlType == Types.VARCHAR) {      
		             rv = String.class;      
		         }      
		         else if (sqlType == Types.FLOAT || sqlType == Types.REAL) {      
		             rv = Float.class;      
		         }      
		         else if (sqlType == Types.INTEGER) {      
		             rv = Integer.class;      
		         }      
		         else if (sqlType == Types.DOUBLE) {      
		             rv = Double.class;      
		         }      
		         else if (sqlType == Types.DATE) {      
		             //rv = java.util.Date.class;      
		             rv = String.class;      
		         }      
		         else if (sqlType == Types.TIMESTAMP) {      
		             //rv = java.util.Date.class;      
		             rv = String.class;      
		         }      
		         else if (sqlType == Types.TIME) {      
		             //rv = java.util.Date.class;      
		             rv = String.class;      
		         }      
		         // commented to support JDK version < 1.4      
		         /*      else if (sqlType == Types.BOOLEAN) {    
		             rv = Boolean.class;    
		         } */     
		         else if (sqlType == Types.SMALLINT) {      
		             rv = Short.class;      
		         }      
		         else if (sqlType == Types.BIT) {      
		 //          rv = Byte.class;      
		             rv = Integer.class;      
		         }      
		         else if (sqlType == Types.BIGINT) {      
		             rv = Long.class;      
		         }      
		         else if (sqlType == Types.NUMERIC || sqlType == Types.DECIMAL) {      
		             if (decimalDigits == 0) {      
		                 if (columnSize == 1) {      
		 //                  rv = Byte.class;      
		                     rv=  Integer.class;      
		                 }      
		                 else if (columnSize < 5) {      
		                     rv = Short.class;      
		                 }      
		                 else if (columnSize < 10) {      
		                     rv = Integer.class;      
		                 }      
		                 else {      
		                     rv = Long.class;      
		                 }      
		             }      
		             else {      
		                 if (columnSize < 9) {      
		                     rv = Float.class;      
		                }      
		                 else {      
		                     rv = Double.class;      
		                 }      
		             }      
		        }      
		         return rv;      
		     }      
		      
		   
	public static NullableType getHibernateType(int sqlType, int columnSize, int decimalDigits) {      
		        NullableType rv=Hibernate.SERIALIZABLE;      
		        if (sqlType == Types.CHAR || sqlType == Types.VARCHAR) {      
		            rv = Hibernate.STRING;      
		        }      
		        else if (sqlType == Types.FLOAT || sqlType == Types.REAL) {      
		            rv = Hibernate.FLOAT;      
		        }      
		        else if (sqlType == Types.INTEGER) {      
		            rv = Hibernate.INTEGER;      
		        }      
		        else if (sqlType == Types.DOUBLE) {      
		            rv = Hibernate.DOUBLE;      
		        }      
		        else if (sqlType == Types.DATE) {      
		            rv = Hibernate.DATE;      
		        }      
		        else if (sqlType == Types.TIMESTAMP) {      
		            rv = Hibernate.TIMESTAMP;      
		        }      
		        else if (sqlType == Types.TIME) {      
		            rv = Hibernate.TIME;      
		       }      
		        // commented to support JDK version < 1.4      
		        /*      else if (sqlType == Types.BOOLEAN) {    
		            rv = Hibernate.BOOLEAN;    
		.        } */     
		        else if (sqlType == Types.SMALLINT) {      
		            rv = Hibernate.SHORT;      
		        }      
		        else if (sqlType == Types.BIT) {      
		            rv = Hibernate.BYTE;      
		        }      
		        else if (sqlType == Types.BIGINT) {      
		            rv = Hibernate.LONG;      
		        }      
		        else if (sqlType == Types.NUMERIC || sqlType == Types.DECIMAL) {      
		            if (decimalDigits == 0) {      
		                if (columnSize == 1) {      
		                    rv = Hibernate.BYTE;      
		                }      
		                else if (columnSize < 5) {      
		                    rv = Hibernate.SHORT;      
		                }      
		                else if (columnSize < 10) {      
		                    rv = Hibernate.INTEGER;      
		                }      
		                else {      
		                    rv = Hibernate.LONG;      
		                }      
		            }      
		            else {      
		                if (columnSize < 9) {      
		                    rv = Hibernate.FLOAT;      
		                }      
		                else {      
		                    rv = Hibernate.DOUBLE;      
		                }      
		            }      
		        }      
		        return rv;      
		    }      
	public static List getTableColumns(Connection c, String catalog, String schema, String table) throws SQLException  {      
		        return getTableColumns(c, catalog, schema, table, null);      
		    }  
	public static Set getForeignKeyColumns(Connection c, String catalog, String schema, String table) throws SQLException {      
		        DatabaseMetaData dmd = c.getMetaData();      
		        ResultSet rs = null;      
		        try {      
		            rs = dmd.getImportedKeys(catalog, schema, table);      
		           HashSet columns = new HashSet();      
		            while (rs.next()) {      
		                columns.add(rs.getString(8));      
		           }      
		            return columns;      
		        }      
		        finally {      
		            if (rs != null) rs.close();      
		        }      
		    }      
		          
		    public static List getPrimaryKeyColumns(Connection c, String catalog, String schema, String table) throws SQLException {      
		        DatabaseMetaData dmd = c.getMetaData();      
		        ResultSet rs = null;      
		        try {      
		            rs = dmd.getPrimaryKeys(catalog, schema, table);      
		                  
		            List pkColumns = new LinkedList();;      
		            while (rs.next()) {      
		                List tmp = getTableColumns(c, catalog, schema, table, rs.getString(4));      
		                Column pkColumn = (Column)tmp.get(0);      
		                pkColumns.add(pkColumn);      
		            }      
		            return pkColumns;      
		        }      
		        finally {      
		            if (rs != null) rs.close();      
		        }      
		    } 

获取主键是没问题的。。但外键就拿不到了。。
那个获取外键的。。我怎么弄也是查不出来。。又不报错。。甚至连我表名打错也没报错~麻烦大家能不能帮我找下原因。。
DAO 
2010年9月24日 16:29

1个答案 按时间排序 按投票排序

0 0

自己写一个取外键的不就可以吗?

2010年9月30日 13:33

相关推荐

    jdbcUtil一个工具类

    请注意,这只是一个基本示例,实际的`JdbcUtil`类通常会包含更复杂的功能,如异常处理、连接池的使用等。 连接池是一种优化数据库连接管理的技术,它可以复用已建立的数据库连接,减少频繁创建和销毁连接的开销。...

    JdbcUtil(Jdbc通过工具类)

    JdbcUtil是一个常见的工具类,它封装了JDBC的基本操作,以简化数据库的访问,减少代码量,并提高代码的可维护性。下面将详细阐述JdbcUtil中的主要知识点及其重要性。 1. **连接管理**:JdbcUtil通常包含建立和关闭...

    自己写的jdbcUtil

    【标题】"自己写的jdbcUtil"揭示了这个项目的核心是一个自定义实现的Java数据库连接工具类,即JDBC Utility。JDBC(Java Database Connectivity)是Java语言中用来规范客户端程序如何访问数据库的应用程序接口,提供...

    JdbcUtil.zip_JDBCUtil.java_jdbcUtil

    `JdbcUtil`通常是一个工具类,用于封装JDBC的常用操作,以简化数据库访问流程,提高代码的可复用性和可维护性。 `JdbcUtil`类的基本结构通常包括以下几个部分: 1. **数据库连接的建立和关闭**:使用`...

    JdbcUtil.rar_jdbcUtil_jdbcut

    JdbcUtil是一个常见的实用类,用于封装数据库连接、查询、更新等基本操作,以提高代码的可读性和可维护性,避免资源泄露。在给定的"JdbcUtil.rar_jdbcUtil_jdbcut"压缩包中,包含的文件"JdbcUtil"可能是这个工具类的...

    JDBCUtil.rar_jdbcUtil

    `JDBCUtil`通常是指一个实用工具类,它封装了与数据库交互的常见操作,如建立连接、执行SQL语句、处理结果集等。这个`JDBCUtil.rar_jdbcUtil`压缩包可能包含了实现这些功能的代码示例。接下来,我们将深入探讨JDBC...

    java高效开发小工具-jdbcutil2

    将java开发过程中连接数据库的过程...本工具主要遵循"既有默认规则,又可灵活配置"的原则,通过编写通用的basedao,实现通用的数据库连接过程,通过配置文件实现连接指定的数据库,继而实现可让用户灵活配置的原则。

    jdbcutil.java

    `JdbcUtil.java` 是一个Java类,用于简化使用JDBC(Java Database Connectivity)操作数据库的过程。这个类主要包含了四个静态方法:`getConnection()`, `close()`, `toInt()` 和 `printRs()`。 1. **静态初始化块*...

    JDBCUtil javaJDBC工具类

    * 一。JDBC流程 * * 1.加载类文件: 类文件只需要加载到内存一次即可 * 2.建立连接通道 * 3.建立交通工具 * 4.推送命令并得到处理结果 * 5.销毁相关资源 连接通道建立 交通工具创建 推送sql命令并带回处理...

    JdbcUtil.java

    JdbcUtil.java

    baseDAO及其实现案例、jdbcUtil工具类、数据池c3p0、dbcp、druid驱动及实现方式

    首先,`BaseDAO`是一个设计模式,用于封装数据库的基本操作,如增、删、改、查。它的出现是为了减少代码的重复性,提高代码的可复用性和可维护性。`BaseDAO`通常会定义一些通用的方法,比如获取单个对象、获取集合、...

    java-JDBC-AutoClose-自动关闭的JDBCUtil,效果高于传统JDBC

    总之,Java JDBC AutoClose的JDBCUtil是一个实用的工具,它整合了自动资源关闭和数据库操作的最佳实践,为Java开发者提供了更便捷、安全的数据库访问方式,尤其适用于频繁的数据库操作场景。在实际项目中,类似的...

    JdbcUtil_2.rar_jdbcut

    `JdbcUtil_2.rar_jdbcut` 指的可能是一个包含简化了JDBC操作的实用工具类,它的目的是为了简化数据库连接和操作的过程,使得开发者可以更快速、便捷地完成数据库交互任务。 在描述中提到的“用jdbc连接数据库的小...

    JDBCUtil.java

    基于反射的JDBCUtil的工具类,通过配置文件加载数据库连接资源,实现简单的CRUD操作

    day2_jdbc.zip_jdbc ut_jdbc util_jdbcUtil_jdbc封装

    `JdbcUtil`类是开发者为了简化JDBC操作而自定义的一个工具类,它封装了JDBC的一些常用功能,以便更方便、高效地进行数据库交互。下面我们将详细探讨JDBC的基础知识,以及`JdbcUtil`类的设计思想和实现方法。 首先,...

    JDBCUtil.class

    JDBCUtil.class

Global site tag (gtag.js) - Google Analytics