第五记 JDBC
了解JDBC
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API(API:Application Program Interface,应用程序接口),可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。
注:API就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令。
JDBC连接数据库
1.下载对应的数据库JDBCjar包,这边使用的SQLservice的jdbc.jar包
2.创建java工程,创建lib文件夹,将下载的jar包放入lib文件夹下
3. 鼠标右击jar包进行加载
4.创建包以及相应的类、
BaseJdbcDAO.java文件负责jdbc连接数据库
Stu.java文件是封装了数据库stu表的字段,并给予了get、set方法和有参、无参构造器
StuDAO.java文件继承了BaseJdbcDAO,主要负责封装对stu表的sql语句操作
5.jdbc连接数据库
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List; public class BaseJdbcDAO<E> {
private static final String URL="jdbc:sqlserver://localhost:1433;databaseName=mysql";
private static final String USER="sa";
private static final String PWD="123";
private Connection conn=null;
private Statement state=null;
protected ResultSet res=null;
static{
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("加载驱动成功");
} catch (ClassNotFoundException e) {
System.out.println("加载驱动失败");
e.printStackTrace();
}
}
public void createConnection() throws SQLException {
conn=DriverManager.getConnection(URL, USER, PWD);
System.out.println("创建连接成功");
}
public void createStatement() throws SQLException {
state=conn.createStatement();
System.out.println("创建命令执行对象成功");
}
public void execute(String sql) {
try {
this.createConnection();
this.createStatement();
System.out.println(sql+"----static--");
state.executeQuery(sql);
System.out.println(sql+"-----ok-----");
} catch (SQLException e) {
e.printStackTrace();
}finally{
this.closeConn();
}
}
public List<E> execreateQuery(String sql/*,Class cls*/) {
List<E> list=null;
try {
this.createConnection();
this.createStatement();
System.out.println(sql+"----static--");
res = state.executeQuery(sql);
System.out.println(sql+"-----ok-----");
list = new ArrayList<E>();
this.rs2list(list);
if (list!=null) {
System.out.println(list.size());
}
} catch (Exception e) {
e.printStackTrace();
}finally{
this.closeConn();
}
return list;
}
//这边用的是反射写的rs2list,也可以用子类继承父类重写rs2list方法
public void rs2list(List<E> list/*, Class cls*/) throws Exception {
Type type = getClass().getGenericSuperclass();//包名.类名<泛型的类的包名.泛型类名>
Type[] params = ((ParameterizedType)type).getActualTypeArguments();//class 泛型的类的包名.泛型类名(是一个这样的数组)
Class cls = (Class) params[0];//泛型的类的包名.泛型类名
while (res.next()) {
//E object = (E) cls.newInstance();
Object object = cls.newInstance();
Method[] methods = cls.getDeclaredMethods();
for (int i = 0; i < methods.length; i++) {
if (methods[i].getModifiers() == Modifier.PUBLIC
&& methods[i].getName().startsWith("set")) {
Method method = methods[i];
String name = methods[i].getName().substring(3)
.toLowerCase();
String value = res.getString(name);
method.invoke(object, value);
}
}
list.add((E) object);
}
}
public void closeConn() {
try {
if (res!=null) {
res.close();
res=null;
}
if (state!=null) {
state.close();
state=null;
}
if (conn!=null) {
conn.close();
conn=null;
}
System.out.println("释放资源成功");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//测试类
class Main{
public static void main(String[] args) throws SQLException {
new StuDao().selAll();
}
}
代码块
6.StuDAO.java
import java.util.List; public class StuDao extends BaseJdbcDAO<Stu> {
// sql 查询stu表全部
public List<Stu> selAll() {
String sql="select * from stu";
return super.execreateQuery(sql);
}
// sql添加语句
public void addSql(Stu stu) throws SQLException {
String sql = "insert into stu(id,name,sex,dz) values ("
+ stu.getId() + ",'" + stu.getName() + "','" + stu.getSex()
+ "','" + stu.getDz() + "')";
this.execute(sql);
} // sql删除语句
public void delSql(String id) throws SQLException {
String sql = "delete stu where id=" + id;
this.execute(sql);
} // sql更新语句
public void updSql(Stu stu) throws SQLException {
String sql = "update stu set name='" + stu.getName() + "',sex='"
+ stu.getSex() + "',dz='" + stu.getDz() + "' where id="
+ stu.getId();
this.execute(sql);
} // sql 条件查询
public List<Stu> selSqlid(String id) throws SQLException {
String sql = "select id,name,sex,dz from stu where id=" + id;
return this.execreateQuery(sql); } // 重写父类rs2list方法接收数据库内数据
/*@Override
protected void list2List(List<Stu> list) {
// TODO Auto-generated method stub
try {
while (res.next() == true) {
String id = res.getString("id");
String name = res.getString("name");
String sex = res.getString("sex");
String dz = res.getString("dz");
Stu stu = new Stu(id, name, sex, dz);
list.add(stu);
}
} catch (SQLException e) { }
}*/
}
代码块
7.Stu
public class Stu {
private String id;
private String name;
private String sex;
private String dz;
}
第五记 JDBC的更多相关文章
- Spring学习五(JDBC支持)
Spring的jdbc支持 1配置db.properties,将有关JDBC的信息载入 2bean文件配置数据源,这里用e3p0作为数据源载入db.properties 3配置template的bea ...
- 十五、JDBC操作数据库
1.数据库特点 实现数据共享.减少数据的冗余度.数据的独立性.数据集中控制.数据的一致性和可维护性. 2.数据库种类和功能 (1)层次型数据库:类似于树结构,是一组通过链接而互相联系在一起的记录. ( ...
- JavaWeb学习总结(三十五)——使用JDBC处理Oracle大数据
一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...
- 【Java框架型项目从入门到装逼】第十五节 - jdbc模糊查询实现(附带详细调试过程)
上一节,我们实现了用户列表查询,已经按条件精确查询: if(student.getUsername() != null && !"".equals(student. ...
- jmeter(五)JDBC Request
jmeter中取样器(Sampler)是与服务器进行交互的单元.一个取样器通常进行三部分的工作:向服务器发送请求,记录服务器的响应数据和记录响应时间信息 有时候工作中我们需要对数据库发起请求或者对数据 ...
- <转>jmeter(五)JDBC Request
本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...
- JavaWeb(三十五)——使用JDBC处理Oracle大数据
一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...
- MySQL学习(五)——使用JDBC完成用户表CRUD的操作
通过案例我们发现“获得连接”和“释放资源”两次代码将在之后的增删改查所有功能中都存在,开发中遇到此种情况,将采用工具类的方法进行抽取,从而达到代码的重复利用. 1.使用properties配置文件 开 ...
- 十五:JDBC学习入门
一.JDBC相关概念介绍 1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡 ...
随机推荐
- 12. MySQL简单使用
关于MySQL的使用,大家可以去网上看相关教程,但是为了保证阅读的连贯性,这里会做简单介绍. 创建数据库 我们双击刚刚新建的数据库,然后双击mysql,点击新建查询,可以在编辑器里面输入一些mysql ...
- Django框架(三十)—— 使用Vue搭建前台
目录 vue的使用 一.创建vue项目 二.pycharm开发vue项目 1.安装vue.js插件 2.运行vue项目 三.vue项目的目录结构 四.vue的使用 1.创建新的组件 2.显示数据 3. ...
- Eureka 系列(02)Eureka 一致性协议
目录 Eureka 系列(02)Eureka 一致性协议 0. Spring Cloud 系列目录 - Eureka 篇 1. 服务发现方案对比 1.1 技术选型 1.2 数据模型 2. Eureka ...
- 三、函数 (SUM、MIN、MAX、COUNT、AVG)
第八章 使用数据处理函数 8.1 函数 SQL支持利用函数来处理数据.函数一般是在数据上执行的,给数据的转换和处理提供了方便. 每一个DBMS都有特定的函数.只有少数几个函数被所有主要的DBMS等同的 ...
- 十次艳遇单例设计模式(Singleton Pattern)
1.引言 单例设计模式(Singleton Pattern)是最简单且常见的设计模式之一,在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访 ...
- Permission denied
记录在一次启动tomcat时提示:Permission denied 信息. 解释一下Permission denied的意思-没有权限 解决办法: sudo chmod -R 777 某一目录其中- ...
- 寻找链表倒数第k个元素,只遍历一遍(编程之美)
class LNode { public LNode next; public int data; } /*找出倒数第k个元素,只遍历一遍*/ class Kk { private static LN ...
- Stm32CubeMX5 配置使用ADC
试验,通过ADC按键 按下时的不同电压,然后把相应的数字量通过串口发出, 1. 使用 ADC 检测按键, 原理图分析 2. Stm32CubeMX5配置 ADC功能,先配置PA0为ADC模式 配置 A ...
- 【leetcode】939. Minimum Area Rectangle
题目如下: Given a set of points in the xy-plane, determine the minimum area of a rectangle formed from t ...
- js手机滚屏效果
原文地址:https://github.com/yanhaijing/zepto.fullpage 第一步:基于移动端的浏览体验,在头部添加浏览器渲染的分辨率 <meta name=" ...