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格式返回呢?的主要内容,如果未能解决你的问题,请参考以下文章