运行环境:mysql 5.x,选择5.0及以上版本
/*----------------储存过程1,取出数据库中所有表信息-------------------------*/
/*author:henry
procedure name:sys_tables
create_date:20091023
*/
create procedure sys_tables(in databasename varchar(20))
begin
/*declare tmp_id int;*/
/*create temporary #table_field(id,fieldname)*/
drop table if exists tmp_tables;
create temporary table tmp_tables
(
`id` int not null,
`tablename` varchar(40) not null,
`tabletype` varchar(40) not null
);
set @rowno:=0;
set @str=concat("insert tmp_tables(id,tablename,tabletype) select @rowno:=@rowno+1, table_name,table_type from information_schema.tables where table_schema='",databasename);
set @str=concat(@str,"'");
prepare stmt1 from @str;
execute stmt1;
deallocate prepare stmt1;
/*select @tmp_id:=min(id) from tmp_tables;
while @tmp_id is not null do
select @tmp_table_name:=tablename from tmp_tables where id=@tmp_id;
call sys_tables_fmt(@tmp_table_name);
delete from tmp_tables where id=@tmp_id;
select @tmp_id:=min(id) from tmp_tables;
end while;*/
select * from tmp_tables;
drop temporary table tmp_tables;
end
/*----------------储存过程2,取出对应表信息-------------------------*/
/*author:henry
procedure name:sys_tables
create_date:20091023
*/
create procedure sys_tables_fmt(in tablename varchar(20))
begin
/*set @str=concat("select column_name from ",tablename)*/
/*创建临时表#table_field(id,fieldname)*/
drop table if exists table_field;
create temporary table table_field
(
`id` int not null,
`fieldname` varchar(40) not null,
`datatype` varchar(20) not null
);
set @rowno=0;
set @str=concat("insert table_field(id,fieldname,datatype) select ordinal_position as rowno,column_name,data_type from information_schema.columns where table_schema='wobuild' and table_name='",tablename);
set @str=concat(@str,"'");
prepare stmt1 from @str;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
select * from table_field;
drop temporary table table_field;
end
/*--------------------用jdbc中进行的调用-------------------*/
由于在测试的时候无法肯定多个结果集的取值,所以在此分两个储存过程来处理了:
java后台代码,主要参数为schema_obj="testbase";:当然也可作为动态参数传入;
package com.woBuild.dataBaseDao;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class TestDao {
public static ArrayList selectDown() {
ArrayList lise = new ArrayList();
Connection con = null;
//PreparedStatement s = null;
ResultSet rs_par = null;
ResultSet rs_chi = null;
CallableStatement cstmpar=null;
CallableStatement cstmchi=null;
con = DataBaseConnection.createConnection();
String rel="";
String bean_obj="";
String schema_obj="testbase";
try {
String PROC_EXEC_SQL_PAR="{CALL sys_tables(?)}" ;
cstmpar = con.prepareCall(PROC_EXEC_SQL_PAR);
cstmpar.setString(1,schema_obj);
rs_par = cstmpar.executeQuery();
while(rs_par.next()){
String tablename=rs_par.getString("tablename").trim();
bean_obj=tablename;
String tabletype=rs_par.getString("tabletype").trim();
if(tabletype.equals("BASE TABLE")){
String PROC_EXEC_SQL_CHI="{CALL sys_tables_fmt(?)}" ;
cstmchi = con.prepareCall(PROC_EXEC_SQL_CHI);
cstmchi.setString(1,bean_obj);
rs_chi = cstmchi.executeQuery();
while(rs_chi.next()){
String datatype=rs_chi.getString("datatype").trim();
String fieldname=rs_chi.getString("fieldname").trim();
if(datatype.equals("varchar")||datatype.equals("char")||datatype.equals("datetime")){
rel+="String "+fieldname+"=rs.getString(\""+fieldname+"\");\n";
}
else if(datatype.equals("int")){
rel+="Integer "+fieldname+"=rs.getInt(\""+fieldname+"\");\n";
}
}
rs_chi.beforeFirst();
while(rs_chi.next()){
String fieldname=rs_chi.getString("fieldname").trim();
String fieldnameTmp=fieldname.substring(0, 1).toUpperCase()+fieldname.substring(1, fieldname.length());
rel+=bean_obj+".set"+fieldnameTmp+"("+fieldname+")\n";
}
System.out.println(rel);
rel="";
}
}
} catch (SQLException ex1) {
ex1.printStackTrace();
} finally {
try {
cstmpar.close();
cstmchi.close();
rs_par.close();
rs_chi.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return lise;
}
public static void main(String[] args){
List li=TestDao.selectDown();
}
}
/*------------------数据库连接就不写出来了-----------------------*/
执行出来的结果,就是生成对应数据库的setXXX,及getXXX,可以借此进行扩展发挥,不同的数据库java代码不用动,只需更改相应的储存过程就行了,我们可以借此扩展自动生成我们想要的bean及相应的save(),query(),update(),这里就不在赘述了.
侃一下:俺不喜欢hibernate,所以请不喜欢hibernate的人也顶下
分享到:
相关推荐
2. 转换规则应用:根据SQL Server的语法特性,工具会将MySQL的SQL语句转化为相应的SQL Server语法。 3. 数据导出:将MySQL中的数据导出为SQL脚本,或者直接导入到SQL Server中。 4. 验证与调整:迁移后,需要验证...
本示例“springboot多数据源切换mysql+sql server”是关于如何在Spring Boot项目中配置和使用多个数据库的数据源切换。下面将详细阐述这个主题的知识点。 首先,**多数据源**是指在一个应用中同时连接并操作多个...
本项目"springboot + mybatis +mysql+ sqlserver 双数据源"正是针对这种需求的一个解决方案,它利用SpringBoot框架、MyBatis持久层框架以及MySQL和SQLServer两种数据库,实现了数据源的自动切换,以满足不同业务场景...
当需要将一个基于Oracle SQL的应用程序迁移到MySQL环境时,就需要进行SQL语句的转换工作。本项目提供了一个Java源码工具,能够帮助用户便捷地将Oracle SQL语句转换为MySQL SQL语句。 Oracle SQL与MySQL SQL的主要...
本主题聚焦于如何使用特定工具或脚本将MySQL数据库转换为SQL Server,这一过程通常称为“数据库迁移”。以下是关于这个过程的一些关键知识点: 1. **数据库迁移的目的**:迁移可能出于多种原因,如业务增长、性能...
MySQL和SQL Server是两种广泛应用的关系型数据库管理系统(RDBMS),它们在许多方面都有不同的特点和功能。在开发与数据库交互的应用程序时,通常需要相应的驱动程序来建立连接,执行查询和其他操作。以下是对这两个...
当应用程序没有正确地过滤用户输入并将其直接拼接到SQL查询中时,就可能发生SQL注入。例如,一个不安全的登录表单可能会允许攻击者通过输入`' OR '1'='1`这样的字符串,使得所有用户的登录尝试都能成功,因为这个...
5. 应用程序适配:如果存在依赖于MySQL的应用程序,需要修改应用程序代码,使其能与SQL Server兼容。 6. 验证和测试:迁移完成后,进行详尽的验证和测试,确保所有数据的完整性和一致性,以及业务功能的正常运行。 ...
在实际应用中,如果你需要将MySQL或SQL Server的数据复制到Oracle,SQLDeveloper提供了数据迁移工具。这些工具通常包括数据泵(Data Pump)和SQL*Loader,它们能高效地批量迁移大量数据。在设置过程中,你需要配置源...
MySQL和SQL Server分别是两种广泛应用的关系型数据库系统,由不同的公司开发:MySQL由Oracle公司维护,而SQL Server则是微软的产品。有时,出于业务需求,我们需要在这些不同的数据库之间进行数据交换或同步。本文将...
尽管如此,我将基于标题和描述中提供的关键词“Effective MySQL之SQL语句最优化”来构建知识点。 1. SQL语句最优化的概念:在数据库管理中,对SQL语句进行优化是提高数据库性能的关键环节。最优化的SQL语句能够在...
使用场景及目标:适用于任何需要动态组合SQL语句的应用程序开发环境,尤其是涉及大量数据筛选、增删查改等业务操作的场合。 其他说明:通过本教程的学习,开发者不仅能够提升SQL编写效率,还能提高系统的可维护性和...
《Effective MySQL之SQL语句最优化》提供了很多可以用于改进数据库和应用程序性能的最佳实践技巧,并对这些技巧做了详细的解释。《Effective MySQL之SQL语句最优化》希望能够通过一步步详细介绍SQL优化的方法,帮助...
在现代企业级应用开发中,数据源的多样性是常见的需求,比如同时使用MySQL和SQL Server进行数据存储。Spring Boot作为一款轻量级的框架,它提供了便捷的方式将这些不同的数据库集成到同一个项目中。本项目源码即展示...
MYSQL更适合Web应用程序和大数据处理,而SQLSERVER更适合企业级应用程序和商业智能应用。 知识点二:SQL Server 2008 R2安装步骤 安装SQL Server 2008 R2需要安装两个文件:SQLManagementStudio_x64_CHS.exe和...
MySQL到SQL Server 2005的迁移是一个复杂的过程,涉及到数据转换、数据库结构映射以及应用程序接口的适配。这个过程通常需要专业的工具来帮助完成,以确保数据的完整性和迁移的顺利进行。以下是对这个主题的详细阐述...
《MySQL到SQL Server数据库迁移与前端模板应用》 在当今数据驱动的世界中,数据库系统的选择对应用程序的性能和效率起着关键作用。本资源“Mysql转Sqlserver.rar”提供了一个详细的过程,帮助用户将基于MySQL的数据...
MySQL和SQL Server是两种非常流行的开源和商业化的DBMS,各有其特点和优势。当我们面临从MySQL转换到SQL Server的情况时,这通常涉及到数据迁移、结构映射以及兼容性处理等挑战。 "mysql数据库转换成SQLserver...
MySQL、SQL Server 2000 和 SQL Server 2005 是三种广泛使用的数据库管理系统,它们在IT领域中有着重要的地位。驱动程序是连接应用程序与数据库的关键组件,本资源集合包含了不同数据库的驱动,方便开发者进行数据...