了解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的更多相关文章

  1. Spring学习五(JDBC支持)

    Spring的jdbc支持 1配置db.properties,将有关JDBC的信息载入 2bean文件配置数据源,这里用e3p0作为数据源载入db.properties 3配置template的bea ...

  2. 十五、JDBC操作数据库

    1.数据库特点 实现数据共享.减少数据的冗余度.数据的独立性.数据集中控制.数据的一致性和可维护性. 2.数据库种类和功能 (1)层次型数据库:类似于树结构,是一组通过链接而互相联系在一起的记录. ( ...

  3. JavaWeb学习总结(三十五)——使用JDBC处理Oracle大数据

    一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...

  4. 【Java框架型项目从入门到装逼】第十五节 - jdbc模糊查询实现(附带详细调试过程)

    上一节,我们实现了用户列表查询,已经按条件精确查询: if(student.getUsername() != null && !"".equals(student. ...

  5. jmeter(五)JDBC Request

    jmeter中取样器(Sampler)是与服务器进行交互的单元.一个取样器通常进行三部分的工作:向服务器发送请求,记录服务器的响应数据和记录响应时间信息 有时候工作中我们需要对数据库发起请求或者对数据 ...

  6. <转>jmeter(五)JDBC Request

    本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...

  7. JavaWeb(三十五)——使用JDBC处理Oracle大数据

    一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...

  8. MySQL学习(五)——使用JDBC完成用户表CRUD的操作

    通过案例我们发现“获得连接”和“释放资源”两次代码将在之后的增删改查所有功能中都存在,开发中遇到此种情况,将采用工具类的方法进行抽取,从而达到代码的重复利用. 1.使用properties配置文件 开 ...

  9. 十五:JDBC学习入门

    一.JDBC相关概念介绍 1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡 ...

随机推荐

  1. 搭建RAID5(5块硬盘)过程并模拟一块磁盘损坏情况

    首先:在配置RAID5之前我们先来了解一下它.RAID5,RAID是指独立磁盘冗余阵列,是把相同的数据存储在多个硬盘的不同地方的方法.通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能 ...

  2. 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 ...

  3. 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_ ...

  4. Python 如何debug

    一.常见错误: 1.漏了末尾的冒号,如 if语句,循环语句,定义函数 2.缩进错误,该缩进的时候没有缩进 3.把英文符号写成中文符号,如:  ' ' () , 4.字符串拼接,把字符串和数字拼接一起 ...

  5. Hibernate4教程六(2):基本实现原理

    整体流程 1:通过configuration来读cfg.xml文件 2:得到SessionFactory 工厂 3:通过SessionFactory 工厂来创建Session实例 4:通过Sessio ...

  6. buuctf zip伪加密

    平时伪加密总是依赖osx,这道题无法直接解压,所以研究一下伪加密先放两张图(图是偷的)一般在压缩源文件数据区全局方式位标记处,真加密为 09 00,伪加密为00 00,而后面将压缩源文件目录区全局方式 ...

  7. npm install 时 提示err code EINTEGRITY报错

    1.报错截图如图: 2.报错缘由:因npm 版本问题导致 3.解决方法:升级npm版本(npm i -g npm),再重新npm install即可.

  8. 关于solarwinds的一些介绍

    由于是给客户使用,作为运维人员自然是要安装测试一下的. solarwinds是一个付费的监控软件,部署起来很方便,加agent节点也很方便,除了监控主机,还可以监控网络流量,交换机等设备.由于并没有实 ...

  9. Oracle实现主键自增的几种方式

    数据库作为一个系统的核心,数据库设计的1NF就是一个表结构必须有唯一约束也就是主键,Oracle数据库本身没有自增机制,不像MySQL直接使用关键字AUTO_INCREMENT自动加一,所以需要我们去 ...

  10. Go: Println 与 Printf 的区别

    Go 学习笔记:Println 与 Printf 的区别,以及 Printf 的详细用法 2017-12-19 15:39:05 zgh0711 阅读数 26255更多 分类专栏: Go   版权声明 ...