Java连接数据库DBHelper增删改查[多条数据]
来源:互联网 发布:windows c盘清理 编辑:程序博客网 时间:2024/05/20 08:42
补充!忘记写思路了。。。
思路
1. 使用Class.forName()加载驱动
2. 驱动管理指定数据库并连接 Connection conn = DriverManager.getConnection()
3. 连接后,使用连接获取预处理(处理sql语句) PreparedStatement pst = conn.preparedStatement(“sql语句”)
4. 使用预处理执行相应操作得到一个结果集 ResultSet rs = pst.executeQuery();
5. 获取元数据即数据库中一部分数据 ResultSetMetaData rsd = rs.getMetaData();
6. rsd中则包含数据库信息一定要要判断rsd.next() 是否有值,才能进一步操作
7. 根据数据库字段名获取数据库中相应的值 rs.getObject(“字段名”); 8.最后关闭连接,预处理,结果集
上午一大早被吵醒…干脆起来写代码,于是就有了这个DBHelper工具类,算是复习复习。
在实际开发过程中没有数据库基本是不能活呀!改工具类写了较详细的注释。
都是根据自己的理解写的,如果不对之处欢迎提出!不胜感激。
文件包括:
- jar包 oracle和mysql
- 一下描述到的类和配置文件
文件结构图
此类支持以下功能
- 增加
- 删除
- 修改
- 查询结果只有单条数据
- 查询结果有多条数据
- 多条语句查询
MyDbHelper类
package com.wy.mydb;import java.io.IOException;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 com.wy.properties.MyProperties;public class MyDbHelper { private Connection conn = null; private PreparedStatement ps = null; private ResultSet rs = null; //加载驱动 static { try { //方式一 固定写死 不方便更改数据库操作// Class.forName("com.mysql.jdbc.Driver"); //Oracle驱动为: oracle.jdbc.driver.OracleDriver //方式二 读取配置文件操作 如果需要更换数据库只需要修改配置文件即可 推荐 try { Class.forName(MyProperties.getInstance().getProperty("driverName")); } catch (IOException e) { e.printStackTrace(); } } catch (ClassNotFoundException e) { e.printStackTrace(); } } //驱动管理连接指定数据库 获取连接对象 public Connection getConnection() { try { //方式一 固定写死 不方便更改数据库操作 //驱动管理指定数据库并连接 参数说明 端口信息 数据库账户 密码// conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "a"); //方式二 读取配置文件操作 如果需要更换数据库只需要修改配置文件即可 推荐 try { conn = DriverManager.getConnection(MyProperties.getInstance().getProperty("url"),MyProperties.getInstance()); } catch (IOException e) { e.printStackTrace(); } } catch (SQLException e) { e.printStackTrace(); } return conn; } //关闭所有对象 连接 预处理 结果集 public void closeAll(Connection conn,PreparedStatement ps,ResultSet rs) { if(conn!=null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if(ps!=null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } if(rs!=null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } } /**单条语句的增删改 说明:在执行成功后函数返回的结果为非零整数 * @param sql 需要执行的sql语句 * @param params 执行sql语句的参数 * @return */ public int doUpdate(String sql,List<Object> params) { int result = 0; //获取连接 conn = getConnection(); //预处理 try { ps = conn.prepareStatement(sql); //设置参数得到结果集 this.setParams(ps,params); //预处理执行得到结果反馈 result = ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally { //关闭所有对象 this.closeAll(conn, ps, rs); } return result; } /** * 多条语句的增删改 说明:这些语句要么同时成功,要么都失败 * @param sqls 多条sql语句 * @param params 执行参数 * @return */ public int doUpdate(List<String> sqls,List<Object> params) { int result = 0; //获取连接 conn = getConnection(); try { //多条语句的执行涉及到事务 设置事务提交方式为手动 conn.setAutoCommit(false); //判断sql语句集合 if(sqls!=null&&sqls.size()>0) { //循环每一条语句执行 for(int i=0;i<sqls.size();i++) { ps = conn.prepareStatement( sqls.get(i) ); //设置参数 ps.setObject(i+1, params.get(i)); //执行并反馈 result = ps.executeUpdate(); } } //手动提交数据 conn.commit(); } catch (SQLException e) { //出现错误则回滚数据 try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } finally { //回复事务自动提交 try { conn.setAutoCommit(true); } catch (SQLException e) { e.printStackTrace(); } //关闭所有对象 this.closeAll(conn, ps, rs); } return result; } /** * 设置预处理的参数 * @param ps 预处理 * @param params 参数集合 * @throws SQLException */ public void setParams(PreparedStatement ps,List<Object> params) throws SQLException { if(params!=null&¶ms.size()>0) { for(int i=0;i<params.size();i++) { ps.setObject(i+1, params.get(i)); } } } /** * 查询sql语句单条结果 * @param sql 查询的sql语句 * @param params执行sql所需参数 * @return */ public Map<String,Object> findSingleObject(String sql,List<Object> params){ Map<String,Object> map = new HashMap<String,Object>(); //获取连接 conn = getConnection(); //预处理 try { ps = conn.prepareStatement(sql); //设置参数 this.setParams(ps, params); //执行查询得到结果集 rs = ps.executeQuery(); //获取数据库该表所有字段名 List<String> names = getAllColumnName(rs); if(rs.next()) { //循环names for(String name:names) { map.put(name, rs.getObject(name) ); } } } catch (SQLException e) { e.printStackTrace(); } finally { //关闭对象 this.closeAll(conn, ps, rs); } return map; } /** * 查询sql语句多条结果 * @param sql * @param params * @return */ public List<Map<String,Object>> findMulitObject(String sql,List<Object> params){ List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); //连接 conn = this.getConnection(); //预处理 try { ps = conn.prepareStatement(sql); //设置参数 this.setParams(ps, params); //执行查询得到结果集 rs = ps.executeQuery(); //获取所有列名 List<String> names = this.getAllColumnName(rs); while(rs.next()) { //注意这里不能用if 因为使用if的话只能执行一次 最后得到的结果就成了查一条数据 Map<String, Object> map = new HashMap<String,Object>(); //循环迭代 for(String name:names) { map.put(name, rs.getObject(name)); } list.add( map ); } } catch (SQLException e) { e.printStackTrace(); } return list; } /** * 根据结果集获取数据库中的所有列表名 * @param rs * @return */ private List<String> getAllColumnName(ResultSet rs) { List<String> names = new ArrayList<String>(); try { ResultSetMetaData rsmd = rs.getMetaData(); for(int i=0;i<rsmd.getColumnCount();i++) { names.add( rsmd.getColumnName(i+1) ); } } catch (SQLException e) { e.printStackTrace(); } return names; }}
MyProperties类 说明:用于读取配置文件db.properties
package com.wy.properties;import java.io.IOException;import java.io.InputStream;import java.util.Properties;/** * 整个类只需要创建一个对象 * 设计成单例模式 */public class MyProperties extends Properties{ private static MyProperties myProperties; private MyProperties() throws IOException{ InputStream in = MyProperties.class.getClassLoader().getResourceAsStream("db.properties"); try { this.load(in); } catch (IOException e) { e.printStackTrace(); throw e; } } public static MyProperties getInstance() throws IOException{ if(null==myProperties){ myProperties = new MyProperties(); } return myProperties; }}
db.properties 说明:输入自己的数据库链接密码 注意 所有输入后面不能有空格! 那句英文我感觉有错误…写英文的原因是,中文会被处理
#oracle#driverName=oracle.jdbc.driver.OracleDriver#url=jdbc:oracle:thin:@localhost:1521:orcl#user=scott#password= please input your database password#mysql #please input your database passworddriverName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/testuser=rootpassword= please input your database password
数据库文件
create table student( sid int primary key auto_increment, sname varchar(10))insert into student(sname) values('马小跳')insert into student(sname) values('淘气包')select * from student where sid = 2delete from student where sid = 3
完整文件请移步网盘下载http://pan.baidu.com/s/1o7EshNs pw2t
阅读全文
0 0
- Java连接数据库DBHelper增删改查[多条数据]
- java连接数据库的增删改查
- java连接数据库增删查改
- java连接数据库,进行增删改查
- Java连接数据库--增删改查
- php 连接数据库 增删改查数据操作
- java数据库 增删改查
- java连接mysql数据库增删改查操作记录
- java连接MySql数据库和增删改查代码
- Java连接本地MySQL数据库进行增删改查操作
- java连接mysql数据库增删改查操作记录
- java连接mysql数据库增删改查操作记录
- java连接mysql数据库增删改查操作记录
- Java使用JDBC连接MySQL数据库,实现增删改查
- java连接mysql数据库增删改查操作记录
- Java WEB之JDBC连接数据库的增删改查
- java通过JDBC连接数据库及增删改查操作
- java连接mysql数据库增删改查操作记录
- Gym 100553F-Filter
- linux下reids安装
- [HDU]4035 Maze 期望公式推导
- HTML轮播记住一定要导入两个包
- 自定义view自定义一个带箭头的圆形详解 加速 减速 变颜色
- Java连接数据库DBHelper增删改查[多条数据]
- java String stringbuilder stringbuffer
- qbxt国庆水题记day2
- 周末训练笔记(10.8)—hdu3016+poj2886
- 《个人理财》
- Android开发艺术探索__android动画深入分析(七)
- 当鼠标悬停在时,改变字体,旋转,
- 电脑网线水晶头接法图解
- 盒子模型