第五记 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.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡 ...
随机推荐
- MyBatis原理,Spring、SpringBoot整合MyBatis
1. MyBatis概述 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可 ...
- docker内的应用访问宿主机上的mysql和Redis
背景:宿主机部署MySQL.Redis,docker内部署tomcat.jdk 需求:tomcat内的应用访问宿主机的MySQL和Redis 方法: 一.连接地址切记不能用localhost和 ...
- Oracle或PL/SQL自动断开连接解决参考
ORACLE自动断开数据库连接解决办法 方法一.直接修改资源配置文件 分三个步骤在sqlplus环境下完成. 第一步,查询资源文件,找到CONNECT_TIME所在的pro ...
- C# 网络编程 TcpListener
1.服务断代码 public partial class Server : Form { private bool lk = true; public Server() { InitializeCom ...
- tushare积分怎么获得 tushare pro 积分充值 积分转让
本人是做量化投资的,团队转型,换了交易策略,手头有多个离职同事的闲置转让.600分:原价50元,仅需39元1500分:原价150元,仅需109元(售罄)2000分:原价200元,仅需149元5000分 ...
- 一、最新Kafka单节点部署+测试 完整
每次学一个东西从基础的开始,循序渐进. 不急不躁,路还很长. 所有教程都是学习汪文君大神的kafka教程的. 一.部署 这里选的kafka版本是 0.10.2.1 下载连接 https://dow ...
- python skimage库HOG特征提取原码解读
Hog特征+SVM常用来做行人检测. opencv中也有Hog特征提取的原码,但是由于原码不是用python写的,而skimage用python实现了,所以就解读的skimage的代码. 先看用ski ...
- 自定义DbUtils通用类
本实例使用C3P0连接池做连接,详见https://www.cnblogs.com/qf123/p/10097662.html开源连接池C3P0的使用 DBUtils.java package com ...
- 微信小程序のwxss
一.wxss简介 wxss是微信小程序的样式文件,同h5框架的css类似,它具有以下特性: 二.外联样式导入 我们可以通过@import引入外部文件的样式 小程序样式是从上到下,从左到右执行的,如果样 ...
- groupby 技术
分组键可以有很多形式,且类型不必相同: 1.列表或数组,其长度与待分组的轴一样 2.表示DataFrame某个列名的值 3.字典或Series,给出待分组轴上的值与分组名之间的对应关系 4.函数,用于 ...