JDBC连接数据库执行语句并对结果进行解析
JDBC 连接数据库的操作步骤
- 加载驱动
- 准备用户信息和url
- 获取数据库连接对象
- 创建执行sql的对象
- 执行sql的对象去执行sql,可能存在结果,查看返回结果
- 取出结果
- 释放连接
一般对于ResultSet,经常结合ResultSetMetaData下的方法进行对 ResultSet 迭代取出
方法 | 作用 |
---|---|
getColumnCount | 列数 |
getColumnName | 列名 |
getColumnLabel | 列标题 / 别名 |
应用以上方法对 resultSet 结果集封装为List集合。
//6.对结果集进行遍历取出结果
List list = new ArrayList();
while (resultSet.next()){
Map rowData = new HashMap();
for (int i = 1; i <= data.getColumnCount(); i++) {
// rowData.put(data.getColumnName(i), resultSet.getObject(i)); //以表中的字段输出
rowData.put(data.getColumnLabel(i), resultSet.getObject(i)); //以表中的字段别名输出
}
list.add(rowData);
}
针对于Java获取数据库的列名、列数、标题等其他信息,ResultSetMetaData下中的方法举例(暂时注释对于结果集封装为List集合)。
JDBC 连接MySQL数据库的代码如下:
public class jdbcTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1、加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2、用户信息和url
String url = "jdbc:mysql://localhost:3306/health?serverTimezone=GMT&useUnicode=true&characterEncoding=utf8&useSSL=true";
String username = "root";
String password = "123456";
//3、连接成功,数据库对象
Connection connection = DriverManager.getConnection(url, username, password);
//4、执行sql的对象
Statement statement = connection.createStatement();
//5、执行sql的对象去执行sql,可能存在结果,查看返回结果
String sql = "select code '编码',name '名称',helpCode '助记码',remark '标记' from t_checkgroup";
ResultSet resultSet = statement.executeQuery(sql);
ResultSetMetaData data = resultSet.getMetaData();
testResultTableValues(data, resultSet);
//6.对结果集进行遍历取出结果
/* List list = new ArrayList();
while (resultSet.next()){
Map rowData = new HashMap();
for (int i = 1; i <= data.getColumnCount(); i++) {
// rowData.put(data.getColumnName(i), resultSet.getObject(i)); //以表中的字段输出
rowData.put(data.getColumnLabel(i), resultSet.getObject(i)); //以表中的字段别名输出
}
list.add(rowData);
}
//输出结果
System.out.println(list);*/
//7、释放连接
resultSet.close();
statement.close();
connection.close();
}
static void testResultTableValues(ResultSetMetaData data, ResultSet rs) {
try {
while (rs.next()) {
for (int i = 1; i <= data.getColumnCount(); i++) {
//获得所有列的数目及实际列数
int columnCount = data.getColumnCount();
//获得指定列的列名
String columnName = data.getColumnName(i);
//获得指定列的列值
String columnValue = rs.getString(i);
//获得指定列的数据类型
int columnType = data.getColumnType(i);
//获得指定列的数据类型名
String columnTypeName = data.getColumnTypeName(i);
//所在的Catalog名字
String catalogName = data.getCatalogName(i);
//对应数据类型的类
String columnClassName = data.getColumnClassName(i);
//在数据库中类型的最大字符个数
int columnDisplaySize = data.getColumnDisplaySize(i);
//默认的列的标题
String columnLabel = data.getColumnLabel(i);
//获得列的模式
String schemaName = data.getSchemaName(i);
//某列类型的精确度(类型的长度)
int precision = data.getPrecision(i);
//小数点后的位数
int scale = data.getScale(i);
//获取某列对应的表名
String tableName = data.getTableName(i);
//是否自动递增
boolean isAutoInctement = data.isAutoIncrement(i);
//在数据库中是否为货币型
boolean isCurrency = data.isCurrency(i);
//是否为空
int isNullable = data.isNullable(i);
//是否为只读
boolean isReadOnly = data.isReadOnly(i);
//能否出现在where中
boolean isSearchable = data.isSearchable(i);
System.out.println();
System.out.println("共获得" + columnCount + "列");
System.out.println("获得列" + i + "的字段名称:" + columnName);
System.out.println("获得列" + i + "的字段值:" + columnValue);
System.out.println("获得列" + i + "的类型,返回SqlType中的编号:" + columnType);
System.out.println("获得列" + i + "的数据类型名:" + columnTypeName);
System.out.println("获得列" + i + "所在的Catalog名字:" + catalogName);
System.out.println("获得列" + i + "对应数据类型的类:" + columnClassName);
System.out.println("获得列" + i + "在数据库中类型的最大字符个数:" + columnDisplaySize);
System.out.println("获得列" + i + "的默认的列的标题:" + columnLabel);
System.out.println("获得列" + i + "的模式:" + schemaName);
System.out.println("获得列" + i + "类型的精确度(类型的长度):" + precision);
System.out.println("获得列" + i + "小数点后的位数:" + scale);
System.out.println("获得列" + i + "对应的表名:" + tableName);
System.out.println("获得列" + i + "是否自动递增:" + isAutoInctement);
System.out.println("获得列" + i + "在数据库中是否为货币型:" + isCurrency);
System.out.println("获得列" + i + "是否为空:" + isNullable);
System.out.println("获得列" + i + "是否为只读:" + isReadOnly);
System.out.println("获得列" + i + "能否出现在where中:" + isSearchable);
}
}
} catch (SQLException e) {
System.out.println("数据库连接失败");
}
}
截取一段运行结果,结果图片供于参考: