`
ligb2006
  • 浏览: 33284 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

mysql的动态sql应用

阅读更多
运行环境: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的人也顶下
1
0
分享到:
评论

相关推荐

    mysql转化成sql server sql转化成mysql工具

    2. 转换规则应用:根据SQL Server的语法特性,工具会将MySQL的SQL语句转化为相应的SQL Server语法。 3. 数据导出:将MySQL中的数据导出为SQL脚本,或者直接导入到SQL Server中。 4. 验证与调整:迁移后,需要验证...

    springboot多数据源切换mysql+sql server事例

    本示例“springboot多数据源切换mysql+sql server”是关于如何在Spring Boot项目中配置和使用多个数据库的数据源切换。下面将详细阐述这个主题的知识点。 首先,**多数据源**是指在一个应用中同时连接并操作多个...

    springboot + mybatis +mysql+ sqlserver 双数据源

    本项目"springboot + mybatis +mysql+ sqlserver 双数据源"正是针对这种需求的一个解决方案,它利用SpringBoot框架、MyBatis持久层框架以及MySQL和SQLServer两种数据库,实现了数据源的自动切换,以满足不同业务场景...

    Oracle Sql语句转换成Mysql Sql语句

    当需要将一个基于Oracle SQL的应用程序迁移到MySQL环境时,就需要进行SQL语句的转换工作。本项目提供了一个Java源码工具,能够帮助用户便捷地将Oracle SQL语句转换为MySQL SQL语句。 Oracle SQL与MySQL SQL的主要...

    数据库转换工具MySQL 转为SqlServer 脚本

    本主题聚焦于如何使用特定工具或脚本将MySQL数据库转换为SQL Server,这一过程通常称为“数据库迁移”。以下是关于这个过程的一些关键知识点: 1. **数据库迁移的目的**:迁移可能出于多种原因,如业务增长、性能...

    mysql和sqlserver的驱动包

    MySQL和SQL Server是两种广泛应用的关系型数据库管理系统(RDBMS),它们在许多方面都有不同的特点和功能。在开发与数据库交互的应用程序时,通常需要相应的驱动程序来建立连接,执行查询和其他操作。以下是对这两个...

    PHP+Mysql 带SQL注入源码 下载

    当应用程序没有正确地过滤用户输入并将其直接拼接到SQL查询中时,就可能发生SQL注入。例如,一个不安全的登录表单可能会允许攻击者通过输入`' OR '1'='1`这样的字符串,使得所有用户的登录尝试都能成功,因为这个...

    从mysql数据库迁移至sqlserver数据库

    5. 应用程序适配:如果存在依赖于MySQL的应用程序,需要修改应用程序代码,使其能与SQL Server兼容。 6. 验证和测试:迁移完成后,进行详尽的验证和测试,确保所有数据的完整性和一致性,以及业务功能的正常运行。 ...

    SQLDeveloper工具/MySQL/SQLServer驱动程序

    在实际应用中,如果你需要将MySQL或SQL Server的数据复制到Oracle,SQLDeveloper提供了数据迁移工具。这些工具通常包括数据泵(Data Pump)和SQL*Loader,它们能高效地批量迁移大量数据。在设置过程中,你需要配置源...

    连接mysql sqlserver的两个数据库

    MySQL和SQL Server分别是两种广泛应用的关系型数据库系统,由不同的公司开发:MySQL由Oracle公司维护,而SQL Server则是微软的产品。有时,出于业务需求,我们需要在这些不同的数据库之间进行数据交换或同步。本文将...

    Effective MySQL之SQL语句最优化.pdf

    尽管如此,我将基于标题和描述中提供的关键词“Effective MySQL之SQL语句最优化”来构建知识点。 1. SQL语句最优化的概念:在数据库管理中,对SQL语句进行优化是提高数据库性能的关键环节。最优化的SQL语句能够在...

    MyBatis 实现MySQL动态SQL的编写技巧及应用场景

    使用场景及目标:适用于任何需要动态组合SQL语句的应用程序开发环境,尤其是涉及大量数据筛选、增删查改等业务操作的场合。 其他说明:通过本教程的学习,开发者不仅能够提升SQL编写效率,还能提高系统的可维护性和...

    Effective MySQL之SQL语句最优化(高清)

    《Effective MySQL之SQL语句最优化》提供了很多可以用于改进数据库和应用程序性能的最佳实践技巧,并对这些技巧做了详细的解释。《Effective MySQL之SQL语句最优化》希望能够通过一步步详细介绍SQL优化的方法,帮助...

    springboot在项目中集成 mysql,sqlserver多数据源项目源代码.zip

    在现代企业级应用开发中,数据源的多样性是常见的需求,比如同时使用MySQL和SQL Server进行数据存储。Spring Boot作为一款轻量级的框架,它提供了便捷的方式将这些不同的数据库集成到同一个项目中。本项目源码即展示...

    在windows服务器上安装MYSQL/SQLSERVER云数据库

    MYSQL更适合Web应用程序和大数据处理,而SQLSERVER更适合企业级应用程序和商业智能应用。 知识点二:SQL Server 2008 R2安装步骤 安装SQL Server 2008 R2需要安装两个文件:SQLManagementStudio_x64_CHS.exe和...

    MySQL to SQL Server 2005 迁移工具

    MySQL到SQL Server 2005的迁移是一个复杂的过程,涉及到数据转换、数据库结构映射以及应用程序接口的适配。这个过程通常需要专业的工具来帮助完成,以确保数据的完整性和迁移的顺利进行。以下是对这个主题的详细阐述...

    Mysql转Sqlserver.rar

    《MySQL到SQL Server数据库迁移与前端模板应用》 在当今数据驱动的世界中,数据库系统的选择对应用程序的性能和效率起着关键作用。本资源“Mysql转Sqlserver.rar”提供了一个详细的过程,帮助用户将基于MySQL的数据...

    mysql数据库转换成SQLserver数据库

    MySQL和SQL Server是两种非常流行的开源和商业化的DBMS,各有其特点和优势。当我们面临从MySQL转换到SQL Server的情况时,这通常涉及到数据迁移、结构映射以及兼容性处理等挑战。 "mysql数据库转换成SQLserver...

    MySQL+sql2000+sql2005驱动

    MySQL、SQL Server 2000 和 SQL Server 2005 是三种广泛使用的数据库管理系统,它们在IT领域中有着重要的地位。驱动程序是连接应用程序与数据库的关键组件,本资源集合包含了不同数据库的驱动,方便开发者进行数据...

Global site tag (gtag.js) - Google Analytics