Java泛型与数据库应用实例详解
作者:cakincqm 发布时间:2023-08-14 09:37:15
本文实例讲述了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程序设计有所帮助。
来源:https://blog.csdn.net/chengqiuming/article/details/93377604


猜你喜欢
- 在Android中,线程内部或者线程之间进行信息交互时经常会使用消息,这些基础的东西如果我们熟悉其内部的原理,将会使我们容易、更好地架构系统
- SWT中没有AWT的BorderLayout布局管理器。下面是SWT下的自定义实现: BorderLayout.java package s
- 如果JDBC连接是在自动提交模式下,它在默认情况下,那么每个SQL语句都是在其完成时提交到数据库。这可能是对简单的应用程序,但有三个原因,你
- 本文实例讲述了C#实现将应用程序设置为开机启动的方法。分享给大家供大家参考。具体如下:private void WriteRegistry(
- 本文实例讲述了Android开发之SeekBar基本使用及各种美观样式。分享给大家供大家参考,具体如下:改变控件透明度只需通过 .setAl
- 一、缓存的基本概念缓存 。这是一个简单但非常有效的概念,这个想法的核心是记录过程数据,重用操作结果。当执行繁重的操作时,我们会将结果保存在我
- 本文讲述的是Android中RelativeLayout、FrameLayout的用法。具体如下:RelativeLayout是一个按照相对
- 缓存是现代应用服务器中非常常用的组件。除了第三方缓存以外,我们通常也需要在java中构建内部使用的缓存。那么怎么才能构建一个高效的缓存呢?
- RTF文档即富文本格式(Rich Text Format)的文档。我们在处理文件时,遇到需要对文档格式进行转换时,可以将RTF转为其他格式,
- Lombok简介和其他语言相比,Java经常因为不必要的冗长被批评。Lombok提供了一系列注解用以在后台生成模板代码,将其从你的类中删除,
- java 二叉查找树实例代码1.左边<中间<右边2.前序遍历 左中右3.中序遍历 中左右4.后序遍历 左右中public cla
- 本文为大家汇总了Android Studio ADB网络调试的使用方法,供大家参考,具体内容如下随着技术的发展,现在的安卓手机大部分开始使用
- 最近研究C#相关的ORC技术,图像识别一般C和C++这种底层语言做的比较多,C#主要是依托一些封装好的组件进行调用,这里介绍三种身份证识别的
- 本文实例讲述了Java使用Jdbc连接Oracle执行简单查询操作。分享给大家供大家参考,具体如下:Java Jdbc 连接 Oracle
- 一个简单的红包生成算法,代码如下:/** * 红包 * @param n * @param money 单位:分 * @return **/
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- 前言 同源策略:判断是否是同源的,主要看这三点,协议,ip,端口。同源策略就是浏览器出于网站安全性的考虑,限制不同源之间的资源相互访问的一种
- 我们用一个简单的例子,来说明一下这种消息传递的机制。有一家三口,妈妈负责做饭,爸爸和孩子负责吃。。。将这三个人,想象成三个类。妈妈有一个方法
- 一、添加pom.xml依赖<parent> <groupId>org.springfram
- 接着上一篇进行学习java文件上传下载1。五、断点续传 对于熟用QQ的程序员,QQ的断点续传功能应该是印象很深刻的。因为它很实用也