JDBC操作MySQL数据
对原始jdbc进行封装
package com.utils; 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.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties; /**
* DButil.java
* @author zl
* @version 1.0
* 功能介绍:使用jdbc对数据库操作(查询、更新(插入/修改/删除)、批量更新)
*/
public class DButil { private Connection conn = null; //jdbc的链接
private PreparedStatement ps = null; //准备sql /**
* 无参构造方法
*/
public DButil(){} /*
* @param 无
* 功能介绍:加载驱动,连接数据库。
*/
public Connection getConnection(){
//准备好jdbc文件承载的类
Properties properties = new Properties();
try {
//装载jdbc文件到承载类
properties.load(DButil.class.getResourceAsStream("jdbc.properties"));
//取承载类的属性
String driverClassName = properties.getProperty("driverClassName"); //mysql的驱动
String url = properties.getProperty("url"); //数据库的url
String username = properties.getProperty("username"); //数据库的用户名
String pwd = properties.getProperty("pwd"); //数据库当前用户的密码
Class.forName(driverClassName);
conn = DriverManager.getConnection(url,username,pwd); //获取conn链接
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /*
* @param sql,params
* 功能介绍:更新操作(修改,删除,插入)
*/
public int executeUpdate(String sql,Object[] params){ try {
ps = conn.prepareStatement(sql);
if(params.length != 0){
for(int i=0; i<params.length; i++){
ps.setObject(i+1, params[i]);
}
}
int rows = ps.executeUpdate();
return rows;
} catch (Exception e) {
e.printStackTrace();
}finally{
closeUpdate();
}
return 0;
} /*
* @param:
* 功能介绍:批量更新
*/
public void batchUpdate(String sql,List<Object[]> list){ try {
ps = conn.prepareStatement(sql);
conn.setAutoCommit(false); //关闭mysql自动提交事务
//final int batchSize = 1000; //防止内存溢出
//int count = 0; //记录插入数量
int size = list.size();
Object[] obj = null;
for (int i = 0; i < size; i++) {
obj = list.get(i);
for (int j = 0; j < obj.length; j++) {
ps.setObject(j + 1, obj[j]);
}
ps.addBatch();
/*if(++count % batchSize == 0) {
ps.executeBatch();
//conn.commit();
}*/
}
ps.executeBatch();
conn.commit();
conn.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
try {
conn.rollback();
conn.setAutoCommit(true);
} catch (SQLException e1) {
e1.printStackTrace();
}
} finally {
closeUpdate(); //关闭资源
}
} /*
* @param sql,params
* 功能介绍:查询操作
*/
public List<Map<String,String>> executeQuery(String sql,Object[] params){ ResultSet rs = null;
List<Map<String,String>> list = null;
try {
ps = conn.prepareStatement(sql);
if(params != null){
for(int i=0; i<params.length; i++){
ps.setObject(i+1,params[i]);
}
}
rs = ps.executeQuery();
list = new ArrayList<Map<String,String>>();
while(rs.next()){ //移动光标,如果新的当前行有效,则返回 true;如果不存在下一行,则返回 false
ResultSetMetaData rsmd = rs.getMetaData();
Map<String,String> map = new HashMap<String, String>();
for(int i=1; i<=rsmd.getColumnCount(); i++){
map.put(rsmd.getColumnName(i),rs.getObject(i).toString());
}
list.add(map);
}
return list; } catch (Exception e) {
e.printStackTrace();
}finally{
closeQuery(rs);
}
return null;
} /*
* @param 无
* 功能介绍:关闭更新资源
*/
public void closeUpdate(){
try{
if(ps!=null){
ps.close();
} if(conn!=null){
conn.close();
}
}catch(SQLException e){
e.printStackTrace();
}
} /*
* @param rs
* 功能介绍:关闭查询资源
*/
public void closeQuery(ResultSet rs){
try {
if(rs!=null){
rs.close();
} if(ps!=null){
ps.close();
} if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
} /*
* @param: args
* 功能介绍:测试jdbc
*/
/*public static void main(String[] args) { DButil db = new DButil();
db.getConnection();
// String sql = "select * from cpu2006 where id=?";
// Object[] params = new Object[1];
// params[0] = 1;
// List<Map<String,String>> list = new ArrayList<Map<String,String>>();
// list = db.executeQuery(sql, params);
// System.out.println(list.toString());
String sql2 = "insert into cpu2006(hardware_vendor,cores,chips,cores_per_chip,base_copies,result,baseline,publish,sys)values(?,?,?,?,?,?,?,?,?)";
List<Object[]> inList = new ArrayList<Object[]>(); //需要新增的数据
Object[] cpu = new Object[]{"1","1","1","1","1","1","1","1","1"};
inList.add(cpu);
db.batchUpdate(sql2, inList);
}*/ }
附上
jdbc.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/testMysql?useUnicode=true&characterEncoding=utf-8
username=root
pwd=root
JDBC操作MySQL数据的更多相关文章
- java数据库 JDBC操作MySQL数据库常用API 部门表和员工表 创建表 添加数据 查询数据
package com.swift.department; import java.sql.Connection; import java.sql.PreparedStatement; import ...
- Java使用Jdbc操作MySql数据库(一)
这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...
- 在spark中操作mysql数据 ---- spark学习之七
使用spark的 DataFrame 来操作mysql数据. DataFrame是比RDD更高一个级别的抽象,可以应用SQL语句进行操作,详细参考: https://spark.apache.org/ ...
- jdbc操作mysql
本文讲述2点: 一. jdbc 操作 MySQL .(封装一个JdbcUtils.java类,实现数据库表的增删改查) 1. 建立数据库连接 Class.forName(DRIVER); connec ...
- [自动化专题]JDBC操作mysql时遇到的拦路虎
在挫折中成长,在错误中学习.聊聊我们在Selenium自动化中使用JDBC操作mysql数据库中遇到的那些拦路虎: 错误一:Can not issue data manipulation statem ...
- JDBC操作MySQL(crud)
这两天复习了一下JDBC操作MySQL,把crud操作的例子记一下, 类库链接(mysql-connector-java-5.1.37-bin.jar):http://files.cnblogs.co ...
- ScalikeJDBC,操作mysql数据,API
ScalikeJDBC,操作mysql数据,API 一.构建maven项目,添加pom.xml依赖 二.resource文件下创建application.conf文件,并配置以下内容 三.操作mysq ...
- jdbc操作mysql(三):利用注解封装
案例五:利用注解封装 重复步骤 我们使用jdbc操作mysql时发现,操作不同表中数据,所写的方法基本相同:比如我们根据id向用户表添加数据,根据id删除商品表的数据,或者查询所有数据并用list集合 ...
- JDBC操作MySQL数据库案例
JDBC操作MySQL数据库案例 import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared ...
随机推荐
- Redis Cluster(集群)
一.概述 在前面的文章中介绍过了redis的主从和哨兵两种集群方案,redis从3.0版本开始引入了redis-cluster(集群).从主从-哨兵-集群可以看到redis的不断完善:主从复制是最简单 ...
- 解决微信小程序video属性controls失效问题
<view class="VideoBox"> <video class='myVideo' id="myVideo01" src=" ...
- [Swift]LeetCode684. 冗余连接 | Redundant Connection
In this problem, a tree is an undirected graph that is connected and has no cycles. The given input ...
- 【Spark篇】---Spark初始
一.前述 Spark是基于内存的计算框架,性能要优于Mapreduce,可以实现hadoop生态圈中的多个组件,是一个非常优秀的大数据框架,是Apache的顶级项目.One stack rule ...
- 「造个轮子」——cicada(轻量级 WEB 框架)
前言 俗话说 「不要重复造轮子」,关于是否有必要不再本次讨论范围. 创建这个项目的主要目的还是提升自己,看看和知名类开源项目的差距以及学习优秀的开源方式. 好了,现在着重来谈谈 cicada 这个项目 ...
- 『Tarjan算法 有向图的强连通分量』
有向图的强连通分量 定义:在有向图\(G\)中,如果两个顶点\(v_i,v_j\)间\((v_i>v_j)\)有一条从\(v_i\)到\(v_j\)的有向路径,同时还有一条从\(v_j\)到\( ...
- Docker实用技巧之更改软件包源提升构建速度
一.开篇 地球,中国,成都市,某小区的阳台上,一青年负手而立,闭目沉思,阵阵的凉风吹得他衣衫呼呼的飘.忽然,他抬起头,刹那间,睁开了双眼,好似一到精光射向星空,只见这夜空......一颗星星都没有.他 ...
- 2018OKR年中回顾
一.2018OKR规划 目标1.温习专业基础知识 关键结果1.1 阅读<微积分之屠龙宝刀>+<微积分之倚天宝剑>,加深理解高等数学微积分的各种概念与公式(0.2 屠龙宝刀看了三 ...
- 从锅炉工到AI专家(2)
大数据 上一节说到,大多的AI问题,会有很多个变量,这里深入的解释一下这个问题. 比如说某个网站要做用户行为分析,从而指导网站建设的改进.通常而言如果没有行为分析,并不需要采集用户太多的数据. 比如用 ...
- CardView卡片式布局
CardView适用于实现卡片式布局效果的重要控件,由appcompat-v7库提供,实际上CardView也是一个FrameLayout,只是额外提供了圆角和阴影效果,看上去有立体的感觉.一般Car ...