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公司)定义的一套操作所有关系型数 ...
随机推荐
- ElasticsearchCRUD翻译系列之(一): ElasticsearchCRUD 介绍
ELASTICSEARCH CRUD .NET PROVIDER 翻译自(原文地址: https://damienbod.com/2014/09/22/elasticsearch-crud-net-p ...
- JS-圣杯模式
var inherit = (function(){ var F = function(){}; return function(Target,Origin){ F.prototype = Origi ...
- 关于if判断和switch
1.if判断: if(条件1){ 执行语句: } else if(条件2)}{ 执行语句2: } else{ 执行语句3: } if里面可以有无限个else if,而else if里面能嵌套无限个if ...
- Python-接口自动化(八)
unittest单元测试框架(八) (九)unittest 1.基本概念 python自带的unittest单元测试框架不仅可以适用于单元测试,也适用于WEB自动化测试用例的开发与执行,uint ...
- mysql5.7设置默认编码
1.通过 show variables like '%char%';查看MySQL字符集情况 mysql> show variables like '%char%';+------------- ...
- python学习笔记第一节
一.HelloWorld #!/usr/bin/env python #-*- coding:utf-8 -*- print("HelloWorld!") 二.用户交互 #!/us ...
- namespace的作用
namespace的用法 1.什么是命名空间 通常我们学c++的时候经常看见头文件下有一句using namespace std,有什么用呢? 例如: #include<iostream> ...
- C++ Coroutine简明教程
在C++里,一个函数如果其函数体实现中包含co_await.co_yield.co_return中任何一个关键字,那么这个函数就是一个coroutine.其中: co_await:挂起当前的corou ...
- selenium中下拉框的定位
from selenium import webdriverfrom selenium.webdriver.support.select import Selectimport timedriver ...
- idea构建spark开发环境,并本地运行wordcount
1.首先现在idea,官网:https://www.jetbrains.com/idea/ 2.安装jdk1.8,scala2.11 3.下载idea后,需要在idea中安装scala的插件,安装的方 ...