MySQL怎么写存储过程查询某个表的某一条记录,并把这条记录的所有列名对应的值以json格式返回呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL怎么写存储过程查询某个表的某一条记录,并把这条记录的所有列名对应的值以json格式返回呢?相关的知识,希望对你有一定的参考价值。

给你个思路吧,既然你能问出这种问题应该是有了思路就会自己做的人,就不帮你写代码了。
首先,你确定这个表的所有字段中没有二进制内容,如果没有的话,下面这个思路你可以试试,但是如果有的话估计就需要对二进制进行特别的处理了,如果你有的话再追问吧。
思路开始:
1.如果你是对一张确定的表(提前已经知道表结构)进行这样的处理,那就查询出来一条记录,通过mysql的字符串拼接函数CONCAT,按照JSON格式,慢慢的拼一个字符串,最后通过select这个字符串返回这个字符串就行了。
2.如果之前你并不知道,这个表的结构,甚至你根本不知道自己要处理的是那张表,那么存储过程中你需要传递一个表名进来,然后查询information_schema数据库中的COLUMNS表,从而获得这个表的具体字段信息,以及各个字段的先后顺序(为后面拼接字符串使用),剩下的就跟1中描述的思路一样了。

虽然不知道你的用处是什么,不过,以我个人的经验,这种返回JSON的方式并不可取,这样会增加数据库的负担,理论上应该是将数据出来后自己在程序中拼接。
参考技术A 先查询出来,在进行json编码返回

MySQL存储过程实例

一、创建MySQL数据库函数

 

TCC:无参数,查询fruit表中的所有数据

 

TAA:两个参数,查询fruit总共有多少行;查询ids为某个值时水果表的数据

 

TDD:两个参数,查询ids不等于某个值,数量大于某个值,水果表的数据

二、Java操作MySQL函数

package com.itnba.maya.cunchu;

import java.util.*;
import java.sql.*;

public class Test {

    public static void main(String[] args) throws Exception{
        String div="com.mysql.jdbc.Driver";
        String url="jdbc:mysql://127.0.0.1:3306/mydb?characterEncoding=GBK";
        String uid="root";
        String pwd="";
        
        Class.forName(div);
        Connection conn = DriverManager.getConnection(url,uid,pwd);
        //CallableStatement stat = conn.prepareCall("call TCC()");    //调用没有参数的存储过程
        
        //CallableStatement stat = conn.prepareCall("call TAA(?,?)");//调有参数的存储过程(输入参数)
        //stat.setString(1, "k002");
        //stat.setInt(2, 99);
                        
        CallableStatement stat = conn.prepareCall("call TDD(?,?)");//调有参的存储过程(输出参数)
        stat.setString(1, "k001");
        stat.setInt(2,80);
        ResultSet rs = stat.executeQuery();    
        while(rs.next()){
            System.out.println(rs.getString(2));
        }
        conn.close();

    }

}

运行结果

菠萝
桔子
葡萄
樱桃
桃子
香蕉
草莓

 

 

对照fruit表

 

以上是关于MySQL怎么写存储过程查询某个表的某一条记录,并把这条记录的所有列名对应的值以json格式返回呢?的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库查询去除重复的记录,保留其中的某一条

mysql查询时间最大的某一列

主表和子表是一对多,查询主表数据以及子表的某一条数据

求助一条mysql 更新 语句 where 后面为查询的结果

如何给SQl数据库的某一条记录中的某一项赋空值

在mysql中为某一行的某几列插入数据怎么写