JDK+JDBC+MySQL实例及注意事项
Hangzhou 29 Jun 2014
开发环境
1. MySQL数据库数据类型与JDK之间的特殊相应关系
MySQL | JDK |
tinyint(1) | boolean |
int unsigined | long |
datetime | java.sql.Timestamp |
varchar | String |
BOOLEAN非zero为真,zero为假。
2. 採用JDK的反射机制将JDBC ResultSet的自己主动载入到Bean类
/**
* Using reflection to storage the result from database into Bean class.
*
*/
public static List<Object> resultSetToList(ResultSet rs, Class<? > cls) {
Method[] methods = cls.getDeclaredMethods();
int methodLength = methods.length; int index;
Map<String, Integer> map = new HashMap<String, Integer>();
// record all methods name in a HashMap, for quickly locate.
for (index = 0; index < methodLength; index++) {
map.put(methods[index].getName().toLowerCase(), index);
} ResultSetMetaData meta = null;
Object obj = null;
List<Object> list = new ArrayList<Object>(); try {
meta = rs.getMetaData();
int colCount = meta.getColumnCount();
while (rs.next()) {
obj = cls.newInstance(); for (int i = 1; i <= colCount; i++) {
String colName = meta.getColumnName(i);
String setMethodName = "set" + colName;
// System.out.println(setMethodName);
int j = map.get(setMethodName.toLowerCase()); //get index of method array
setMethodName = methods[j].getName(); Object value = rs.getObject(colName);
if(value == null){
continue;
} try {
Method setMethod = obj.getClass().getMethod(setMethodName, value.getClass());
setMethod.invoke(obj, value);
} catch (Exception e) {
System.out.println(setMethodName + " exception");
e.printStackTrace();
} }
list.add(obj);
}
} catch (InstantiationException | IllegalAccessException | SQLException e) {
e.printStackTrace();
} return list;
}
3. 其它说明
4. 演示样例项目
4.1 数据库表设计
mysql> describe cake;
+--------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------------------+------+-----+---------+-------+
| name | varchar(20) | NO | PRI | NULL | |
| serialNumber | int(10) unsigned | YES | | NULL | |
| buildDate | datetime | YES | | NULL | |
| isSweet | tinyint(1) unsigned | YES | | NULL | |
+--------------+---------------------+------+-----+---------+-------+
mysql> select * from cake;
+--------+--------------+---------------------+---------+
| name | serialNumber | buildDate | isSweet |
+--------+--------------+---------------------+---------+
| Danisa | 2021344 | 2013-11-19 10:20:00 | 1 |
| Orion | 2004720 | 2014-06-29 22:00:00 | 0 |
+--------+--------------+---------------------+---------+
4.2 Bean类设计
private String name;
private long serialNumber;
private Timestamp buildDate;
private boolean isSweet;
2)Bean中特殊值类型变量的Setter的设计细节:
public void setSerialNumber(Long /*long*/ serialNumber) { //Type was java.lang.Long but not 'long'.
this. serialNumber = serialNumber;
}
public void /*setSweet*/setIsSweet( /*boolean*/Boolean isSweet) { // Type was java.lang.Boolean but not boolean
this. isSweet = isSweet;
}
JDK+JDBC+MySQL实例及注意事项的更多相关文章
- JDBC MySQL 实例之 用户管理系统
1 Java 和 MySQL 怎么建立连接 2 通过Java怎么对数据库进行操作 package day01; import java.sql.Connection; import java.sql. ...
- mac在 aliyun linux ecs实例上安装 jdk tomcat mysql
用了一个ftp 工具 把 gz rpm 等 传递到ecs 上 -- 用这个Transmit 用ssh远程登录,然后依次安装 jdk tomcat mysql 到 /usr/local/... 设置环 ...
- java 访问mysql 实例
前提条件: 1.安装eclipse,mysql.java jdk 2.安装mysql connect J (我安装的版本是mysql connect J 5.1.39) 3.配置java环境变量 4 ...
- Linux 安装JDK Tomcat MySQL(使用Mac远程访问)
阅读本文需要一定的Linux基础 一 环境 阿里云服务器: CentOS 7.4 64位(基于RedHat) 本机: macOS High Sierra 二 压缩包 JDK http://www.or ...
- linux 下 jdk+tomcat+mysql 的 jsp 环境搭建
JDK 在 linux 下安装 1. 把安装文件放在 /opt 下,并执行 [root@localhost opt]# ./jdk-1_5_0_06-linux-i586.bin 并 ...
- 使用Inno Setup 打包jdk、mysql、tomcat、webapp等为一个exe安装包(转)
之前一直都没涉及到打包安装方面的东西,都是另一个同事负责的,使用的工具(installshield)也比较高大上一点,可是后来他离职以后接受的同事也只能是在这个基础上做个简单的配置,然后打包,可是现在 ...
- 使用Inno Setup 打包jdk、mysql、tomcat、webapp等为一个exe安装包
之前一直都没涉及到打包安装方面的东西,都是另一个同事负责的,使用的工具(installshield)也比较高大上一点,可是后来他离职以后接受的同事也只能是在这个基础上做个简单的配置,然后打包,可是现在 ...
- no suitable driver found for jdbc:mysql//localhost:3306/..
出现这样的情况,一般有四种原因(网上查的): 一:连接URL格式出现了问题(Connection conn=DriverManager.getConnection("jdbc:mysql ...
- JDBC 程序实例小练习
JDBC 程序实例问题 编程实现如下功能:在数据库中建立一个表,表名为student,其结构为学号.姓名.性别.年龄.英语.JavaSE程序设计.初级日语.总分,在表中输入多条记录. 学生的总分信息, ...
随机推荐
- [Web Worker] Introduce to Web Worker
What is web worker for? OK, read it docs to get full details idea. Or just a quick intro to web work ...
- Chrome插件开发新手教程
近期在用百词斩这个站点来学单词,感觉非常不错,就是在回想单词列表的时候仅仅有单词和意思.却没有读音.感觉非常不方便,思来思去,想到了Chrome插件能够胜任这个工作.于是小小的研究了一下. Chrom ...
- MFC 与Excel文件的交互操作
假日快要结束了.带着沉重的心情写下之前关于MFC与Excel文件交互的总结. 因为VS的版本号不同可能在操作上有些差异.所以在此指明下本篇文章的project环境为VS2013,也建议大家用最新的. ...
- Unity5.1 新的网络引擎UNET(七) UNET 单人游戏转换为多人
单人游戏转换为多人 孙广东 2015.7.12 本文档描写叙述将单人游戏转换为使用新的网络系统的多人游戏的步骤.这里描写叙述的过程是简化,对于一个真正的游戏事实上须要更高级别版本号的实际 ...
- Python—JSON数据解析
1.安装pip pip是python的包管理工具,使用它能非常方便地安装和卸载各种python工具包 第一步:直接用浏览器访问地址:https://raw.github.com/pypa/pip/ma ...
- 手把手教你写带登录的NodeJS爬虫+数据展示
其实在早之前,就做过立马理财的销售额统计,只不过是用前端js写的,需要在首页的console调试面板里粘贴一段代码执行,点击这里.主要是通过定时爬取https://www.lmlc.com/s/web ...
- jquery应用实例1:手风琴特效
效果: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- visio中如何取消跨线和去掉页边距
比较来说,写论文visio和inkscape都不可缺少. 比如visio跨线的问题,已经遇到过两次忘记了.这次截个图作为记录.其实就是在“设计”一栏里,把连接线里面的跨线显示的对勾去掉即可. *** ...
- (转)Django学习之 第一章:Django介绍
Django: Python编程Web框架 如果你上djangoproject.com你会发现对Django的如下解释: “Django is a high-level Python Web fram ...
- 有关DevExpress 安装后vs工具箱不显示图标的错误
在https://www.devexpress.com/Support/Center/Question/Details/T214296/missing-icons-from-toolbox找到解决方法 ...