JDBC工具类 访问数据库 增删改查CRUD的通用方法
1 package com.zmh.util;
2
3 import java.sql.*;
4 import java.util.ArrayList;
5 import java.util.HashMap;
6 import java.util.List;
7 import java.util.Map;
8 /**
9 * JDBC工具类
10 */
11 public class Util1 {
12 //加载驱动
13 static {
14 try {
15 Class.forName("com.mysql.jdbc.Driver");
16 } catch (ClassNotFoundException e) {
17 e.printStackTrace();
18 }
19 }
20 //获得连接
21 public static Connection getConnection(){
22 try {
23 DriverManager.getConnection("jdbc:mysql://localhost:3306/qy97?characterEnconding=utf-8","root","root");
24 } catch (SQLException e) {
25 e.printStackTrace();
26 }
27 return null;
28 }
29 /** 增删改的通用方法
30 * @param String sql 要执行的sql
31 * @param Object[] obj 对象类型的数组 里面存放着 sql执行的占位符参数
32 * 【name,age,id】
33 * 【id】
34 * 【name,age】
35 * Object... 可变参数
36 * */
37 public static boolean executeUpdate(String sql,Object... args){
38 Connection conn = null;
39 PreparedStatement ps = null;
40 try {
41 conn = getConnection();
42 ps = conn.prepareStatement(sql);
43 //有参数
44 for(int i=0;i<args.length;i++){
45 ps.setObject(i+1,args[i]);
46 }
47 //执行sql语句
48 int i = ps.executeUpdate();
49 //返回 true
50 return i>0;
51 } catch (SQLException e) {
52 e.printStackTrace();
53 }finally{
54 //关闭资源
55 close(conn,ps,null);
56 }
57 return false;
58 }
59 /**
60 * 查询的通用方法
61 * @param sql;
62 * @param args;
63 * @return
64 * */
65 public static List<Map<String,Object>> executeQuery(String sql,Object... args){
66 Connection conn = null;
67 PreparedStatement ps = null;
68 ResultSet rs = null;
69 try {
70 conn = getConnection();
71 ps = conn.prepareStatement(sql);
72 //有可能有参数
73 for(int i=0;i<args.length;i++){
74 ps.setObject(i+1,args[i]);
75 }
76 //执行sql语句
77 rs = ps.executeQuery();
78 //创建List集合
79 List<Map<String, Object>> list = new ArrayList<>();
80 //获取本次查询结果集有多少列
81 int count = rs.getMetaData().getColumnCount();
82 //while循环
83 while(rs.next()){
84 //创建Map集合 获取一个数据封装成一个Map集合
85 Map<String, Object> map = new HashMap<>();
86 //for循环 遍历所有的列
87 for(int i=0;i<count;i++){
88 //获取本次查询结果集的列名
89 String name = rs.getMetaData().getColumnLabel(i + 1);
90 map.put(name,rs.getObject(name));
91 }
92 //把所有的map集合添加到List集合中
93 list.add(map);
94 }
95 //返回值
96 return list;
97 } catch (SQLException e) {
98 e.printStackTrace();
99 }finally{
100 //关闭资源
101 close(conn,ps,rs);
102 }
103 return null;
104 }
105 /**
106 * 关闭资源的通用方法
107 * */
108 public static void close(Connection conn,Statement stat,ResultSet rs){
109 try{
110 if(rs!=null){
111 rs.close();
112 }
113 if(stat!=null){
114 stat.close();
115 }
116 if(conn!=null){
117 conn.close();
118 }
119 }catch(Exception e){
120 e.printStackTrace();
121 }
122 }
123 }
JDBC工具类 访问数据库 增删改查CRUD的通用方法的更多相关文章
- 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查
Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...
- 五 Django框架,models.py模块,数据库操作——表类容的增删改查
Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...
- NX二次开发-NX访问SqlServer数据库(增删改查)C#版
版本:NX9+VS2012+SqlServer2008r2 以前我写过一个NX访问MySQL数据库(增删改查)的文章https://www.cnblogs.com/nxopen2018/p/12297 ...
- (转)SQLite数据库增删改查操作
原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数 ...
- Android SQLite 数据库 增删改查操作
Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...
- Java连接MySQL数据库增删改查通用方法
版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...
- mybatis--实现数据库增删改查
首先,创建一个数据库my,并在数据库中插入一张表user,然后在user表中插入一行数据,代码如下: create database my; use my; create table user( id ...
- 2. MongoDB基本操作 —— 用Mongo.exe操作数据库增删改查
一.开篇 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(collection).文档对象 ...
- Android(java)学习笔记193:利用谷歌API对数据库增删改查(推荐使用)
接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1.首先项目图: 2.这里的布局文件activity_main.xml: <LinearLayout xmlns:android ...
随机推荐
- Python入门基本语法
Python入门 以下主要讲述Python的一些基础语法,包含行的缩进在python中的重要意义,python中常见的保留字和引号的使用,如何实现单行注释和多行注释. print("he ...
- python基础-面向对象的三大特征
继承 单继承 父类 基类 子类 派生类 继承:是面向对象软件技术当中的一个概念,如果一个类别A“继承自”另一个类别B,就把这个A称为“B的子类别”,而把B称为“A的父类别”也可以称“B是A的超类”. ...
- Solr 中的 docValues=true
前言: 在Lucene4.x之后,出现一个重大的特性,就是索引支持DocValues,这对于广大的solr和elasticsearch用户,无疑来说是一个福音,这玩意的出现通过牺牲一定的磁盘空间带来 ...
- HUD:4405-Aeroplane chess(期望飞行棋)
Aeroplane chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Pro ...
- 最长回文子串——manacher
最长回文子串--Manacher 算法 (原版的博主的代码都是用py写的,这里改成c++) c++ 算法 字符串处理 0. 问题定义 最长回文子串问题:给定一个字符串,求它的最长回文子串长度. 如果一 ...
- 笔记-python-实用-程序运算时间计算
方法1 import datetime starttime = datetime.datetime.now() #long running endtime = datetime.datetime.no ...
- HTTP认证之摘要认证——Digest(二)
导航 HTTP认证之基本认证--Basic(一) HTTP认证之基本认证--Basic(二) HTTP认证之摘要认证--Digest(一) HTTP认证之摘要认证--Digest(二) 在HTTP认证 ...
- matlab画图颜色设置
各种颜色属性选项选项意义选项意义'r' 红色 'm' 粉红'g' 绿色 'c' 青色'b' 兰色 'w' 白色'y' 黄色 'k' 黑色各种线型属性选项选项意义选项意义'-' 实线 '--' 虚线': ...
- virtual function c++
之前一直不明白为什么要用虚函数,我只知道这样的规则, Base b = new derived(); b->do(); 调用的是子类的do(): virtue class只是一个虚拟的,调用的是 ...
- 大数据学习——spark-steaming学习
官网http://spark.apache.org/docs/latest/streaming-programming-guide.html 1.1. 用Spark Streaming实现实时Wor ...