JAVA使用jdbc做Mysql自定义字段查询
可做web网页自定义sql查询
使用json对象处理数据,便于前端遍历展示。
使用相关技术:
- JDBC ,连接数据库;
- 使用ResultSetMetaData对象获取返回字段数据;
- 使用getColumnCount()方法获取字段数量;
- 根据字段数量遍历字段信息,目前不好获取字段注释,若有获取字段注释的朋友,请留言【感谢!!!】;
- 根据字段下标获取字段值;
引用的包代码展示
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 腔镜关节头直线型切割吻合器和钉仓 EC60A 把 4230.000 卫生材料 植入材料
2 腔镜直线型切割吻合器和钉仓 EC60 把 4000.000 卫生材料 植入材料
3 腔镜关节头直线型切割吻合器和钉仓 ECR60W 个 1976.000 卫生材料 植入材料
4 腔镜关节头直线型切割吻合器和钉仓 ECR60B 个 1976.000 卫生材料 植入材料
5 腔镜关节头直线型切割吻合器和钉仓 ECR60D 个 1976.000 卫生材料 植入材料
6 腔镜关节头直线型切割吻合器和钉仓 ECR60G 个 1976.000 卫生材料 植入材料
7 一次性使用圆形吻合器 CCS25 把 3750.000 卫生材料 植入材料
8 一次性使用圆形吻合器 CCS29 把 3750.000 卫生材料 植入材料
9 超声刀刀头 HAR23 把 8600.000 卫生材料 植入材料
10 超声刀刀头 HAR36 把 8600.000 卫生材料 植入材料
注:
需要导入数据库连接驱动
此工具类无需修改,适用于Oracle、Mysql、SqlServer数据库。