开发者社区> 问答> 正文

为什么我的数据库只有两张表,可是用视频里教的方法却检索出一大堆表,?报错

而且这些表因为都是一些我没有去判断并且转换表的字段,全部都报错;

这些是获取数据库表的源码/

ackage com.sorm.core;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.sorm.bean.TableInfo;
import com.sorm.bean.CloumnInfo;
/**
 * 负责管理数据库中所有表结构和类结构的关系
 * 
 * @author Administrator
 *
 */
public class TableContext {
	/**
	 * 表名为key,表信息对象为value
	 */
	public static Map<String, TableInfo> tables = new HashMap<String, TableInfo>();

	/**
	 * 将po的class对象和表信息对象关联起来,便于重用!
	 */
	public static Map<Class<?>, TableInfo> poClassTableMap = new HashMap<Class<?>, TableInfo>();

	private TableContext() {
	}

	static {
		try {
			// 初始化获得表的信息
			Connection con = DBManager.getConn("root","mysql");
			DatabaseMetaData dbmd = con.getMetaData();

			ResultSet tableRet = dbmd.getTables(null, "%", "%", new String[] { "TABLE" });

			while (tableRet.next()) {
				String tableName = (String) tableRet.getObject("TABLE_NAME");

				TableInfo ti = new TableInfo(tableName,new ArrayList<CloumnInfo>(),new HashMap<String,CloumnInfo>());
				tables.put(tableName, ti);

				ResultSet set = dbmd.getColumns(null, "%", tableName, "%"); // 查询表中的所有字段
				while (set.next()) {
					CloumnInfo ci = new CloumnInfo(set.getString("COLUMN_NAME"), set.getString("TYPE_NAME"), 0);
					ti.getColumns().put(set.getString("COLUMN_NAME"), ci);
				}

				ResultSet set2 = dbmd.getPrimaryKeys(null, "%", tableName); // 查询t_user表中的主键
				while (set2.next()) {
					CloumnInfo ci2 = (CloumnInfo) ti.getColumns().get(set2.getObject("COLUMN_NAME"));
					ci2.setKeyType(1); // 设置为主键类型
					ti.getPrikeys().add(ci2);
				}

				if (ti.getPrikeys().size() > 0) { // 取唯一主键。。方便使用。如果是联合主键。则为空!
					ti.setOnlyPriKey(ti.getPrikeys().get(0));
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	
}

 

展开
收起
爱吃鱼的程序员 2020-06-07 16:36:53 603 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
                        <p>可能是你的代码里面没有指定库名,导致获取了 sys 或者 mysql 库中的表</p>
    
    2020-06-07 16:37:08
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载