java中jdbc,利用反射查询数据
/**
* 加载JDBC驱动;
* 建立并获取数据库连接;
* 创建 JDBC Statements 对象;
* 设置SQL语句的传入参数;
* 执行SQL语句并获得查询结果;
* 对查询结果进行转换处理并将处理结果返回;
* 释放相关资源(关闭Connection,关闭Statement,关闭ResultSet);
*
* @return list
*/
public static List<Map<String, Object>> queryForList() {
// 连接
Connection connection = null;
// 执行请求
PreparedStatement stmt = null;
// 返回数据
ResultSet rs = null;
// 返回格式
List<Map<String, Object>> resultList = new ArrayList<>();
try {
// 加载JDBC驱动(加不加newInstance都行,
// 因为静态初始化器的中已经进行了注册:
// DriverManager.registerDriver(new Driver());
// 所以不需要加newInstance,加了也没事)
Class.forName("com.mysql.jdbc.Driver").newInstance();
String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8";
String user = "root";
String password = "123456";
// 获取数据库连接
connection = DriverManager.getConnection(url, user, password);
//要执行的sql语句
String sql = "SELECT * FROM `user` WHERE id= ?";
// 创建Statement对象用于向数据库发送SQL语句(每一个Statement为一次数据库执行请求)
stmt = connection.prepareStatement(sql);
// 设置传入参数(int、string、list、object······)
stmt.setInt(1, 7);
// 执行SQL语句
rs = stmt.executeQuery();
// 处理查询结果(将查询结果转换成List<Map>格式)
ResultSetMetaData rsmd = rs.getMetaData();
int num = rsmd.getColumnCount();
Map<String, Object> map = new HashMap<>();
while (rs.next()) {
for (int i = 0; i < num; i++) {
// 获取字段名,从1开始
String columnName = rsmd.getColumnName(i + 1);
// 通过字段名获取值,放入map里
map.put(columnName, rs.getString(columnName));
}
// 将map里的数据放入list
resultList.add(map);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
} finally {
// 最后关闭所有连接
try {
// 关闭结果集
if (rs != null) {
rs.close();
}
// 关闭执行请求
if (stmt != null) {
stmt.close();
}
// 关闭数据库连接
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 返回最后的数据list
return resultList;
}
数据表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(4) NOT NULL AUTO_INCREMENT COMMENT 'id主键',
`name` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '姓名',
`password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',
`sex` int(2) NOT NULL DEFAULT 0 COMMENT '性别:0女,1男',
`birth` datetime(0) NOT NULL COMMENT '生日',
`update_date` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新日期',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 300 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;