第五记 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.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡 ...
随机推荐
- 搭建RAID5(5块硬盘)过程并模拟一块磁盘损坏情况
首先:在配置RAID5之前我们先来了解一下它.RAID5,RAID是指独立磁盘冗余阵列,是把相同的数据存储在多个硬盘的不同地方的方法.通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能 ...
- Error configuring application listener of class org.springframework.web.context.
1.java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor 缺少asm-3.3.jar 2.java.lang.NoClassDe ...
- Linux NIO 系列(04-3) epoll
目录 一.why epoll 1.1 select 模型的缺点 1.2 epoll 模型优点 二.epoll API 2.1 epoll_create 2.2 epoll_ctl 2.3 epoll_ ...
- Python 如何debug
一.常见错误: 1.漏了末尾的冒号,如 if语句,循环语句,定义函数 2.缩进错误,该缩进的时候没有缩进 3.把英文符号写成中文符号,如: ' ' () , 4.字符串拼接,把字符串和数字拼接一起 ...
- Hibernate4教程六(2):基本实现原理
整体流程 1:通过configuration来读cfg.xml文件 2:得到SessionFactory 工厂 3:通过SessionFactory 工厂来创建Session实例 4:通过Sessio ...
- buuctf zip伪加密
平时伪加密总是依赖osx,这道题无法直接解压,所以研究一下伪加密先放两张图(图是偷的)一般在压缩源文件数据区全局方式位标记处,真加密为 09 00,伪加密为00 00,而后面将压缩源文件目录区全局方式 ...
- npm install 时 提示err code EINTEGRITY报错
1.报错截图如图: 2.报错缘由:因npm 版本问题导致 3.解决方法:升级npm版本(npm i -g npm),再重新npm install即可.
- 关于solarwinds的一些介绍
由于是给客户使用,作为运维人员自然是要安装测试一下的. solarwinds是一个付费的监控软件,部署起来很方便,加agent节点也很方便,除了监控主机,还可以监控网络流量,交换机等设备.由于并没有实 ...
- Oracle实现主键自增的几种方式
数据库作为一个系统的核心,数据库设计的1NF就是一个表结构必须有唯一约束也就是主键,Oracle数据库本身没有自增机制,不像MySQL直接使用关键字AUTO_INCREMENT自动加一,所以需要我们去 ...
- Go: Println 与 Printf 的区别
Go 学习笔记:Println 与 Printf 的区别,以及 Printf 的详细用法 2017-12-19 15:39:05 zgh0711 阅读数 26255更多 分类专栏: Go 版权声明 ...