MySQL表数据比较和Object全文搜索

  •  比较MySQL表中的数据:先需要过滤排除不需要比较的字段,比如timestamp字段等;然后再排序字段(先按关键字排序,再按非空的字段排序,最后按其他字段排序), 当然一般情形还需要加where 条件,下面写了一个函数来构造一个SQL 语句。
    CREATE DEFINER=`mysql`@`%` FUNCTION `f_toolkit_getFieldListFromTable`(`databaseName` varchar(255),`tableName` varchar(255),`is_RemoveTimestampField` boolean,excludeFiledlist varchar(1024)) RETURNS varchar(1024) CHARSET latin1
    BEGIN
    	DECLARE exception_occured TINYINT default 0;
    	DECLARE curr_field varchar(255);
      DECLARE curr_type varchar(255);
    	DECLARE curr_key  varchar(255);
      DECLARE curr_isnull varchar(10);
      DECLARE key_field_limit int DEFAULT 5;
    
    	DECLARE TMP_CUR CURSOR FOR 
                           select column_name, column_type,column_key,is_nullable from information_schema.columns where table_schema=trim(databaseName) and table_name=trim(tableName) and  locate(binary upper(column_name),binary upper(excludeFiledlist)) = 0 
                           order by column_key desc,IS_NULLABLE,ORDINAL_POSITION; 
    	
    	DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,NOT FOUND SET exception_occured = 1;
    	set @result = '';
    	set @orderBy = '';
    	set @nonNull = '';
    	set @nonNull_no = 0;
    	set @nonKey_no = 0;
    	set @nonKeyFields = '';
    	OPEN TMP_CUR;
    	LOOP_LABLE:LOOP    
    	   FETCH TMP_CUR into curr_field,curr_type,curr_key,curr_isnull;
    	   IF exception_occured = 1 THEN              
    	      LEAVE LOOP_LABLE;
    	   END IF; 
    		 IF !(is_RemoveTimestampField && curr_type like 'timestamp') then 
    			 if @result = '' then 
    					set @result = curr_field;
    			 else
    					set @result = CONCAT(@result,',',curr_field);
           end if;
    			
    			set @nonKey_no = @nonKey_no + 1;
    			if @nonKeyFields  = '' then 
    				set @nonKeyFields = curr_field;
    			else 
    			 if @nonKey_no < key_field_limit then 
    					set @nonKeyFields = concat(@nonKeyFields,',',curr_field);
    			 end if;
    		 end if;
    		 if lower(curr_key) in ('pri','mul','uni') then 
    				if @orderBy = '' then 
    					 set @orderBy = curr_field;
    				else
    					 set @orderBy = CONCAT(@orderBy,',',curr_field);
    				end if;
    		 end if;
    		 if lower(curr_isnull) = 'no' && @nonNull_no < key_field_limit then 
    				if @nonNull = '' then 
    						set @nonNull = curr_field;
    				else
    						set @nonNull = CONCAT(@nonNull,',',curr_field);
    				end if;
    				set @nonNull_no = @nonNull_no + 1;
    				
    		 end if;
    				
    		 END IF;
    	END LOOP LOOP_LABLE;         
    	CLOSE TMP_CUR; 
    	if @orderBy = '' then 
    		if @nonNull = '' then
    			set @orderBy = @nonKeyFields;
    		else
    		  set @orderBy = @nonNull;
    		end if;
      end if;
    
    	RETURN CONCAT('select ', @result , ' from ', databaseName, '.', tableName, ' order by ', @orderBy);
    END
     
  • 常常要全文搜索object(如Field,table,view,procedure)被其他object引用(这里是包含或用到的意思),写了一个存储过程来完成(需要MySQL 5.1 及以上支持)
    CREATE DEFINER=`mysql`@`%` PROCEDURE `P_lookup_allObject_isUsing_Some_object`(`object` varchar(255))
    BEGIN
      set @v_obj_orginal = `object`;
      set `object` = concat('[^a-zA-Z_0-9]',ifnull(`object`,'null'),'[^a-zA-Z_0-9]');
      select name from (
            select concat(event_SCHEMA,'.',event_NAME) as name, 'event' as type from information_schema.events where EVENT_DEFINITION regexp `object`
      union   select concat(TRIGGER_SCHEMA,'.',TRIGGER_NAME) as name,'trigger' as type from information_schema.triggers where ACTION_STATEMENT regexp `object` or  ACTION_CONDITION regexp `object`  union select concat(ROUTINE_SCHEMA,'.',ROUTINE_NAME) as type, ROUTINE_TYPE from information_schema.routines where ROUTINE_DEFINITION regexp `object`
     union select concat(TABLE_SCHEMA,'.',TABLE_NAME) as name, 'view' as type from information_schema.views where VIEW_DEFINITION regexp `object`
     union select concat(db,'.',`name`) as name, type from mysql.proc where body regexp `object`
     union select concat(TABLE_SCHEMA,'.',TABLE_NAME) as name, 'column' as type from information_schema.`COLUMNS` where COLUMN_NAME like @v_obj_orginal
     union select concat(db,'.',`name`) as name, 'event' as type from mysql.`event` where body regexp `object`) as Q order by type, name;
    
    END
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Java JDBC API来连接MySQL数据库,然后使用SELECT语句从中检索数据。以下是一个简单的示例代码,可以在Java Swing应用程序中使用按键来搜索MySQL数据: ```java import java.awt.*; import java.awt.event.*; import java.sql.*; import javax.swing.*; public class SearchData extends JFrame implements ActionListener { private JTextField searchField; private JTextArea resultArea; private JButton searchButton; public SearchData() { super("Search MySQL Data"); setLayout(new BorderLayout()); searchField = new JTextField(); add(searchField, BorderLayout.NORTH); resultArea = new JTextArea(); add(new JScrollPane(resultArea), BorderLayout.CENTER); searchButton = new JButton("Search"); searchButton.addActionListener(this); add(searchButton, BorderLayout.SOUTH); setSize(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void actionPerformed(ActionEvent e) { try { // Connect to MySQL database Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); // Create a statement object Statement stmt = con.createStatement(); // Execute the SELECT query String query = "SELECT * FROM mytable WHERE field LIKE '%" + searchField.getText() + "%'"; ResultSet rs = stmt.executeQuery(query); // Display the result in the text area resultArea.setText(""); while (rs.next()) { resultArea.append(rs.getString("field1") + "\t" + rs.getString("field2") + "\n"); } // Close the result set, statement, and connection rs.close(); stmt.close(); con.close(); } catch (Exception ex) { ex.printStackTrace(); } } public static void main(String[] args) { new SearchData(); } } ``` 在上面的代码中,当用户单击“Search”按钮时,将调用actionPerformed方法。该方法将从文本框中获取搜索字符串,然后使用LIKE运算符在MySQL搜索匹配的行。查询的结果将在文本区域中显示。注意,这只是一个简单的示例,你需要根据自己的需求进行修改和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值