- 浏览: 52220 次
- 性别:
- 来自: 江西
最新评论
-
czb6788782:
楼主,源码能不能给我学习下~谢谢
Java实现一个压缩小软件 -
hpuyancy:
好像中文会乱码啊?
利用apache ant 包进行压缩、解压缩zip,归档tar,解档tar,压缩tar.gz解压tar.gz -
shutingwang:
不错
Apache POI SpreadSheet的一些简单应用(二) -
gaowei52306:
gaowei52306 写道为啥我下载后双击无法执行?
抱歉, ...
Java实现一个压缩小软件 -
gaowei52306:
为啥我下载后双击无法执行?
Java实现一个压缩小软件
JDBC读取一些元数据的常用方法,网上有很多这样的DEMO,在这里我也编写一个,我用的数据库是mysql,希望对大家有所帮助
import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; public class XZou { static Connection con = null; static { try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager .getConnection( "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8", "root", "root"); PreparedStatement pst = con .prepareStatement("drop table if exists user;"); pst.execute(); pst = con .prepareStatement("create table user(id int auto_increment primary key comment '主键啊',name varchar(20) not" + " null comment '名称啊',age int default 18 comment '年龄啊',salary float(8,2) comment '薪水啊',rq date,sj time,rj timestamp);"); pst.execute(); String sql = "insert into user (name,age,salary,rq,sj,rj) values (?,?,?,?,?,?)"; pst = con.prepareStatement(sql); for (int i = 1; i <= 10; i++) { pst.setString(1, "zs" + i); pst.setInt(2, 17 + i); pst.setFloat(3, 2600 + i * 100.0f); long time = System.currentTimeMillis(); pst.setDate(4, new java.sql.Date(time)); pst.setTime(5, new java.sql.Time(time)); pst.setTimestamp(6, new java.sql.Timestamp(time)); pst.addBatch(); } pst.executeBatch(); pst.close(); } catch (Exception ex) { throw new ExceptionInInitializerError(ex); } } /** * DatabaseMetaData一些用法 * @throws Exception */ public static void getDBInfo() throws Exception { DatabaseMetaData dbmd = con.getMetaData(); System.out.println(dbmd.getDatabaseProductName());//获取数据库产品名称 System.out.println(dbmd.getDatabaseProductVersion());//获取数据库产品版本号 System.out.println(dbmd.getCatalogSeparator());//获取数据库用作类别和表名之间的分隔符 如test.user System.out.println(dbmd.getDriverVersion());//获取驱动版本 System.out.println("*******************可用的数据库列表*********************"); ResultSet rs = dbmd.getCatalogs();//取可在此数据库中使用的类别名,在mysql中说白了就是可用的数据库名称,只有一列 while(rs.next()){ System.out.println(rs.getString(1)); } System.out.println("********************所有表********************************"); /** * catalog 类别名称 * schemaPattern 用户方案模式, * tableNamePattern 表 * types 类型 * 获取所有表 * dbmd.getTables(catalog, schemaPattern, tableNamePattern, types) */ rs = dbmd.getTables(null, null, null, new String[]{"TABLE"});//参数列表 1:类别名称,2: 模式名称的模式,3:表名称模式,4:要包括的表类型所组成的列表 while(rs.next()){ /** 所有的列信息。如下 * TABLE_CAT String => 表类别(可为 null) TABLE_SCHEM String => 表模式(可为 null) TABLE_NAME String => 表名称 COLUMN_NAME String => 列名称 DATA_TYPE int => 来自 java.sql.Types 的 SQL 类型 TYPE_NAME String => 数据源依赖的类型名称,对于 UDT,该类型名称是完全限定的 COLUMN_SIZE int => 列的大小。 BUFFER_LENGTH 未被使用。 DECIMAL_DIGITS int => 小数部分的位数。对于 DECIMAL_DIGITS 不适用的数据类型,则返回 Null。 NUM_PREC_RADIX int => 基数(通常为 10 或 2) NULLABLE int => 是否允许使用 NULL。 columnNoNulls - 可能不允许使用 NULL 值 columnNullable - 明确允许使用 NULL 值 columnNullableUnknown - 不知道是否可使用 null REMARKS String => 描述列的注释(可为 null) COLUMN_DEF String => 该列的默认值,当值在单引号内时应被解释为一个字符串(可为 null) SQL_DATA_TYPE int => 未使用 SQL_DATETIME_SUB int => 未使用 CHAR_OCTET_LENGTH int => 对于 char 类型,该长度是列中的最大字节数 ORDINAL_POSITION int => 表中的列的索引(从 1 开始) IS_NULLABLE String => ISO 规则用于确定列是否包括 null。 YES --- 如果参数可以包括 NULL NO --- 如果参数不可以包括 NULL 空字符串 --- 如果不知道参数是否可以包括 null SCOPE_CATLOG String => 表的类别,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null) SCOPE_SCHEMA String => 表的模式,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null) SCOPE_TABLE String => 表名称,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null) SOURCE_DATA_TYPE short => 不同类型或用户生成 Ref 类型、来自 java.sql.Types 的 SQL 类型的源类型(如果 DATA_TYPE 不是 DISTINCT 或用户生成的 REF,则为 null) IS_AUTOINCREMENT String => 指示此列是否自动增加 YES --- 如果该列自动增加 NO --- 如果该列不自动增加 空字符串 --- 如果不能确定该列是否是自动增加参数 */ System.out.println(rs.getString(3) + "->" + rs.getString(4));//打印表类别,表模式,表名称,列名称, } System.out.println("##############################################################"); /** * catalog 类别名称 * schema 用户方案名称 * table 表名 * 获取指定表的主键信息 * dbmd.getPrimaryKeys(catalog, schema, table) * */ rs = dbmd.getPrimaryKeys("test", null, "user"); while(rs.next()){ /** * 所有列信息如下: * TABLE_CAT String => 表类别(可为 null) TABLE_SCHEM String => 表模式(可为 null) TABLE_NAME String => 表名称 COLUMN_NAME String => 列名称 KEY_SEQ short => 主键中的序列号(值 1 表示主键中的第一列,值 2 表示主键中的第二列)。 PK_NAME String => 主键的名称(可为 null) */ System.out.println(rs.getString(1) + "," + rs.getString(2) + "," + rs.getString(3) + "," + rs.getString(4) + "," + rs.getShort(5) + "," + rs.getString(6)); } System.out.println("##############################################################"); /** * catalog 类别名称 * schemaPattern 用户方案,模式 * tableNamePattern 表 * columnNamePattern 列 * 获取表的列信息 * dbmd.getColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern) */ rs = dbmd.getColumns("test", null, "user", null); while(rs.next()){ /** * 所有列如下: * TABLE_CAT String => 表类别(可为 null) TABLE_SCHEM String => 表模式(可为 null) TABLE_NAME String => 表名称 COLUMN_NAME String => 列名称 DATA_TYPE int => 来自 java.sql.Types 的 SQL 类型 TYPE_NAME String => 数据源依赖的类型名称,对于 UDT,该类型名称是完全限定的 COLUMN_SIZE int => 列的大小。 BUFFER_LENGTH 未被使用。 DECIMAL_DIGITS int => 小数部分的位数。对于 DECIMAL_DIGITS 不适用的数据类型,则返回 Null。 NUM_PREC_RADIX int => 基数(通常为 10 或 2) NULLABLE int => 是否允许使用 NULL。 columnNoNulls - 可能不允许使用 NULL 值 columnNullable - 明确允许使用 NULL 值 columnNullableUnknown - 不知道是否可使用 null REMARKS String => 描述列的注释(可为 null) COLUMN_DEF String => 该列的默认值,当值在单引号内时应被解释为一个字符串(可为 null) SQL_DATA_TYPE int => 未使用 SQL_DATETIME_SUB int => 未使用 CHAR_OCTET_LENGTH int => 对于 char 类型,该长度是列中的最大字节数 ORDINAL_POSITION int => 表中的列的索引(从 1 开始) IS_NULLABLE String => ISO 规则用于确定列是否包括 null。 YES --- 如果参数可以包括 NULL NO --- 如果参数不可以包括 NULL 空字符串 --- 如果不知道参数是否可以包括 null SCOPE_CATLOG String => 表的类别,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null) SCOPE_SCHEMA String => 表的模式,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null) SCOPE_TABLE String => 表名称,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null) SOURCE_DATA_TYPE short => 不同类型或用户生成 Ref 类型、来自 java.sql.Types 的 SQL 类型的源类型(如果 DATA_TYPE 不是 DISTINCT 或用户生成的 REF,则为 null) IS_AUTOINCREMENT String => 指示此列是否自动增加 YES --- 如果该列自动增加 NO --- 如果该列不自动增加 空字符串 --- 如果不能确定该列是否是自动增加参数 */ System.out.println(rs.getString("COLUMN_NAME") + " 类型=" + rs.getInt("DATA_TYPE") + " 列大小=" + rs.getInt("COLUMN_SIZE") + " 注释=" + rs.getString("REMARKS") + " 是否允许为NULL=" + rs.getInt("NULLABLE")); //还有很多很多方法,在这里就不一一列举了 } } /** * ResultSetMetaData一些用法 * @throws Exception */ public static void getRsInfo() throws Exception { PreparedStatement pst = con.prepareStatement("select * from user"); ResultSet rs = pst.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData();//结果集元 System.out.println("下面这些方法是ResultSetMetaData中方法"); System.out.println("获得1列所在的Catalog名字 : " + rsmd.getCatalogName(1)); System.out.println("获得1列对应数据类型的类 " + rsmd.getColumnClassName(1)); System.out.println("获得该ResultSet所有列的数目 " + rsmd.getColumnCount()); System.out.println("1列在数据库中类型的最大字符个数" + rsmd.getColumnDisplaySize(1)); System.out.println(" 1列的默认的列的标题" + rsmd.getColumnLabel(1)); //System.out.println("1列的模式" + rsmd.GetSchemaName(1)); System.out.println("1列的类型,返回SqlType中的编号 " + rsmd.getColumnType(1)); System.out.println("1列在数据库中的类型,返回类型全名" + rsmd.getColumnTypeName(1)); System.out.println("1列类型的精确度(类型的长度): " + rsmd.getPrecision(1)); System.out.println("1列小数点后的位数 " + rsmd.getScale(1)); System.out.println("1列对应的模式的名称(应该用于Oracle) " + rsmd.getSchemaName(1)); System.out.println("1列对应的表名 " + rsmd.getTableName(1)); System.out.println("1列是否自动递增" + rsmd.isAutoIncrement(1)); System.out.println("1列在数据库中是否为货币型" + rsmd.isCurrency(1)); System.out.println("1列是否为空" + rsmd.isNullable(1)); System.out.println("1列是否为只读" + rsmd.isReadOnly(1)); System.out.println("1列能否出现在where中" + rsmd.isSearchable(1)); rs.close(); pst.close(); } public static void main(String[] args) throws Exception { //getRsInfo(); getDBInfo(); } }
发表评论
-
上传下载的一个工具类
2010-05-29 14:15 2197自己做了一个上传(利用apache-fileupload组件) ... -
String.format一些用法例子、功能强、希望对您有帮组
2010-05-29 14:06 7436String.format是在JDK1.5中新 ... -
利用apache ant 包进行压缩、解压缩zip,归档tar,解档tar,压缩tar.gz解压tar.gz
2009-12-24 19:33 8612最近用到了利用java进行一序列压缩解压缩,jdk也自带了,这 ... -
Apache POI SpreadSheet的一些简单应用(二)
2009-12-22 10:16 2856我用的版本是 poi-3.5,您可以去官方上下载。希望对大家能 ... -
根据SQL结果集构建动态二维列表展示在excel中
2009-12-08 21:39 2030近期在项目中用到根据SQL结果集构建动态二维列表展示在exce ... -
java中的精确商务计算
2009-12-06 21:58 943由于计算机在计算过程中的舍入关系,普通的计算和工程计算可能会出 ... -
经常使用的一些克隆实现
2009-12-04 20:54 1338在实践中往往需要使用到克隆,您可以使用java本身提供的克隆实 ... -
Apache dbcp 数据源
2009-12-03 16:59 1337使用直连数据库的话效率比较低,人们就想出另外一种概念:数据库连 ... -
Apache POI SpreadSheet的一些简单应用(一)
2009-12-03 16:35 1885我用的版本是 poi-3.5,您可以去官方上下载。 希望对大家 ... -
java.text包中的DateFormat,NumberFormat一些用法
2009-12-03 15:36 2503import java.text.DateForm ... -
java类中多个时间类型的转换处理
2009-12-03 15:06 1509public class XZou { ... -
List列表中删除指定的多个对象,利用下标来实现
2009-12-03 14:47 2147import java.util.ArrayLis ... -
Excel中列号对应数字或数字对应列号
2009-12-03 14:38 2560public class XZou { p ...
相关推荐
实例186 泛型方法与数据查询 236 实例187 泛型化方法与最小值 238 实例188 泛型化接口与最大值 239 实例189 使用通配符增强泛型 240 实例190 泛型化的折半查找法 241 第9章 编程常用类 343 9.1 Calendar类的使用 244...
4.7 元数据 4.8 行集 4.9 事务 4.10 高级连接管理 4.11 LDAP概述 第5章 分布式对象 5.1 客户与服务器的角色 5.2 远程方法调用 5.3 配置远程方法调用 5.4 远程方法中的参数传递 5.5 服务器对象激活 5.6 ...
4.7 元数据 4.8 行集 4.9 事务 4.10 高级连接管理 4.11 LDAP概述 第5章 分布式对象 5.1 客户与服务器的角色 5.2 远程方法调用 5.3 配置远程方法调用 5.4 远程方法中的参数传递 5.5 服务器对象激活 5.6 ...
4.7 元数据 4.8 行集 4.9 事务 4.10 高级连接管理 4.11 LDAP概述 第5章 分布式对象 5.1 客户与服务器的角色 5.2 远程方法调用 5.3 配置远程方法调用 5.4 远程方法中的参数传递 5.5 服务器对象激活 5.6 JavaIDL与...
4.7 元数据 4.8 行集 4.9 事务 4.10 高级连接管理 4.11 LDAP概述 第5章 分布式对象 5.1 客户与服务器的角色 5.2 远程方法调用 5.3 配置远程方法调用 5.4 远程方法中的参数传递 5.5 服务器对象激活 5.6 ...
4.7 元数据 4.8 行集 4.9 事务 4.10 高级连接管理 4.11 LDAP概述 第5章 分布式对象 5.1 客户与服务器的角色 5.2 远程方法调用 5.3 配置远程方法调用 5.4 远程方法中的参数传递 5.5 服务器对象激活 5.6 ...
4.7 元数据 4.8 行集 4.9 事务 4.10 高级连接管理 4.11 LDAP概述 第5章 分布式对象 5.1 客户与服务器的角色 5.2 远程方法调用 5.3 配置远程方法调用 5.4 远程方法中的参数传递 5.5 服务器对象激活 5.6 ...
表结构元数据的API也向用户开放,同时支持在使用过程中,灵活调整映射关系,因此用户可以用API动态的创建表结构的模型,从而实现各种动态类型和表的映射(例如POJO中包含一个Map,用于映射各种动态扩展的字段)企业...
3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.3. 使用FactoryBean定制实例化逻辑 3.8. The ApplicationContext 3.8.1. BeanFactory 还是 ApplicationContext? 3.8.2. 利用MessageSource实现国际化 ...
3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.3. 使用FactoryBean定制实例化逻辑 3.8. The ApplicationContext 3.8.1. BeanFactory 还是 ApplicationContext? 3.8.2. 利用MessageSource实现国际化 ...
此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),...
此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),...
javax.naming.spi 提供一些方法来动态地插入对通过 javax.naming 和相关包访问命名和目录服务的支持。 javax.net 提供用于网络应用程序的类。 javax.net.ssl 提供用于安全套接字包的类。 javax.print 为 JavaTM ...
javax.naming.spi 提供一些方法来动态地插入对通过 javax.naming 和相关包访问命名和目录服务的支持。 javax.net 提供用于网络应用程序的类。 javax.net.ssl 提供用于安全套接字包的类。 javax.print 为 JavaTM ...
实例26 存上100元需要多少天 40 实例27 输出100之间的所有偶数 41 实例28 如何判断回文数字 42 3.4 do…while语句 43 实例29 输出100之间的所有奇数 44 实例30 求最大的随机数 44 3.5 switch...
实例26 存上100元需要多少天 40 实例27 输出100之间的所有偶数 41 实例28 如何判断回文数字 42 3.4 do…while语句 43 实例29 输出100之间的所有奇数 44 实例30 求最大的随机数 44 3.5 switch语句 45 实例31 判断字母...
实例26 存上100元需要多少天 40 实例27 输出100之间的所有偶数 41 实例28 如何判断回文数字 42 3.4 do…while语句 43 实例29 输出100之间的所有奇数 44 实例30 求最大的随机数 44 3.5 ...