Mysql(六) JDBC

1、数据库驱动

不同数据库有不同的驱动。我们的程序会通过数据库驱动和数据库进行链接。

2.jdbc

SUN公司为了简化开发人员的(对数据库的统一)操作,提供了一个(java操作数据库的)规范,俗称JDBC。对开发人员来说,只需要掌握jdbc接口的操作即可。

3.书写第一个jdbc程序

// 1. 加载驱动,固定写法
Class.forName("com.mysql.jdbc.Driver");
// 2. 用户信息和url
String userName = "root"; //用户名
String password = "123456"; //密码
String url = "jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf8&useSSL=true";
//3.获取连接
Connection connection = DriverManager.getConnection(url,userName,password);
//4.获得执行sql的对象
Statement statement = connection.createStatement();
//5.执行sql
String sql = "select * from user";
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
 system.out.println("id="+resultSet.getObject("id"));
}
//6.释放连接
resultSet.close();
statement.close();
connection.close();

4.Statement对象详解

Jdbc中的statement对象用于向数据库发送sql语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可。

Statement对象的executeUpdate方法,用于向数据库发送增、删、改的sql语句,executeUpdate执行完成后,将会返回一个整数(即增删改语句导致了数据库几行数据发生了变化)。

Statement.executeQuery方法用于向数据库发送查询语句,executeQuery方法返回代表查询结果的ResultSet对象。

5.sql注入问题

什么是sql注入?

sql存在漏洞,会被攻击导致数据泄露。

6.PreparedStatement对象

PrepareStatement可以防止sql注入,效率更好。

PrepareStatement防止sql注入的本质就是把传递进来的参数当做字符,假设其中存在转译字符,会被直接转译。

// 1. 加载驱动,固定写法
Class.forName("com.mysql.jdbc.Driver");
// 2. 用户信息和url
String userName = "root"; //用户名
String password = "123456"; //密码
String url = "jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf8&useSSL=true";
//3.获取连接
Connection connection = DriverManager.getConnection(url,userName,password);
//4.获得执行sql的对象
String sql = "select * from user where id = ?";
PrepareStatement statement = connection.prepareStatement(sql);
//5.执行sql
statement.setInt(1,1);
ResultSet resultSet = statement.executeQuery();
while(resultSet.next()){
 system.out.println("id="+resultSet.getObject("id"));
}
//6.释放连接
resultSet.close();
statement.close();
connection.close();

7. JDBC操作事务

Connection conn = null;
PrepareStatement ps = null;
try{
    Class.forName("com.mysql.jdbc.Driver");
    conn = DriverManager.getConnection();
    //关闭数据库自动提交,会自动开启事务
    conn.setAutoCommin(false);

    String sql1 = "update amount set money = money - 100 where id = 1";
    ps = conn.prepareStatement(sql1);
    ps.executeUpdate();

    String sql2 = "update amount set money = money + 100 where id = 2";
    ps = conn.prepareStatement(sql2);
    ps.executeUpdate();

    //提交事务
    conn.commit();
}catch(Exception e){
   try{
    conn.rollback(); //如果失败则回滚事务
 }catch(Exception e){
   e.printStackTrace();
 }
}finally{
 try{
  ps.close();
 }catch(Exception e){
   e.printStackTrace();
 }
  try{
  conn.close();
 }catch(Exception e){
   e.printStackTrace();
 }
  
}



8. 数据库连接池

   池化技术:准备一些预先的资源,过来就连接预先准备好的。

    最小连接数

   最大连接数

   等待超时

   编写连接池,需要一个接口,DataSource

上一篇:JDBC理论笔记


下一篇:PreparedStatement 大数据查询