一.JDBC简介

  全名:java database connection

  java代码与数据库相连的工具,java>JDBC>(oracle  mysql sql server)

二.四大件

  • DriverManager:根据不同数据库,调用正确的Driver
  • Connection:由Driver产生,负责数据库的连接
  • Statement:由connection产生,负责传送SQL指令
  • ResultSet:负责接收Statement(sql语句)执行结果

三.JDBC具体步骤

  1. 安装驱动,驱动为一个jar包,mysql的驱动和oracle的驱动不同
  2. 复制到src目录下,build path>addto
  3. 加载驱动-------Class.forName("com.mysql.jdbc.Driver");
  4. 与数据库相连----------Connection con=DriverManager.getConnection(url,user,psw);(此处会发生异常)
  5. 写sql语句---------Statement st=con.createStatement();(异常)
  6. 执行sql语句-----------int rows=st.executeUpdate(sql);//更新操作:此处返回受影响的行数
  7. 关闭四大件-------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的更多相关文章

  1. 5.14JDBC

    一.##JDBC 1. 概念:Java DataBase Connectivity  Java 数据库连接, Java语言操作数据库. JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数 ...

随机推荐

  1. eregi

    eregi (PHP 4, PHP 5) eregi — 不区分大小写的正则表达式匹配 说明 int eregi ( string $pattern , string $string [, array ...

  2. 配置合适的Visual Studio 2017 开发环境(其它版本的也适用)

    1.VS 安装完成后,可以重新配置合适的开发环境 第一步: 第二步: 第三步: 第四步:选择合适自己的开发环境 这里我选择常规,具体的可以看窗口右边的说明

  3. JavaScript中的获取元素的方法

    通过id获取元素 document.getElementById(id名字) 通过标签获取元素 document/元素.getElementsByTagName(标签名) 通过css选择器获取元素 d ...

  4. 大数据面试题——如何找出访问最多的IP

    问题描述: 现有海量日志数据保存在一个超大的文件中,该文件无法直接存入内存,要求从 中提取某天访问BD次数最多的IP 分析解读: 由于这个题目只关心某一天访问次数最多的IP,因此可以首先对文件进行一次 ...

  5. vue教学视频(小程序教学视频)

    写在前面 最近通过了解众多面试者的面试情况 总结出以下几点: 对框架的要求越来越高特别是vue和小程序 不会vue和小程序连面试机会都没有 会vue的比不会vue的薪资高4-5k 小程序有发展的趋势 ...

  6. 泛型--增强for循环--数组和集合转换

    1:List的子类(掌握) (1)List的子类特点 ArrayList: 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector: 底层数据结构是数组,查询快,增删慢 线程安全,效率低 ...

  7. Mac下部署Ionic环境

    1.下载安装nodejs,可以到官网http://nodejs.org/en/download/上去下载最新版本安装,比较无脑.如果官网打不开的话可以到中文网站去下载http://nodejs.cn/ ...

  8. centos7 eclispe 编译C++遇到的问题总结

    最近由于工作的需要,又开始回归之前已经遗忘了的技术.arm嵌入式这个古老的名词. 开始选择了linuxminit,开始的linuxminit17以前还可以,可是用了一下linuxminit19,发现r ...

  9. Delphi 对ini文件的操作

    界面如图: 代码如下: unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Vari ...

  10. 什么是 SaaS (Software as a Service)

    什么是SaaS (Software as a service ) 把软件作为一个服务.SaaS是一种cloud-based 和通过Internet提供软件的模式,用户不用再购买软件,而改用向提供商租用 ...