既然谈到面向对象,所以,先把连接信息给搞个对象出来:

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(如何更加面向对象的操作数据库)的更多相关文章

  1. java连接mysql以及增删改查操作

    java连接数据库的代码基本是固定的,步骤过程觉得繁琐些,代码记起来对我来说是闹挺.直接上代码: (温馨提醒:你的项目提前导入连接数据库的jar包才有的以下操作 ) class DBConnectio ...

  2. 简单的在jsp页面操作mysql

    ---恢复内容开始--- 上一篇讲了在DOS界面下操作mysql 现在我们来说说怎么在jsp页面中操作mysql 要用jsp页面操作mysql需要jdbc(不是非要jdbc,还有其他的) 下载地址:w ...

  3. 使用JDBC操作MySQL

    使用JDBC操作MySQL 步骤 加载驱动 连接数据库 操作数据库(增删改查) 关闭结果集,操作,数据库 准备工作 java连接MySQL的jar包 加载数据库驱动 public class Load ...

  4. python3操作mysql教程

    一.下载\安装\配置 1. python3 Python3下载网址:http://www.python.org/getit/ 当前最新版本是python3.2,下载地址是 http://www.pyt ...

  5. python操作mysql基础一

    python操作mysql基础一 使用Python操作MySQL的一些基本方法 前奏 为了能操作数据库, 首先我们要有一个数据库, 所以要首先安装Mysql, 然后创建一个测试数据库python_te ...

  6. MySQL数据库4Python操作mysql、索引、慢查询日志

    目录 一.Python 操作 mysql 1.1python 操作 mysql 1.2查询数据 1.3增加(添加.更新)数据 1.4修改数据 1.5删除数据 1.6SQL注入问题 1.6.1问题的引入 ...

  7. day06 python代码操作MySQL

    day06 python代码操作MySQL 今日内容 python代码操作MySQL 基于python与MySQL实现用户注册登录 python操作MySQL python 胶水语言.调包侠(贬义词& ...

  8. JAVA对mysql的基本操作

    一.了解几个概念(了解) 1.DriverManager 1)必须知道它是管理数据库的所有驱动程序 2)它的所有方法都是静态的,其中最重要的是getConnection()方法,我们可以通过它获取一个 ...

  9. java分享第十七天-03(封装操作mysql类)

     JAVA操作mysql所需jar包:mysql-connector-java.jar代码: import java.sql.*; import java.util.ArrayList; import ...

随机推荐

  1. 分词中的HMM

    http://blog.csdn.net/heavendai/article/details/7030102 1.       首先来说一下马尔科夫链.   一个事件序列发生的概率可以用下面的概率论里 ...

  2. SQL Server 数据库性能优化

    分析比较执行时间计划读取情况 1. 查看执行时间和cpu set statistics time on select * from Bus_DevHistoryData set statistics ...

  3. .NET-分页处理方式

    分页方案一: 现在常见的前端框架datatable,easyui等的分页插件,都是采用的前端分页,原理:先将符合条件的数据全部加载到页面上,然后计算分页,进行分页处理.(装载全部数据) 优点: --在 ...

  4. Linux系统中查找、删除重复文件,释放磁盘空间。

    在Linux系操作系统中查找并删除重复文件的方法的确有很多,不过这里介绍的是一款非常简单实用的软件FSlint.FSlint是一个重复文件查找工具,可以使用它来清除不必要的重复文件,笔者经常使用它来释 ...

  5. 如何把本地代码提交到git(码云)、github代码管理项目上

    前提必须安装了git工具 以下命令操作都是通过git bash操作. 将本地代码提交到码云空项目操作: D:\>mkdir inek_winprop D:\>cd inek_winprop ...

  6. PostgreSQL入门教程

    一.安装 首先,安装PostgreSQL客户端. sudo apt-get install postgresql-client 然后,安装PostgreSQL服务器. sudo apt-get ins ...

  7. Struts2的Action继承ActionSupport时,利用AOP来拦截Action出现NoSuchMethodException

    参考:http://zhanghua.1199.blog.163.com/blog/static/46449807201111139501298/ 做项目的时候,由于要用到在Struts2的Actio ...

  8. javascript获取时间差

    function GetDateDiff(startTime, endTime, diffType) { //将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式 startTime ...

  9. Android 原生 Android ActionBar Tab (滑动)导航

    本文内容 环境 项目结构 演示一:ActionBar Tab 导航 演示二:ActionBar Tab 带滑动导航 本文演示 Tab 导航.第一个演示,是基本的 Tab 导航,第二个是带滑动的 Tab ...

  10. electron vue 开发客户端程序

    文档知识点 https://electronjs.org/docs/tutorial/about (1)Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Ma ...