14JDBC
一.JDBC简介
全名:java database connection
java代码与数据库相连的工具,java>JDBC>(oracle mysql sql server)
二.四大件
- DriverManager:根据不同数据库,调用正确的Driver
- Connection:由Driver产生,负责数据库的连接
- Statement:由connection产生,负责传送SQL指令
- ResultSet:负责接收Statement(sql语句)执行结果
三.JDBC具体步骤
- 安装驱动,驱动为一个jar包,mysql的驱动和oracle的驱动不同
- 复制到src目录下,build path>addto
- 加载驱动-------Class.forName("com.mysql.jdbc.Driver");
- 与数据库相连----------Connection con=DriverManager.getConnection(url,user,psw);(此处会发生异常)
- 写sql语句---------Statement st=con.createStatement();(异常)
- 执行sql语句-----------int rows=st.executeUpdate(sql);//更新操作:此处返回受影响的行数
- 关闭四大件-------st.close();con.close();
以上为更新数据,下面的例子为插入数据,具体代码如下
public class StudentDao{
private Connection con;
private Statement st;
private ResultSet rs;
public void insert(Student s)throws SQLExp{
String sql="insert****";
con=DbUtils.getConnection();
st=con.createStatement();
int rows=st.executeUpdate(sql);
DbUtils.close(con,st,rs);
return rows;
}
public static void close(Connection con,Statement st,ResultSet rs){
try{
if(con!=null) con.close();
if(st!=null) st.close();
if(rs!=null) rs.close();
}catch(SQLExp e){
syso(连接失败);
e.printStackTrace();
}
}
}
另有优化的方法PreparedStatement:预编译:可有效防止sql注入
public class StudentDao{
private Connection con;
private PreparedStatement ps;//
private ResultSet rs;
public void insert(Student s)throws SQLExp{
String sql="insert into Student values(?,?,?,?)";
con=DbUtils.getConnection();
ps=con.prepareStatement();
ps.setInt(1,s.getId());
ps.setString(2,s.getName());
ps.setInt(3,s.getAge());
ps.setDouble(4,s.getScore());
int rows=st.executeUpdate(sql);
DbUtils.close(con,st,rs);
return rows;
}
}
关于JDBC的批处理,一般用到较少
//传入参数非一个学生,二是一个学生的List数组
for(Student s:l){
String sql="insertXXXX";
st.addBatch(sql);
}
int arr[]=st.executeBatch(); //预编译:
String sql="insert into student values(?,?,?,?)";
ps=con.preparedStatement(sql);
for(Student s:l){
ps.setInt(1,s.getId());
ps.setString(2,s.getName());
ps.addBatch(sql); //批处理
}
test类
StudentDao sd=new StudentDao();
List<Student>l=new ArrayList<Student>();
Student s=new Student(1015,"zhangwenfang",54.2,"sdad");
Student s1=new Student(1004,"zhangwefsng",54.2,"sfdsad");
Student s2=new Student(1003,"zhsfdang",54.2,"gasad");
l.add(s);
l.add(s2);
l.add(s1);
try {
sd.inserts(l);
System.out.print("插入成功");
} catch (SQLException e) {
System.out.println("插入失败");
e.printStackTrace();
}
四.关于事务
理解银行转账的过程,要么全成功,要么全失败。你给人转账,你银行得-钱,别人得+钱
三要素:
- 保证Connection 是同一个
- 关闭自动提交
- 不要忘了手动提交
14JDBC的更多相关文章
- 5.14JDBC
一.##JDBC 1. 概念:Java DataBase Connectivity Java 数据库连接, Java语言操作数据库. JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数 ...
随机推荐
- jmeter的几种参数化方式
在用到jmeter工具时,无论做接口测试还是性能测试,参数化都是一个必须掌握且非常有用的知识点.参数化的使用场景,例如: 1)多个请求都是同一个ip地址,若服务器地址更换了,则脚本需要更改每个请求的i ...
- jQuery对象与DOM对象互相转换
1.jQuey对象转DOM对象 a. [index] 代码如下: var $a = $("#a"); //jQuery对象 var a = $a[]; //DOM对象 b. g ...
- android spf 存储 集合(实体等)
package com.example.sharedpreferencelist; import java.io.ByteArrayInputStream;import java.io.ByteArr ...
- 前端校验框架ValidForm之check方法修正
用过validform的朋友相信都知道,在利用check方法的时候,发现该方法对表单输入值只要符合datatype规则的就返回ture.那么我们想对某个字段进行ajax重复校验的时候,只需要在该表单元 ...
- 独家!DevExpress VCL Controls 2019发展路线图(No.1)
[DevExpress VCL Controls下载] 根据调查结果和反馈,DevExpress官方团队最终确定了DevExpress VCL Controls 2019年的路线图. 关于调查结果的重 ...
- Adversarial Examples for Semantic Segmentation and Object Detection 阅读笔记
Adversarial Examples for Semantic Segmentation and Object Detection (语义分割和目标检测中的对抗样本) 作者:Cihang Xie, ...
- Problem 3: Largest prime factor
The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 60085 ...
- web开发中 代码解决部分IE兼容问题
首先是自己遇到问题: 一套系统,以前的开发asp旧+c#新后台管理扩展.完善后,在2013年前基本无问题,很是畅顺. 其中.到升级了浏览器后.例如ie9以后,则问题出现了. 如图: 这是一个js的 ...
- python基础(字符串常用方法)
字符串不常用方法: 字符串常用的方法: #看源代码 按住ctrl点击方法名 用户注册的小程序 import datetimeusers = []passwds = []for i in range(3 ...
- react-native-scrollable-tab-view 中嵌套了react-native-swiper产生的bug
前段时间用RN的时候遇到过这个问题用scrollable-tab-view(scrollableView)这个组件然后嵌套轮播swiper会出现,在scrollableView nitialPage ...