java中访问mysql数据库中的表结构信息
package cn.hncu.meta;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import org.junit.Test;
import cn.hncu.pool.ConnUtils3;
import cn.hncu.pool.ConnUtils4;
/*
* 要点:
操纵: 数据库驱动的信息、数据库名、数据表信息(名字、个数) ---java.sql.DatabaseMetaData <---通过con.getMetaData()获得
操纵: 表结构信息,如字段名、列数 ---java.sql.ResultSetMetaData <--- 通过rs.getMetaData()获得
*数据库的其它称呼: Catlog,Schema , Database
*/
public class MetaDataDemo {
Connection con = ConnUtils3.getConn();
@Test
public void DatabaseMetaDataDemo() throws Exception{
DatabaseMetaData dm = con.getMetaData();
System.out.println(dm.getDriverName());
System.out.println(dm.getDatabaseMajorVersion()+"."+dm.getDatabaseMinorVersion());
System.out.println(dm.getMaxStatements());
System.out.println(dm.getJDBCMajorVersion());//jdbc4.0
System.out.println("--------------------------");
//返回所有数据库的名字
ResultSet rs = dm.getCatalogs();
while(rs.next()){
String name = rs.getString("TABLE_CAT");
String name2 = rs.getString(1);
System.out.println(name+","+name2);
}
System.out.println("--------------------------");
//返回某个数据库的表名
//参数解析: 第1和第2个都是数据库的名字(2个,是为兼容不同数据库), 第3个参数是查询表名的过滤模式(null为不过滤即查所有,"%a%"为表名中包含字母'a'),最后一个参数是表类型如"TABLE"、"VIEW"等(这些值可查看API中getTableTypes()方法)
rs = dm.getTables("hncu", "hncu", null, new String[]{"TABLE","VIEW"} );
while(rs.next()){
String name = rs.getString("TABLE_NAME"); //字符串参数的具体取值参看API中getTables()
String name2 = rs.getString("TABLE_TYPE");
System.out.println(name+","+name2);
}
System.out.println("--------------------------");
//如果已知数据库的名字,打开该数据库。如果还知道某个表的名字,那么可以操纵这个表
String s1 = "hncu";
con.createStatement().execute("use "+s1);//该方法能够执行所有SQL语句,包括: use hncu; drop database hncu
String s2 = "stud";
ResultSet rs2 = con.createStatement().executeQuery("select * from "+ s2);
while(rs2.next()){
//如果已经列数n,就可输出表格的所有数据
int n = 2;
for(int i=1;i<=n;i++){
Object obj = rs2.getObject(i);
System.out.print(obj+" ");
}
System.out.println();
}
}
@Test //表结构信息
public void ResultSetMetaDataDemo() throws Exception{
//跨库查询
Connection con = ConnUtils4.getConn(); //该版本的配置文件的url中是没有数据库名字的
String dbName = "abc"; //数据库名
String tableName = "stud"; //表名
String sql = "select * from " + dbName+"."+tableName;
ResultSet rs = con.createStatement().executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
//获取当前表格的列数
int columns = rsmd.getColumnCount();
System.out.println("列数:"+columns);
//输出当前表格的表头
System.out.println("------------------");
for(int i=0; i<columns;i++){
System.out.print(rsmd.getColumnName(i+1)+"\t");
}
System.out.println();
System.out.println("------------------");
//输出表数据
while (rs.next()) {
//输出一行
for (int i = 0; i < columns; i++) {
System.out.print(rs.getObject(i + 1) + "\t");
}
System.out.println();
}
}
}
java中访问mysql数据库中的表结构信息的更多相关文章
- JDBC Java 程序从 MySQL 数据库中读取数据,并备份到 xml 文档中
MySQL 版本:Server version: 5.7.17-log MySQL Community Server (GPL) 相关内容:JDBC Java 程序从 MySQL 数据库中读取数据,并 ...
- html页面通过http访问mysql数据库中的内容,实现用户登录的功能
需求: 通过html编写用户登录页面,页面内容包括用户名.密码和登录按钮,点击登录后访问login.php文件,使用按钮默认的submit提交用户名和密码,在login.php中访问mysql数据库, ...
- Java程序向MySql数据库中插入的中文数据变成了问号
找到mysql的安装目录,修改my.ini文件 (1)如何找到my.ini文件 如果my.ini文件不在MySQL的安装目录下,可能放在隐藏目录,要先去找到ProgramData,(这里要先打开显示隐 ...
- 点评阿里JAVA手册之MySQL数据库 (建表规约、索引规约、SQL语句、ORM映射)
下载原版阿里JAVA开发手册 [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文内容:MySQL数据库 (建表规约.索引规约.SQL语句.ORM映 ...
- Oracle数据库中实现mysql数据库中auto-increment功能
在Mysql数据库中,想要实现一条数据的自增一功能(即插入此数据时填写null即可,系统自动+1),可直接在所在列使用语句auto-increment. id int primary key auto ...
- Java—JDBC向mysql数据库中给某个表添加数据时,会遇到的问题,如下
解析(jar包该放在那里,以及其它的操作): 把jar包(驱动)添加到自己的项目中,最好新建一个文件夹,再把jar包(驱动包)添加到这个所新建的文件中 1.先建好自己的项目,再新建一个文件夹,如下: ...
- JDBC Java 程序从 MySQL 数据库中读取数据,并封装到 Javabean 对象中
MySQL 版本:Server version: 5.7.17-log MySQL Community Server (GPL) 相关内容:JDBC Java 连接 MySQL 数据库 用于测试的 M ...
- django中 对Mysql数据库的建表
Django操作Mysql数据库: 1.1 在settings中,配置数据库相关参数,所以无需修改,这里我们看一下: DATABASES = { 'default': { # 这里可以指定使用的数据库 ...
- 通过java代码往mysql数据库中写入日期相关数据少13个小时
通过show variables like '%time_zone%'; 查看时区: CST 时区 名为 CST 的时区是一个很混乱的时区,有四种含义: 美国中部时间 Central Standard ...
随机推荐
- bzoj 2393 Cirno的完美算数教室(容斥原理+搜索)
[题意] 定义C数为只包含数字2和9的数,求[L,R]内能被C数整除的个数. [思路] Dfs预处理出C数,并去除其中倍数的情况. Dfs搜索出现情况,奇数加,偶数减,当数值大于R时剪枝. [代码] ...
- Linux下用Intel编译器编译安装NetCDF-Fortan库(4.2以后版本)
本来这个问题真的没必要写的,可是真的困扰我太久%>_<%,决定还是记录一下. 首先,最权威清晰的安装文档还是官方的: Building the NetCDF-4.2 and later F ...
- 在虚拟机VM中安装的Ubuntu上安装和配置Hadoop
一.系统环境: 我使用的Ubuntu版本是:ubuntu-12.04-desktop-i386.iso jdk版本:jdk1.7.0_67 hadoop版本:hadoop-2.5.0 二.下载jdk和 ...
- Linux管线命令
一.什么是管线命令 bash 命令运行的时候有输出的数据会出现! 那么如果这群数据必需要经过几道手续之后才能得到我们所想要的格式,应该如何来配置? 这就牵涉到管线命令的问题了 (pipe) ,管线命令 ...
- Spring+Quartz 整合二:调度管理与定时任务分离
新的应用场景:很多时候,我们常常会遇到需要动态的添加或修改任务,而spring中所提供的定时任务组件却只能够通过修改xml中trigger的配置才能控制定时任务的时间以及任务的启用或停止,这在带给我们 ...
- Spring Filter components in auto scanning
In this Spring auto component scanning tutorial, you learn about how to make Spring auto scan your c ...
- 应用JConsole学习Java GC
应用JConsole学习Java GC 关于Java GC的知识,好多地方都讲了很多,今天我用JConsole来学习一下Java GC的原理. GC原理 在我的上一篇中介绍了Java运行时数据区,在了 ...
- bzoj 2190 仪仗队(欧拉函数)
2190: [SDOI2008]仪仗队 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2245 Solved: 1413[Submit][Statu ...
- javascript判断NaN
功能: isNaN() 函数用于检查其参数是否是非数字值. 语法: isNaN(x) x 必需.要检测的值. 返回值: 如果 x 是特殊的非数字值 NaN(或者能被转换为这样的值),返回的值就是 tr ...
- 贪心-poj-2437-Muddy roads
题目链接: http://poj.org/problem?id=2437 题目意思: 给n个区间,每次可以用长度为L的棒A去覆盖,求将所有区间覆盖至少需要几次.给的区间不覆盖. 解题思路: 简单贪心. ...