你用的什么数据库?几个?其实很简单,用查询语句查出表结构返回给程序,你可以把每次的查询结果放到一个文件里,然后比对。还有更简单的是做一个存储过程,返回差异内容给程序,然后设置定时执行
javasqlResultSetMetaData
--------------------------------------------------------------------------------
public interface ResultSetMetaData
可用于获取关于 ResultSet 对象中列的类型和属性信息的对象。以下代码片段创建 ResultSet 对象 rs,创建 ResultSetMetaData 对象 rsmd,并使用 rsmd 查找 rs 有多少列,以及 rs 中的第一列是否可以在 WHERE 子句中使用。
ResultSet rs = stmtexecuteQuery("SELECT a, b, c FROM TABLE2");
ResultSetMetaData rsmd = rsgetMetaData();
int numberOfColumns = rsmdgetColumnCount();
boolean b = rsmdisSearchable(1);
以前写过,没有备份代码,用javasqlResultSetMetaData很简单就实现了,用rsgetMetaData();可生成其实现类的对象
在JAVA开发中数据库的学习也是我们需要了解的,截下来几篇文章都是关于数据库的设计和应用,那么java课程培训机构废话不多说开始学习吧!
数据库的设计
数据库设计是基础,数据库优化是建立在设计基础之上的。好的数据库一定拥有好的设计。
数据库设计的目标是为用户和各种应用系统提供一个信息基础设施和高效的运行环境。
数据库的三大范式
第一范式1NF:所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。
第二范式2Nf:第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
第三范式3Nf:所有字段必须与主键直接相关,而不是间接相关。也可以理解为字段不要和其他非主键字段相关
注意:这三个范式尽可能去遵守,不是一定要墨守成规这只是让我们设计的表的时候,越靠近这些范式,可以使字段尽量的减小冗余但是有时候也可以根据实际需要小小的违背一下但是第三范式违反一下还可以接受,但是第一范式别违反
数据库设计的步骤
需求分析阶段
准确了解与分析用户需求(包括数据与处理)。是整个设计过程的基础,是最困难、最耗费时间的一步。
概念结构设计阶段
是整个数据库设计的关键--设计数据库的E-R模型图,确认需求信息的正确和完整
Entity_Relationship---实体之间的关系
一对一
一对多
多对一
解决方法很多!数据要存储为树形结构,那么数据要有父子关系。
一个父节点有多个子节点,一个子节点又有多个子子节点。
publicclassTreeNode{
/节点主键/
privateStringid;
/节点名称/
privateStringtext;
/子节点/
privateTreeNode[]children;
}
public static void getConnAndTableStruct(){
Connection connection = null;
PreparedStatement pstmt = null;
ResultSetMetaData rsmd = null;
try {
//mysql连接
ClassforName("orggjtmmmysqlDriver");
connection = DriverManagergetConnection(
"jdbc:mysql://localhost:3306/test", "root", "root");
//oracle连接
// ClassforName("oraclejdbcdriverOracleDriver");
// String url="jdbc:oracle:thin:@17310211:1521:test";
// connection=DriverManagergetConnection(url,"root","root");
pstmt = (PreparedStatement) connectionprepareStatement("select from user");
pstmtexecute(); //这点特别要注意:如果是Oracle而对于mysql可以不用加
rsmd = (ResultSetMetaData) pstmtgetMetaData();
className="User";
tableName="user";
for (int i = 1; i < rsmdgetColumnCount() + 1; i++) {
Table table=new Table();
tablesetColumnName(rsmdgetColumnName(i));
tablesetColumnType(rsmdgetColumnClassName(i)substring(rsmdgetColumnClassName
(i)lastIndexOf("")+1));
tablesadd(table);
Systemoutprintln(rsmdgetColumnName(i)+ " " +rsmdgetColumnTypeName(i)
+" " +rsmdgetColumnClassName(i)+ " "+rsmdgetTableName(i));
}
}
catch (ClassNotFoundException cnfex) {
cnfexprintStackTrace();
}
catch (SQLException sqlex) {
sqlexprintStackTrace();
}
}
以上就是关于java 关于对比数据库表结构前后变化情况。全部的内容,包括:java 关于对比数据库表结构前后变化情况。、java中如何读出sqlserver数据库中的表结构、java课程培训机构分享Mysql数据库的设计和优化等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)