- 浏览: 53129 次
- 性别:
- 来自: 江西
最新评论
-
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 2260自己做了一个上传(利用apache-fileupload组件) ... -
String.format一些用法例子、功能强、希望对您有帮组
2010-05-29 14:06 7491String.format是在JDK1.5中新 ... -
利用apache ant 包进行压缩、解压缩zip,归档tar,解档tar,压缩tar.gz解压tar.gz
2009-12-24 19:33 8680最近用到了利用java进行一序列压缩解压缩,jdk也自带了,这 ... -
Apache POI SpreadSheet的一些简单应用(二)
2009-12-22 10:16 2926我用的版本是 poi-3.5,您可以去官方上下载。希望对大家能 ... -
根据SQL结果集构建动态二维列表展示在excel中
2009-12-08 21:39 2082近期在项目中用到根据SQL结果集构建动态二维列表展示在exce ... -
java中的精确商务计算
2009-12-06 21:58 968由于计算机在计算过程中的舍入关系,普通的计算和工程计算可能会出 ... -
经常使用的一些克隆实现
2009-12-04 20:54 1375在实践中往往需要使用到克隆,您可以使用java本身提供的克隆实 ... -
Apache dbcp 数据源
2009-12-03 16:59 1376使用直连数据库的话效率比较低,人们就想出另外一种概念:数据库连 ... -
Apache POI SpreadSheet的一些简单应用(一)
2009-12-03 16:35 1924我用的版本是 poi-3.5,您可以去官方上下载。 希望对大家 ... -
java.text包中的DateFormat,NumberFormat一些用法
2009-12-03 15:36 2556import java.text.DateForm ... -
java类中多个时间类型的转换处理
2009-12-03 15:06 1552public class XZou { ... -
List列表中删除指定的多个对象,利用下标来实现
2009-12-03 14:47 2205import java.util.ArrayLis ... -
Excel中列号对应数字或数字对应列号
2009-12-03 14:38 2618public class XZou { p ...
相关推荐
JDBC提供了获取数据库和参数元数据的机制,有助于理解数据库结构和优化查询。 #### 十一、批处理的使用 批处理允许一次性执行多条SQL语句,减少了网络往返次数,提高了批量数据处理的效率。 #### 十二、JDBC其他...
9. **元数据**:`DatabaseMetaData`接口提供了一系列方法,用于获取关于数据库的信息,如表结构、列信息、索引等。 10. **JDBC驱动类型**:JDBC驱动分为四种类型,从1到4,类型4(纯Java的驱动,也叫类型4 JDBC驱动...
ResultSetMetaData是对这个结果集的元数据的描述,包含列的数量、名称、类型等信息。开发者可以通过ResultSetMetaData获取列的详细信息,方便在程序中动态处理结果集。 6. **配置对象的属性**:在使用JDBC驱动和...
JDBC还提供了许多其他的API,如`DatabaseMetaData`用于获取数据库元数据信息;`CallableStatement`用于调用存储过程等。 #### 十、元数据信息 **10.1 数据库元数据信息** 数据库元数据信息是指关于数据库本身的...
通过本文档的学习,不仅可以深入了解JDBC的基本概念和技术细节,还能够掌握一些高级用法和最佳实践,例如数据库连接池的使用、DAO设计模式的应用等。这将有助于开发者更好地理解和使用JDBC,从而提高开发效率和软件...
此外,Oracle的JDBC驱动支持最新的JDBC规范,如JDBC 4.2及以上版本,提供了更多特性,如结果集的滚动和分页,以及元数据查询等功能。 总之,Oracle JDBC驱动是Java开发者与Oracle数据库进行交互的关键组件,理解和...
- **11.1 数据库元数据信息** - **11.2 参数元数据信息** #### 十二、批处理的使用 - 批处理可以显著提高执行大量 SQL 语句时的性能。 - 通过 `addBatch()` 方法添加 SQL 语句到批处理列表,最后使用 `executeBatch...
通过这些驱动,开发者可以执行SQL查询、事务管理、数据库元数据获取等一系列操作。 **MySQL JDBC驱动**: MySQL的JDBC驱动是MySQL官方提供的用于Java应用程序连接MySQL数据库的接口。使用它可以创建数据库连接、...
Class 和 ClassLoader 是 Java 中两个重要的类,Class 表示一个类的元数据,ClassLoader 负责加载类。Class 提供了许多有用的方法,如 getClassLoader()、newInstance() 等,ClassLoader 提供了许多有用的方法,如 ...
Java开发过程中,jar(Java Archive)包是必不可少的组件,它们包含了预编译的类、资源文件以及元数据,使得开发者能够轻松地复用代码和依赖。以下是对标题和描述中涉及的一些关键jar包的详细解释: 1. **数据库...
它们提供API来处理PDF文档的内容、结构和元数据。 3. **基于JDBC的数据库连接池技术** 数据库连接池是管理数据库连接的一种高效机制,它可以避免频繁创建和关闭数据库连接导致的性能开销。常见的JDBC连接池有: -...
5. **spring-beans-4.3.4.RELEASE.jar**:Bean工厂和元数据读取模块,用于创建、配置和管理Bean。它支持XML和注解方式的Bean定义。 6. **spring-test-4.3.4.RELEASE.jar**:提供了对Spring应用进行单元测试和集成...
其中 CLI 是最常用的交互方式之一,它支持多种命令选项,例如 `-d` 或 `--define` 用于变量替换,`-e` 用于直接执行 SQL 查询字符串,`-f` 用于从文件中读取 SQL 命令,`-h` 用于连接远程的 Hive Server,等等。...
- 获取数据库元数据(DatabaseMetaData),了解数据库的具体信息。 3. Java基础API 文档中提及了几个Java基础API的使用,例如BufferedReader、InputStreamReader以及相关的异常处理。BufferedReader类用于从文本...
- **丰富的元数据**:XML支持自定义标签和属性,可以携带更多的上下文信息。 然而,也有其局限性,比如解析和操作XML可能会消耗更多的时间和资源,且不适用于实时、高性能的数据库操作。因此,选择适合项目需求的...
- **注解处理**:反射可以用于读取类、方法或字段上的注解,进行元数据驱动的编程。 - **序列化与反序列化**:`java.io.ObjectInputStream`和`java.io.ObjectOutputStream`利用反射实现对象的序列化和反序列化。 ...
在IT行业中,jar(Java Archive)包是一种标准的文件格式,用于封装Java类库和相关的元数据,使得多个Java类可以被一起分发和执行。标题提到的是“开发用的jar包”,这意味着这些jar文件是为Java开发人员准备的,...
其中,`<head>`部分通常包含文档的元数据,如标题、样式表链接和脚本引用,而`<body>`部分则包含了实际可见的内容。 ### Linux命令行基础 第五题提及了Linux命令行中的`pwd`命令,其作用是打印当前工作目录的完整...