一.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 是同一个
  • 关闭自动提交
  • 不要忘了手动提交