java_第一年_JDBC(6)
时间:2019-10-22
本文章向大家介绍java_第一年_JDBC(6),主要包括java_第一年_JDBC(6)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
DataBaseMetaData对象:由Connection.getDataBaseMetaData()方法获得,可以用来获取数据库的元数据,提供的方法有:
- getURL():返回一个String类,代表数据库的URL,例:jdbc:mysql://localhost:3306/dataname;
- getUserName:返回连接数据库管理系统的用户名,例:root@localhost;
- getDatabaseProductName():返回数据库的产品名,例:MYSQL
- getDatabaseProductVersion():返回数据库的版本号,例:5.1.44-community;
- getDriverName():返回驱动程序名;例:MySQL-AB JDBC Driver;
- getDriverVersion():返回驱动程序的版本号;例:mysql-connector-java-5.0.8;
- isReadOnly():返回布尔值,表示是否只允许读;
ParametrMetaData对象:由PrepareStatement.getParameterMetaData()方法获得,可以用来获取PreparedStatement对象的元数据,常用的方法有:
- getParameterCount():获得指定参数的个数;
- getParameterType(int):获取指定参数的sql类型;
String sql = "select * from user where name = ? and password = ?"; PreparedStatement st = conn.PrepareStatement(sql); ParameterMetaData pm = st.getParameterMetaData(); pm.getParameterCount(); pm.getParameterType(1);
ResultSetMetaData对象:由ResultSet.getMetaData()方法获得,用来获取ResultSet对象的元数据,常用的方法:
- getColumnCount():返回resultset对象的列数;
- getColumnName(int column):获得指定的列名;
- getColumnTypeName(int column):获得指定列的类型;
开发一个jdbcUtils工具类:
package lzj.learn; import java.io.InputStream; import java.sql.*; import java.util.Properties; public class JdbcUtils{ private static String driver = null; private static String url = null; private staric String username = null; private static String password = null; //读取db.properties文件,对参数都赋予值; static{ try{ InputStream in = Jdbc.Utils.class.getClassLoader().getResourseAsStream("db.properties"); Porperties prop = new Properties(); prop.load(in); driver = prop.getProperty("driver"); url = prop.getProperty("url"); username = prop.getProperty("username"); password = prop.getProperty("password"); Class.forName(driver); }catch(Exception e) { throw new ExceptionInInitializeError(e); } } //连接数据库,获取连接对象 public static Connection getConnection() throws SQLException{ return DriverManafer.getConnection(url,username,password); } //释放资源 public static void release(Connection conn,Statement st,ResultSet rs) { if(rs!=null){ try{ rs.close(); }catch (Exception e) { e.printStackTrace(); } rs = null; } if(st!=null){ try{ st.close(); }catch (Exception e){ e.printStackTrace(); } } if(conn!=null){ try{ conn.close(); }catch{ e.printStackTrace(); } } } //更新数据库;sql参数:要执行的SQL语句;params[]:执行时使用的参数 public static void update (String sql , Object params[]) throws SQLException{ Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try{ conn = getConnection(); st = conn.prepareStatement(sql); for(int = 0 ;i<params.length;i++){ st.setObject(i+1,params[i]); } st.executeUpdate(); }finally{ release(conn,st,rs); } } //查询数据库,与更新数据库不同的是,查询数据库多提供了一个处理结果集的处理器 public static Object query(String sql ,Object params[],ResultSetHandler rsh) throws SQLException{ Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try{ conn = getConnection(); st = conn.prepareStatement(sql); for(int i = 0;i<params.length;i++){ st.setObject(i+1,params[i]); } rs = st.executeQuery(); return rsh.handler(rs);//将查询的结果集交给ResultSetHandler类,再通过定义ResultSetHandler类,实现handler方法即可实现对结果集的操作; }finally{ release(conn,st,rs); } } }
对处理器接口ResultSetHandler定义可如下:
package lzj.learn; import java.sql.ResultSet; //结果集处理接口 public interface ResultSetHandler{ public Object handler (ResultSet rs);//通过实现handler方法实现对结果集的操作 }
有了上述的框架后,就可以针对单个实体对象进行CRUD了;
packagec lzj.learn; import java.sql.SQLException; import java.util.List; import me.gacl.domain.Account; import me.gacl.util.BeanHandler; import me.gacl.util.BeanListHandler; import me.gacl.util.JdbcUtils; public class AccountDao { public void add(Account account) throws SQLException{ String sql = "insert into account(name,money) values(?,?)"; Object params[] = {account.getName(),account.getMoney()}; JdbcUtils.update(sql, params); } public void delete(int id) throws SQLException{ String sql = "delete from account where id=?"; Object params[] = {id}; JdbcUtils.update(sql, params); } public void update(Account account) throws SQLException{ String sql = "update account set name=?,money=? where id=?"; Object params[] = {account.getName(),account.getMoney(),account.getId()}; JdbcUtils.update(sql, params); } public Account find(int id) throws SQLException{ String sql = "select * from account where id=?"; Object params[] = {id}; return (Account) JdbcUtils.query(sql, params, new BeanHandler(Account.class)); } public List<Account> getAll() throws SQLException{ String sql = "select * from account"; Object params[] = {}; return (List<Account>) JdbcUtils.query(sql, params,new BeanListHandler(Account.class)); } }
原文地址:https://www.cnblogs.com/lzj-learn/p/11719355.html
- Java遍历Map对象的四种方式
- java 线程public void run()中值如何返回
- Jackson与spring框架整合的坑
- spring shiro整合时自动注入的问题
- mybatis获取update的id
- 点击!AWD攻防解题技巧在此!
- Docker 基础技术之 Linux namespace 详解
- Centos6下使用yum安装MariaDB
- Linux下部署Samba服务环境的操作记录
- SCP和Rsync远程拷贝的几个技巧
- Linux服务器更换主板后,网卡识别失败的处理方法
- CTF| 吃个鸡,一起破流量分析题吧!
- centos7下安装php+memcached简单记录
- 针对Nginx日志的相关运维操作记录
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 项目中的全局缓存导致了内存泄露?
- 架构设计 | 分布式体系下,服务分层监控策略
- Hadoop框架:单服务下伪分布式集群搭建
- 架构设计 | 基于Seata中间件,微服务模式下事务管理
- 编程体系结构(03):Java集合容器
- SpringBoot2 集成日志,复杂业务下的自定义实现
- 事件统计 | performance_schema全方位介绍
- 如何理解直播APP源码开发中的音视频同步
- 在GitHub上发布一个Python项目需要注意哪些
- CS学习笔记 | 21、反向转发通道的建立
- CS学习笔记 | 22、通过SSH开通通道
- 一文搞懂 java -jar 发生了什么
- 树莓派4裸机基础教程:环境搭建
- Oh! Binlog还能这样用之Canal篇
- docker安装elasticsearch和head插件