oracle 连接数据库并查询,返回List<Map<String, Object>> 数据
package JDBC; import java.sql.Clob;
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.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class OracleJdbcTest {
//数据库连接对象
private static Connection conn = null; private static String driver = "oracle.jdbc.OracleDriver";//"oracle.jdbc.driver.OracleDriver"; //驱动 private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl"; //连接字符串 private static String username = "******"; //用户名 private static String password = "******"; //密码 // 获得连接对象
private static synchronized Connection getConn(){
if(conn == null){
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (SQLException e) {
e.printStackTrace();
}
}
return conn;
} //执行查询语句
public void query(String sql, boolean isSelect) throws SQLException{
PreparedStatement pstmt; try {
pstmt = getConn().prepareStatement(sql);
//建立一个结果集,用来保存查询出来的结果
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
String name = rs.getString("bm_mc");
System.out.println(name);
}
rs.close();
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
} private static String clob2String(Clob clob) throws Exception {
return (clob != null ? clob.getSubString(1, (int) clob.length()) : null);
} private static List<Map<String, Object>> ResultSetToList(ResultSet rs) throws Exception {
ResultSetMetaData md = rs.getMetaData(); // 得到结果集的结构信息,比如字段数、字段名等
// .getMetaData().getTableName(1) 就可以返回表名
int columnCount = md.getColumnCount(); // 得到结果集的列数
// System.out.println(columnCount);
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> rowData;
while (rs.next()) { //记录指针向下移动一个位置,如果其指向一条有效记录,则返回真;否则返回假。只有使记录指针不断移动,才能不断取出数据库中的数据 rowData = new HashMap<String, Object>(columnCount);
for (int i = 1; i <= columnCount; i++) {
Object v = rs.getObject(i); // 将任何数据类型返回为 Java Object
if (v != null && (v.getClass() == Date.class || v.getClass() == java.sql.Date.class)) { // 反射
Timestamp ts = rs.getTimestamp(i); // 返回时间和日期 java.sql.Timestamp
//rs.getDate()只是返回日期部分 java.sql.Date
//rs.getTime()只是返回时间部分 java.sql.Time
v = new java.util.Date(ts.getTime());
// v = ts;
} else if (v != null && v.getClass() == Clob.class) {
v = clob2String((Clob) v); // oracle11g 遇到取出来的字段是clob类型,clob用来存储大量文本数据
}
//System.out.println("ResultSetToList:"+md.getColumnLabel(i));
// rowData.put(camelName(md.getColumnLabel(i)), v==null?"":v);
rowData.put(md.getColumnLabel(i).toLowerCase(), v == null ? "" : v);
//getColumnName(int column):获取指定列的名称
//getColumnLabel(int column):获取用于打印输出和显示的指定列的建议标题。
// toUpperCase 的意思是将所有的英文字符转换为大写字母
// toLowerCase的意思是将所有的英文字符转换为小写字母
}
list.add(rowData);
}
return list;
} //执行查询语句
public List<Map<String, Object>> queryList(String sql, boolean isSelect) throws Exception{
PreparedStatement pstmt = getConn().prepareStatement(sql);;
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
//建立一个结果集,用来保存查询出来的结果
ResultSet rs = pstmt.executeQuery();
list = ResultSetToList(rs);
rs.close();
pstmt.close();
return list;
} public void query(String sql) throws SQLException{
PreparedStatement pstmt;
pstmt = getConn().prepareStatement(sql);
pstmt.execute();
pstmt.close();
} //关闭连接
public void close(){
try {
getConn().close(); } catch (SQLException e) {
e.printStackTrace();
}
} }
...
package JDBC; import java.sql.SQLException;
import java.util.List;
import java.util.Map; public class ConnOracle {
public static void main(String[] args) throws Exception {
OracleJdbcTest test = new OracleJdbcTest();
try {
test.query("drop table student");
} catch (SQLException e) {} //test.query("create table student(id int, name nchar(20))"); //test.query("insert into student values(1,'zhangsan')"); //test.query("insert into student values(2,'lisi')"); //test.query("select r.id from T_ry r", true); String sql = "select r.* from T_RY r where r.data_flag <> 'D' ";
List<Map<String, Object>> list = test.queryList(sql, true);
System.out.println(list);
test.close();
}
}
oracle 连接数据库并查询,返回List<Map<String, Object>> 数据的更多相关文章
- 使用 JDBC 和 JavaTemplate 查询SQL语句返回 List<Map<String,Object>>
使用JDBC执行sql语句返回List 类型: public class JdbcUtil { private static Log log = LogFactory.getLog(JdbcUtil. ...
- 分页查询和分页缓存查询,List<Map<String, Object>>遍历和Map遍历
分页查询 String sql = "返回所有符合条件记录的待分页SQL语句"; int start = (page - 1) * limit + 1; int end = pag ...
- jpa返回List<Map<String, Object>>相当于jdbctemplate的queryForlist
public class Test(){ @PersistenceContext(unitName = "manageFactory") protected EntityManag ...
- MyBatis 返回Map<String,Object>类型
<!-- 导出所有数据 --> <select id="exportAll" resultMap="map"> SELECT t1.ME ...
- Mybatis 遍历 List<Map<String,Object>>
在上一篇博客中总结了MyBatis Plus 实现多表分页模糊查询(链接在最后).返回类型是编写一个专门的vo类.这次是返回List < Map > 前言 编写一个专门的vo返回类,主 ...
- List<Map<String, Object>>相关
2016年8月6日13:53:00 --------------------------- List<Map<String, Object>> List集合新增列 则需要: L ...
- POST 发送HTTP请求入参为:String url, Map<String, Object> propsMap
/** * 发送HTTP请求 * * @param url * @param propsMap * 发送的参数 */ public static String httpSend(String url, ...
- JAVA中对List<map<String,Object>>根据map某个key值进行排序
方法compareTo()比较此对象与指定对象的顺序.如果该对象小于.等于或大于指定对象,则分别返回负整数.零或正整数.返回整数,1,-1,0:返回1表示大于,返回-1表示小于,返回0表示相等. 普通 ...
- List<Map<String, Object>> 与 json 互转
近期做指纹识别,需要用到缓存文件,数据量并不大,用redis不合适,所以用到了txt文件. 思路是 1.定时查询指纹,存到txt缓存文件中. 2.新增或删除指纹时,查询指纹,存到txt缓存文 ...
随机推荐
- SQL Server附加数据库错误5120处理方法
SQL Server附加数据库5120错误 当我们从另外一台服务器复制过来的数据库,可能会有如下错误: 解决方法 1.给数据库所在文件夹增加用户Everyone并赋予完全控制权限 2.以管理员身份运行 ...
- if 条件
返回不能被2整除的数 result = [] iter = range(10) for i in iter: if i % 2: print(f'{i}', i % 2) result.append( ...
- 图神经网络(GNN)--slide
课件是学习小组汇报时用的,许多资料是从大佬哪里搬运的.Tex文档也在里面. GNN课件,下载不了,可以点击 带你入门图神经网络(GNN) 图神经网络(GNN)学习推荐网址 傅里叶分析之掐死教程(完整版 ...
- 配置一个简单的传统SSM项目
背景 我们知道,从2002年开始,Spring一直在飞速的发展,如今已经成为了在Java EE开发中的标准,早期的项目都是传统的Spring-SpringMVC-Mybatis项目,打成一个war包丢 ...
- 常见的==和equals比较
在笔试上碰到很多这样类似的题,全部整理到这里 String a = "Hello"; String b = "Hello"; String c = new St ...
- NOIP 模拟七 考试总结
T1匹配 签到大水题,这里有hash,kmp,ac自动机,还有后缀数组,后缀自动机任您挑选. 不过这个数据范围有些坑啊,re就很不爽.做法我还是比较倾向hash的,毕竟不论神魔字符算法,hash大都能 ...
- IIS部署WCF详细教程
前言: 前段时间接手了公司一个十几年前的老项目,该项目对外提供的服务使用的是WCF进行通信的.因为需要其他项目需要频繁的使用该WCF服务,所以我决定把这个WCF部署到IIS中避免每次调试运行查看效果. ...
- 基础篇——Pycharm的安装与使用 初学者此篇够用
简介 Pycharm是python编程过程中最为推荐的编辑调试软件之一,其使用简单,界面友好,也成了学习Python路上必须学会的软件之一,本篇教程简单介绍一下windows用户从安装到日常使用的基本 ...
- The Data Way Vol.1|风口下的开源市场:如何看待开源与商业的关系?
关于「The Data Way」 「The Data Way」是由 SphereEx 公司出品的一档播客节目.这里有开源.数据.技术的故事,同时我们关注开发者的工作日常,也讨论开发者的生活日常:我们聚 ...
- 洛谷2543AHOI2005]航线规划 (树剖+线段树+割边思路)
这个题的思路还是比较巧妙的. 首先,我们发现操作只有删除和询问两种,而删除并不好维护连通性和割边之类的信息. 所以我们不妨像WC2006水管局长那样,将询问离线,然后把操作转化成加边和询问. 然后,我 ...