数据库-MySQL-JDBC框架
POJO类
POJO(Plain Ordinary Java Object)即普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO。
/* POJO类,与数据库表中的字段一一对应 * 1 类名与表名一致* 2 属性与表字段一致* - 属性的名称与表字段名相同* - 属性的类型与表字段属性一致,且使用包装类型,如 Long, Integer等* 3 生成 Getter/Setter方法*/
public class Student
{public Integer id; public String name;public Boolean sex;public String phone;public Date birthday;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Boolean getSex() {return sex;}public void setSex(Boolean sex) {this.sex = sex;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}}
自动查询记录
public List query(String sql, Class clazz) throws Exception{// 查询ResultSet rs = executeQuery(sql);// 取得MetaDataResultSetMetaData rsmd = rs.getMetaData();AfSqlMeta[] metaArray = AfSqlMeta.read(rsmd);// 构造一个List返回int numColumn = metaArray.length;List result = new ArrayList();while(rs.next()){// 将每行数据转为一个POJO对象Object pojo = clazz.newInstance(); result.add(pojo);// 通过setter设置pojo的各个属性for(int i=0; i<numColumn; i++){AfSqlMeta meta = metaArray[i]; // 该列的Meta数据String value = rs.getString(i+1); // 该列的值// 根据类型提示,转成Integer, String, Boolean, Date等基本类型Object typedValue = AfSqlReflect.typedValue(ctx, meta.type, value);// 将列值设置给POJO的属性try {AfSqlReflect.setPojo(pojo, meta.label, typedValue);}catch(Exception e){// e.printStackTrace();System.out.println("** 错误: " + e.getMessage());} } }return result;}
自动插入记录
public void insert(Object pojo) throws Exception{// 解析类的信息Class clazz = pojo.getClass();AfSqlPojo po = AfSqlPojo.from(clazz);if(po.tableName == null)throw new Exception("类 " + clazz.getName() + "中缺少AFTABLE注解! 无法自动插入!");// 准备创建SQL语句AfSqlInsert insertSQL = new AfSqlInsert(po.tableName); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 根据映射关系,类的属性名 <-> 列名,拼凑SQL语句for(AfSqlColumn c : po.columns) {String fieldName = c.name; // 列名 Method getter = po.findGetter(fieldName);try {Object value = getter.invoke(pojo); // 每一列的值if(value != null){if(value instanceof Boolean) {Boolean v = (Boolean)value;value = v ? "1" : "0";}else if(value instanceof Date){Date v = (Date) value; value = sdf.format(v);} insertSQL.add(fieldName, value.toString());}}catch(Exception e){ }}// 执行INSERT语句String sql = insertSQL.toString();System.out.println("** INSERT SQL:" + sql);Statement stmt = conn.createStatement(); if(po.generatedKey == null){// 无自增IDstmt.execute(sql);}else{// 自增主键ID处理// 1 如果用户在插入时已经自己指定了一个值,则MySQL会使用这个值,并返回这个值// 2 如果用户在插入时未定自增主键的值,则MySQL会生成一个自增的值,并返回stmt.execute(sql,Statement.RETURN_GENERATED_KEYS);ResultSet keys = stmt.getGeneratedKeys(); if(keys.next()){// 取回自增的IDString id = keys.getString(1);try {Method setter = AfSqlReflect.findSetter(clazz, po.generatedKey);AfSqlReflect.setPojo(pojo, setter, id);}catch(Exception e){ }}}}
数据库-MySQL-JDBC框架相关推荐
- 使用Spring JDBC框架连接并操作数据库
在前一篇博文JAVA通过JDBC连接并操作MySQL数据库中,我们知道如何通过JDBC连接并操作数据库,但是请看程序,整个程序连接数据库和关闭数据库占了很大一部分代码量,而且每次我们执行一下数据库操作 ...
- c mysql封装 jdbc_利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现
最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)...
最近看老罗的视频,跟着完成了利用Java操作MySQL数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...
- mysql封装 javabean,利用Java针对MySql封装的jdbc框架类JdbcUtils完整实现(包含增删改查、JavaBean反射原理,附源码)...
最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...
- java mysql jdbc 封装_利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包括增删改查、JavaBean反射原理,附源代码)...
近期看老罗的视频,跟着完毕了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完毕对数据库的增删改查.当中查询这块,包含普通的查询和利用反射完毕的查询,主要包含以下几个函数接口 ...
- Java数据库持久层框架基础:jdbc原理和使用综述
Java数据库持久层框架基础:jdbc原理和使用综述 前言 jdbc基础架构 jbdc的使用 jdbc的主要接口 驱动 连接 连接池 会话Statement 结果集ResultSet 前言 目前jav ...
- Java数据库开发与应用之MySQL数据库、JDBC操作数据库、C3P0数据库连接池,Java反射等
MySQL数据库,JDBC接口,MyBatis框架等,掌握的数据的存放和管理. Java数据库开发基础,介绍MySQL数据库.JDBC操作数据库.C3P0数据库连接池,Java反射等内容,进行油画商城 ...
- com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 数据库报错
-- 查询mysql 数据库链接空闲时间持有最大空闲时间,单位为秒 SHOW VARIABLES WHERE VAriable_name = 'interactive_timeout'; -- 会出现 ...
- android连接Mysql数据库之JDBC方式
一.创建一个数据库和若干表,并导入相关信息.这里以我之前使用的一个图书系统的数据库为例子. 首先假设已经安装并配置好Mysql.(建议大家安装WAMP,也就是安装完这个,就相当于安装了Mysql,PH ...
- jdbc链接数据库mysql
package cn.itcast.demo2;import java.sql.Connection; import java.sql.DriverManager; import java.sql.R ...
最新文章
- C语言中用函数实现录入信息模块,C语言程序设计用函数实现模块化程序设计(73页)-原创力文档...
- sonar 质量配置 操作(质量规则)
- linux基础 linhaifeng,Linux基础之命令练习Day2(示例代码)
- Java File类void deleteOnExit()方法(带示例)
- [转贴]使用jQuery自动缩图片 - [jQuery]
- 拆解前苏联产荧光数码管计算器,内部电路结构彪悍!
- MySQL集群Cluster详解(一)——基本原理
- python中jieba库的作用_Python jieba库用法及实例解析
- 阿里中台搞了3年,凉了?网传:副总裁玄难“背锅”,辞职创业!咸鱼放弃维护 Flutter!...
- 因果分析:原理、方法论、应用
- HTML基础-综合案例1-学生信息表
- 使用命令行——查看笔记本电池损耗程度
- LinkedIn前副总裁Brian Frank:三十亿美金销售缔造者的领导力思考
- java定义类模板_定义模板——函数模板和类模板
- BLDC-坐标变换(Clark,Park,反Park)
- 阿里云ECS部署Nginx配置域名访问
- android禁止输入字符,Android输入框禁止输入表情符号、特殊字符
- 会声会影实操项目流程
- jiffies HZ 秒的区别与联系
- 2020年全国高校计算机能力挑战赛C++初赛程序设计题2:九键拼音中数字与英文字母成对应关系:2--abc, 3-def, 4-ghi, 5--jkl, 6--mno, 7--pqrs, 8--tuv