Java泛型与数据库应用实例详解

所属分类: 软件编程 / java 阅读数: 29
收藏 0 赞 0 分享

本文实例讲述了Java泛型与数据库应用。分享给大家供大家参考,具体如下:

一 点睛

BaseDao定义了基本的数据库增删查改, 之后可以继承该泛型类,实现各自的增删查改,或者使用超类的增删查改,同时每个继承类还能增加自己的操作。

二 实战

1 BaseDao.java

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class BaseDao<T> {
  Connection connection;
  PreparedStatement pStatement;
  String urlString = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=UTF8";
  String drivString = "com.mysql.jdbc.Driver";
  void OpenDB() {
    try {
      if (connection == null) {
        Class.forName(drivString);
        this.connection = DriverManager.getConnection(urlString, "root", "123456");
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  void CloseDB() {
    try {
      if (pStatement != null) pStatement.close();
      if (connection != null) connection.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  public void Save( T t ) {
    OpenDB();
    String table = "";
    String sqlString = "insert into ";
    try {
      table = t.getClass().getSimpleName();
      Field[] fields = t.getClass().getDeclaredFields();
      sqlString += table;
      String sqlNameString = "";
      String sqlValString = "";
      for (Field field : fields) {
        sqlNameString += field.getName() + ",";
        sqlValString += "?,";
      }
      sqlNameString = sqlNameString.substring(0, sqlNameString.length() - 1);
      sqlValString = sqlValString.substring(0, sqlValString.length() - 1);
      pStatement = connection.prepareStatement(sqlString + " (" + sqlNameString + ") values (" + sqlValString + ")");
      int n = 1;
      for (Field field : fields) {
        field.setAccessible(true);
        System.out.println(field.get(t).toString());
        pStatement.setString(n, field.get(t).toString());
        n++;
      }
      pStatement.executeUpdate();
      CloseDB();
    } catch (Exception e) {
      e.printStackTrace();
      CloseDB();
    }
  }
  public void Del( T t ) {
  }
  public void Update( T t ) {
  }
  public void Search( T t ) {
  }
}

2 StudentDao.java

public class StudentDao extends BaseDao<Student> {
}

3 TeacherDao.java

public class TeacherDao extends BaseDao<Teacher> {
}

4 Student.java

public class Student {
  public String name;
  public int age;
  public String dept;
  /**
  * @return the name
  */
  public String getName() {
   return name;
  }
  /**
  * @param name the name to set
  */
  public void setName(String name) {
   this.name = name;
  }
  /**
  * @return the age
  */
  public int getAge() {
   return age;
  }
  /**
  * @param age the age to set
  */
  public void setAge(int age) {
   this.age = age;
  }
  /**
  * @return the dept
  */
  public String getDept() {
   return dept;
  }
  /**
  * @param dept the dept to set
  */
  public void setDept(String dept) {
   this.dept = dept;
  }
}

5 Teacher.java

public class Teacher {
}

6 TestDao.java

public class TestDao {
  public static void main(String[] args) {
   System.out.println("ok");
   Student stud=new Student();
   stud.age=20;
   stud.name="zhangsan";
   stud.dept="computer";
   StudentDao sd=new StudentDao();
   sd.Save(stud);
   System.out.println(stud.dept);
  }
}

三 运行

ok
zhangsan
20
computer
computer

四 怎样在IDEA中导入jar包

可参考附录:IDEA连接数据库(导入jar包)

五 另外一种写法

StudentDao.java

public class StudentDao<M> extends BaseDao<M> {    // 这里的M可以是任意合法标识符
}

TestDao.java

public class TestDao {
 public static void main(String[] args) {
 System.out.println("ok");
 Student stud=new Student();
 stud.age=20;
 stud.name="zhangsan2";
 stud.dept="computer";
 StudentDao<Student> sd=new StudentDao<>();  // 这里要说明是Student
 sd.Save(stud);
 System.out.println(stud.dept);
 TeacherDao<Teacher> te= new TeacherDao<>();
 }
}

附:IDEA连接数据库(导入jar包)

Java连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mysql.com/downloads/connector/j/,解压后得到jar库文件,然后在对应的项目中导入该库文件。

IDEA导入jar过程:新建文件夹(名称任意,这里使用Lib),导入mysql-connector-java-*.*.**-bin.jar如下图

右键点击jar文件,然后点击Add as Library,jar导入成功。后面百度java使用mysql即有详细的访问mysql的代码。

ecplice导入jar过程:新建文件夹(名称任意,这里使用Lib),导入mysql-connector-java-*.*.**-bin.jar如下图

右键-》buildpath-》add to build path

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

更多精彩内容其他人还在看

Springmvc restful配置遇到的小坑

本文是小编给大家带了的Springmvc restful配置遇到的小小坑,小编给大家带来了问题原因及解决办法,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧
收藏 0 赞 0 分享

Java中的匿名内部类小结

java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。这篇文章主要介绍了Java中的匿名内部类的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java的云打印Lodop

这篇文章主要介绍了Java的云打印Lodop 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java线程池框架核心代码解析

这篇文章主要针对Java线程池框架核心代码进行详细解析,分析Java线程池框架的实现ThreadPoolExecutor,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java 交换两个变量的数值实现方法

下面小编就为大家带来一篇Java 交换两个变量的数值实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

全面了解JAVA_BaseDAO数据处理类

下面小编就为大家带来一篇全面了解JAVA_BaseDAO数据处理类。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java、python、JavaScript以及jquery循环语句的区别

本篇文章主要介绍java、python、JavaScript以及jquery的循环语句的区别,这里整理了它们循环语句语法跟示例,以便大家阅读,更好的区分它们的不同
收藏 0 赞 0 分享

基于JDBC封装的BaseDao(实例代码)

下面小编就为大家带来一篇基于JDBC封装的BaseDao(实例代码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

简单通用JDBC辅助类封装(实例)

下面小编就为大家带来一篇简单通用JDBC辅助类封装(实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈java线程中生产者与消费者的问题

下面小编就为大家带来一篇浅谈java线程中生产者与消费者的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多