JAVA操作mysql(如何更加面向对象的操作数据库)
既然谈到面向对象,所以,先把连接信息给搞个对象出来:
public class DBInfo { private String driver; private String host; private String port; private String user; private String pwd; private String dataBase; public DBInfo(){
this.driver = "com.mysql.jdbc.Driver";
this.host = "";
this.port = "";
this.user = "";
this.pwd = "";
this.dataBase = "";
} public String getDriver() {
return driver;
} public void setDriver(String driver) {
this.driver = driver;
} public String getHost() {
return host;
} public void setHost(String host) {
this.host = host;
} public String getDataBase() {
return dataBase;
} public void setDataBase(String dataBase) {
this.dataBase = dataBase;
} public String getPort() {
return port;
} public void setPort(String port) {
this.port = port;
} public String getUser() {
return user;
} public void setUser(String user) {
this.user = user;
} public String getPwd() {
return pwd;
} public void setPwd(String pwd) {
this.pwd = pwd;
} }
既然是操作数据库,我们就把数据库的字段给对象化一下,也就是持久化:在定义变量时,我们搞个约定,比如,数据库字段名为:test_login_name,则定义变量时为:testLoginName.
public class UserInfo { private int id; private String testName; private String testAge; private String testHeight; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getTestName() {
return testName;
} public void setTestName(String testName) {
this.testName = testName;
} public String getTestAge() {
return testAge;
} public void setTestAge(String testAge) {
this.testAge = testAge;
} public String getTestHeight() {
return testHeight;
} public void setTestHeight(String testHeight) {
this.testHeight = testHeight;
} }
好,现在有了javabean,有了数据库连接的对象了,再加一个枚举来保存数据库与bean之间的映射关系:
public enum TableBean { USER_INFO("com.test.bean.UserInfo"); private String value; private TableBean(String value){
this.value = value;
} public String getValue(){
return value;
}
@Override
public String toString() {
return value;
} public static void main(String[] args){
System.out.println(TableBean.USER_INFO);
} }
再加一个保存ResultSetMetaData信息的类:
public class MetaData { public static Map<String, ResultSetMetaData> metaData = new HashMap<String, ResultSetMetaData>(); }
余下就是操作数据库了:
public class ConnectToMySQL { private DBInfo dbInfo; private Connection conn = null; private Statement stmt = null; public ConnectToMySQL(){
dbInfo = new DBInfo();
} public DBInfo getDbInfo() {
return dbInfo;
} public void setDbInfo(DBInfo dbInfo) {
this.dbInfo = dbInfo;
} public void connect() {
this.close();
this.connectMySQL();
} public synchronized void close() {
try {
if (stmt != null) {
stmt.close();
stmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
} private synchronized void connectMySQL() {
try {
Class.forName(dbInfo.getDriver()).newInstance();
conn = (Connection) DriverManager.getConnection("jdbc:mysql://"
+ dbInfo.getHost() + "/" + dbInfo.getDataBase() +"?useUnicode=true&characterEncoding=utf-8", dbInfo.getUser(),dbInfo.getPwd());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} } private void statement() {
if (conn == null) {
this.connectMySQL();
}
try {
stmt = (Statement) conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
} private ResultSet resultSet(String sql) {
ResultSet rs = null;
if (stmt == null) {
this.statement();
}
try {
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
} private void executeUpdate(String sql){
if (stmt == null) {
this.statement();
}
try {
stmt.executeUpdate(sql);
} catch (SQLException e) {
System.out.println(sql);
e.printStackTrace();
}
} public List<Object> query(String tableInfo, String sql) {
List<Object> list = new ArrayList<Object>();
ResultSet rs = this.resultSet(sql);
try {
ResultSetMetaData md = rs.getMetaData();
int cc = md.getColumnCount();
while (rs.next()) {
Object object = this.getBeanInfo(tableInfo);
for (int i = 1; i <= cc; i++) {
String cn = md.getColumnName(i);
this.reflectSetInfo(object, this.changeColumnToBean(cn,"set"), rs.getObject(cn));
}
list.add(object);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
} public void insert(String table, Object object){
String sql = "";
try {
this.getMetaData(table);
ResultSetMetaData md = MetaData.metaData.get(table);
int cc = md.getColumnCount();
String insertColumn = "";
String insertValue = "";
for (int i = 2; i <= cc; i++) {
String cn = md.getColumnName(i);
Object gValue = this.reflectGetInfo(object, this.changeColumnToBean(cn,"get"));
if(gValue.getClass().getSimpleName().equals("String")){
gValue = "\""+gValue+"\"";
}
if("".equals(insertColumn)){
insertColumn += cn;
insertValue += gValue;
}else{
insertColumn += ","+cn;
insertValue += ","+gValue;
}
}
sql = "insert into "+table+" ("+insertColumn+") values ("+insertValue+")";
this.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
} private void getMetaData(String table){
if(!MetaData.metaData.containsKey(table)){
ResultSet rs = this.resultSet("select * from "+table+" limit 0,1");
try {
MetaData.metaData.put(table, rs.getMetaData());
} catch (SQLException e) {
e.printStackTrace();
}
}
} private Object getBeanInfo(String tableInfo){
Object object = null;
try {
object = Class.forName(tableInfo).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return object;
} private void reflectSetInfo(Object object, String methodName, Object parameter){
try {
Class<? extends Object> ptype = parameter.getClass();
if(parameter.getClass().getSimpleName().equals("Integer")){
ptype = int.class;
}
Method method = object.getClass().getMethod(methodName, ptype);
method.invoke(object, parameter);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
} private Object reflectGetInfo(Object object, String methodName){
Object value = null;
try {
Method method = object.getClass().getMethod(methodName);
Object returnValue = method.invoke(object);
if(returnValue!=null){
value = returnValue.toString();
}else{
value = "";
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return value;
} private String columnToBean(String column){
if(column.contains("_")){
int index = column.indexOf("_");
String beanName = column.substring(0, index)
+column.substring(index+1, index+2).toUpperCase()
+column.substring(index+2, column.length());
return beanName;
}
return column;
} private String changeColumnToBean(String column, String ext){
String[] col = column.split("_");
for (int i = 0; i < col.length; i++) {
column = this.columnToBean(column);
}
column =column.replaceFirst(column.substring(0, 1), column.substring(0, 1).toUpperCase());
column = ext+column;
return column;
} public static void main(String[] args) throws SQLException {
ConnectToMySQL c = new ConnectToMySQL();
c.connect();
List<Object> list = c.query(TableBean.APK_INFO.toString(), "select * from user_info"); c.insert("user_info", (UserInfo)list.get(0));
c.close();
}
}
仔细看看吧,query出来就是对象的集合,insert时,就是表名与对象就行了,至于update与delete,大家自已扩展吧!
如果把这个摸清楚,spring操作mysql数据库的原理,你也就差不多了!
JAVA操作mysql(如何更加面向对象的操作数据库)的更多相关文章
- java连接mysql以及增删改查操作
java连接数据库的代码基本是固定的,步骤过程觉得繁琐些,代码记起来对我来说是闹挺.直接上代码: (温馨提醒:你的项目提前导入连接数据库的jar包才有的以下操作 ) class DBConnectio ...
- 简单的在jsp页面操作mysql
---恢复内容开始--- 上一篇讲了在DOS界面下操作mysql 现在我们来说说怎么在jsp页面中操作mysql 要用jsp页面操作mysql需要jdbc(不是非要jdbc,还有其他的) 下载地址:w ...
- 使用JDBC操作MySQL
使用JDBC操作MySQL 步骤 加载驱动 连接数据库 操作数据库(增删改查) 关闭结果集,操作,数据库 准备工作 java连接MySQL的jar包 加载数据库驱动 public class Load ...
- python3操作mysql教程
一.下载\安装\配置 1. python3 Python3下载网址:http://www.python.org/getit/ 当前最新版本是python3.2,下载地址是 http://www.pyt ...
- python操作mysql基础一
python操作mysql基础一 使用Python操作MySQL的一些基本方法 前奏 为了能操作数据库, 首先我们要有一个数据库, 所以要首先安装Mysql, 然后创建一个测试数据库python_te ...
- MySQL数据库4Python操作mysql、索引、慢查询日志
目录 一.Python 操作 mysql 1.1python 操作 mysql 1.2查询数据 1.3增加(添加.更新)数据 1.4修改数据 1.5删除数据 1.6SQL注入问题 1.6.1问题的引入 ...
- day06 python代码操作MySQL
day06 python代码操作MySQL 今日内容 python代码操作MySQL 基于python与MySQL实现用户注册登录 python操作MySQL python 胶水语言.调包侠(贬义词& ...
- JAVA对mysql的基本操作
一.了解几个概念(了解) 1.DriverManager 1)必须知道它是管理数据库的所有驱动程序 2)它的所有方法都是静态的,其中最重要的是getConnection()方法,我们可以通过它获取一个 ...
- java分享第十七天-03(封装操作mysql类)
JAVA操作mysql所需jar包:mysql-connector-java.jar代码: import java.sql.*; import java.util.ArrayList; import ...
随机推荐
- 怎样编写YARN应用程序
(注意:本文的分析基于Hadoop trunk上的"Revision 1452188"版本号,详细可參考:http://svn.apache.org/repos/asf/hadoo ...
- MVC4发布到IIS,出现HTTP 错误 404.0 - Not Found
web.config中添加 <system.webServer> <modules runAllManagedModulesForAllRequests="true&quo ...
- 使用jsp内置对象request获取表单提交中文内容乱码的解决办法
page1.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pag ...
- Python小任务 - 如何编写指定时间执行的Python小程序
我们在平时的工作中经常会遇到这样的需求,需要再某个时间点执行一段程序逻辑. 那么,在python中我们是怎么做的呢? 下面看代码: waitDesignatedTimeToRun.py import ...
- 使用Json.Net解决MVC中各种json操作
最近收集了几篇文章,用于替换MVC中各种json操作,微软mvc当然用自家的序列化,速度慢不说,还容易出问题,自定义性也太差,比如得特意解决循环引用的问题,比如datetime的序列化格式,比如性能. ...
- 跟我学AngularJS:全局变量设置之value vs constant vs rootscope vs 服务[转]
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文要讲讲Angular中value vs. constant以及全局变量的设置 本教程 ...
- 对Bootloader(引导加载程序)的几点理解
1.在加电复位之后,大多数处理器都会从一个默认的地址处获取代码.比如MIPS结构的CPU会从0xBFC00000处取第一条指令,而ARM结构的CPU则从地址0x00000000处取第一条指令.因此,在 ...
- Vue项目的npm环境搭建
Vue项目的环境搭建主要步骤如下: vue项目创建 安装NodeJS +到官网下载自己系统对应的版本,这里我们下载Windows系统的64位zip文件,下载完成后解压,可以看到里面有一个node.ex ...
- Eclipse Java注释模板设置详解以及版权声明
网上的Eclipse注释模板,在这里稍稍整理一些比较常用的. 编辑注释模板的方法:Window->Preference->Java->Code Style->Code Temp ...
- Aerospike系列:6:AerospikeTools & Utilities
1:Aerospike Query Language类似于SQL命令.可以用来管理索引和用户自定义函数,也可以测试大多数数据库的功能. [root@localhost ~]#aql OPTIONS - ...