JAVA使用jdbc做Mysql自定义字段查询,可做web网页自定义sql查询

可做web网页自定义sql查询

使用json对象处理数据,便于前端遍历展示。

使用相关技术:

  1. JDBC ,连接数据库;
  2. 使用ResultSetMetaData对象获取返回字段数据;
  3. 使用getColumnCount()方法获取字段数量;
  4. 根据字段数量遍历字段信息,目前不好获取字段注释,若有获取字段注释的朋友,请留言【感谢!!!】;
  5. 根据字段下标获取字段值;

引用的包代码展示

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

第一步、声明变量

静态变量,根据情况拟定代码展示.

private static final String url = "jdbc:mysql://localhost:3306/dmsdb_ntsy001";// 数据库地址
private static final String name = "com.mysql.jdbc.Driver";// 数据库驱动
private static final String username = "root";// 数据库登录用户名
private static final String password = "p@ssw0rd";// 数据库登录密码

private static Connection connection = null;// 连接对象
private static PreparedStatement pst = null;// 事务对象

第二步、加载驱动

    /**
	 * 获取连接
	 * 
	 * @throws Exception
	 * 
	 * @auther zhuteng
	 * @time 2019年7月24日
	 */
	private static void getConnection() throws Exception
	{
		try
		{
			Class.forName(name);// 加载驱动
			connection = DriverManager.getConnection(url, username, password);
		}
		catch (Exception e)
		{
			throw e;
		}
	}

第三步、获取连接,封装sql查询、关闭连接

    /**
	 * 執行sql查詢
	 * 
	 * @auther zhuteng
	 * @time 2019年7月25日
	 */
	public static JSONObject executeQuerySql(String sql) throws Exception
	{
		getConnection();// 获取连接
		pst = connection.prepareStatement(sql.toString());
		ResultSet result = pst.executeQuery();// 查询结果
		ResultSetMetaData rsmd = result.getMetaData();
		JSONArray tableTitle = new JSONArray();// 表格头
		for (int i = 1; i <= rsmd.getColumnCount(); i++)
		{
			JSONObject tableTitle_Th = new JSONObject();// 表格头单元格
			tableTitle_Th.put("columnname", rsmd.getColumnName(i));// 字段名
			tableTitle_Th.put("tablename", rsmd.getTableName(i));// 表名
			tableTitle_Th.put("columnclassname", rsmd.getColumnClassName(i));// JAVA_数据类型
			tableTitle_Th.put("columntypename", rsmd.getColumnTypeName(i) + "(" + rsmd.getColumnDisplaySize(i) + ")");// DB_数据类型
			tableTitle.add(tableTitle_Th);// 保存到数组
		}
		JSONObject table = new JSONObject();// 所有查詢的數據
		JSONArray tableBody = new JSONArray();// 表格内容
		while (result.next())
		{
			JSONArray tableRow = new JSONArray();// 表内容单元格
			for (int i = 1; i <= rsmd.getColumnCount(); i++)
			{
				String classname = rsmd.getColumnClassName(i);// 数据类型
				switch (classname)
				{
					case "java.math.BigDecimal":
					{
						tableRow.add(result.getBigDecimal(i));
						break;
					}
					case "java.lang.Boolean":
					{
						tableRow.add(result.getBoolean(i));
						break;
					}
					case "java.lang.Byte":
					{
						tableRow.add(result.getByte(i));
						break;
					}
					case "java.util.Date":
					{
						Date date = result.getDate(i);
						String time = "";
						if (date != null)
						{
							time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
						}
						tableRow.add(time);
						break;
					}
					case "java.sql.Date":
					{
						java.sql.Date date = result.getDate(i);
						String time = "";
						if (date != null)
						{
							time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
						}
						tableRow.add(time);
						break;
					}
					case "java.lang.Double":
					{
						tableRow.add(result.getDouble(i));
						break;
					}
					case "java.lang.Float":
					{
						tableRow.add(result.getFloat(i));
						break;
					}
					case "java.lang.Integer":
					{
						tableRow.add(result.getInt(i));
						break;
					}
					case "java.lang.Long":
					{
						tableRow.add(result.getLong(i));
						break;
					}
					case "java.lang.String":
					{
						tableRow.add(result.getString(i));
						break;
					}
				}
			}
			tableBody.add(tableRow);
		}
		close();// 关闭
		table.put("tableTitle", tableTitle);
		table.put("tableBody", tableBody);
		return table;
	}

第四步、执行测试

public static void main(String[] args) throws Exception
	{
		StringBuffer sql = new StringBuffer();// 拼接sql
		sql.append("SELECT b.`CONSUMABLENAME`,b.`CONSUMABLENORMS`,b.`CONSUMABLESTYLE`,b.`COUNTUNIT`,b.`CONSUMABLEBID` ,");
		sql.append("c.`CATEGORYNAME` firstcategory,d.`CATEGORYNAME` secondcategory ");
		sql.append("FROM `t_gz_store_commonconsumable` a,`t_gz_consumable` b,`t_firstcategory` c,`t_secondcategory` d ");
		sql.append(" WHERE a.`CONSUMABLEID`=b.`CONSUMABLEID` AND a.`FIRSTCATEGORYID`=c.`FIRSTCATEGORYID` ");
		sql.append("AND a.`SECONDCATEGORYID`=d.`SECONDCATEGORYID`LIMIT 0,10;");
		JSONObject table = executeQuerySql(sql.toString());
		JSONArray tableTitle = table.getJSONArray("tableTitle");
		JSONArray tableBody = table.getJSONArray("tableBody");
		System.out.print("sortnum\t");
		for (int j = 0; j < tableTitle.size(); j++)
		{
			JSONObject tableTitle_Th = (JSONObject) tableTitle.get(j);
			System.out.print(tableTitle_Th.get("columnname") + "\t");
		}
		System.out.println("\n------------------------------------------------------------------------------------------------------------------------");
		for (int i = 0; i < tableBody.size(); i++)
		{
			JSONArray row = (JSONArray) tableBody.get(i);
			System.out.print((i + 1) + "\t");
			for (int j = 0; j < row.size(); j++)
			{
				System.out.print(row.get(j) + "\t");
			}
			System.out.println();
		}
	}

效果展示

sortnum	CONSUMABLENAME	CONSUMABLENORMS	CONSUMABLESTYLE	COUNTUNIT	CONSUMABLEBID	CATEGORYNAME	CATEGORYNAME	
------------------------------------------------------------------------------------------------------------------------
1	腔镜关节头直线型切割吻合器和钉仓	EC60A4230.000	卫生材料	植入材料	
2	腔镜直线型切割吻合器和钉仓	EC604000.000	卫生材料	植入材料	
3	腔镜关节头直线型切割吻合器和钉仓	ECR60W1976.000	卫生材料	植入材料	
4	腔镜关节头直线型切割吻合器和钉仓	ECR60B1976.000	卫生材料	植入材料	
5	腔镜关节头直线型切割吻合器和钉仓	ECR60D1976.000	卫生材料	植入材料	
6	腔镜关节头直线型切割吻合器和钉仓	ECR60G1976.000	卫生材料	植入材料	
7	一次性使用圆形吻合器	CCS253750.000	卫生材料	植入材料	
8	一次性使用圆形吻合器	CCS293750.000	卫生材料	植入材料	
9	超声刀刀头	HAR238600.000	卫生材料	植入材料	
10	超声刀刀头	HAR368600.000	卫生材料	植入材料	

注:

需要导入数据库连接驱动
此工具类无需修改,适用于Oracle、Mysql、SqlServer数据库。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TorZhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值