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应用程序中,经常会自定义View来实现各种各样炫酷的效果,在实现这吊炸天效果的同时,我们往往会定义很多attr属性,这样
- package com.jjinfo.common.util; import java.util.Arrays; import java.u
- 问题:Information:java: Errors occurred while compiling module &lsquo
- 序列化与反序列化序列化:把对象转换成字节的过程,称为对象序列化反序列化:把字节恢复成对象的过程,称为反序列化对象的持久化概念:把字节保存的硬
- 1、原理事务的概念想必大家都很清楚,其ACID特性在开发过程中占有重要的地位。同时在并发过程中会出现一些一致性问题,为了解决一致性问题,也出
- 本文实例为大家分享了Java文件操作的具体代码,供大家参考,具体内容如下简介本程序主要采用了FileInputStream和FileOutp
- 前言目前正在练手springboot+vue,因为很多步骤会遇到困难,当时查完资料解决,过一段时间就会忘记,所以决定建个系列记录下来。因为中
- 现在很多流行的框架,都可以很快的把分页效果做出来,但是作为一名程序员你必须得知道手写分页的流程:场景效果:一、分页的思路首先我们得知道写分页
- 在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型。向上转型我们在现实中常常这样说:这个人会唱歌。在这里,我们并不关心
- Java CharArrayReader流一、CharArrayReader流定义API说明:该类实现了一个可用作字符输入流的字符缓冲区,即
- 一.工程文件二.Main.java主函数,实现类package ui;//主函数实现public class Main { &
- 本文实例讲述了Java实现文件和base64流的相互转换功能。分享给大家供大家参考,具体如下:import java.io.FileInpu
- 功能函数// 图像旋转void Rotate(const cv::Mat &srcImage, cv::Mat &dstIm
- Android异常详情介绍这种异常我遇到以下两种情况: 1. java.lang.IllegalStateException: No wra
- package com.chase.test;import java.util.ArrayList;import java.util.Has
- 我们通过项目的reimport等众多办法无法解决之后:假设这个是爆红的,因为被我已经解决了。我们进入到我们的本地仓库, 新建包。在repos
- 本文主要对SpringBoot2.x参数校验进行简单总结,其中SpringBoot使用的2.4.5版本。一、引入依赖<dependen
- Android版本更新实例详解1、导入xutils的jar包 2、在AndroidManifest.xml中添加权限 3、选择下载的路径,和
- 该篇文章内容较多,包括有rabbitMq相关的一些简单理论介绍,provider消息推送实例,consumer消息消费实例,Direct、T
- 对象内存分配与回收策略对象的内存分配,往大方向讲,就是在堆上分配〔但也可能经过JIT编译后被拆散为标量类型并间接地栈上分配),对象主要分配在