JDBC

4 篇文章 0 订阅

JDBC
概念:
Java Database Connectivity Java 数据库连接,Java语言操作数据库
本质:使用同一套Java代码,操作所有关系型数据库。因此JDBC即定义了操作所有关系型数据库的规则(接口)。各数据库厂商实现这套接口,提供数据库驱动jar包。真正执行代码的是jar包的实现类。

步骤:
1.导入驱动jar包
2.注册驱动
3.获取数据库连接对象Connection
4.定义sql
5.获取执行sql语句的对象Statement
6.执行sql,接受返回结果
7.处理结果
8.释放资源


/*
	DriverManager:驱动管理对象
    功能:
        1.注册驱动:告诉程序该使用哪个数据库驱动jar包
            static void registerDriver(Driver driver):注册与给定驱动程序 DriverManager
            Class.forName("com.mysql.jdbc.Driver");
            源码中,com.mysql.jdbc.Driver类中存在静态代码块
            static {
            try{
                java.sql.DriverManager.registerDriver(new Driver());
                }catch(SQLException E)
                {
                    throw new RuntimeException("Can't register driver!")
                }
           }
         2.数据库连接
            static Connection getConnection(String url,String user,String password)
            url:指定连接路径:
            语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
            user:用户名
            password:密码;

      Connection:数据库连接对象
          1.功能:
                1.获取执行sql的对象
                  Statement createStatement()
                  PreparedStatement prepareStatement(String sql)
                2.管理事务:
                  开始事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务
                  提交事务:commit()
                  回滚事务:rollback()

      Statement :执行sql的对象
        1.执行sql
            boolean execute(String sql):可以执行任意sql
            int executeUpdate(String sql):执行DML()语句,DDL语句
            ResultSet executeQuery(String sql):执行DQL语句

      ResultSet:结果集,封装结果
      boolean next();游标向下移动一行,判断当前行是否是最后一行末尾,当游标返回false时,表示当前行末尾
      使用步骤:
        游标向下移动一行;
        判断是否有数据;
        获取数据
 */
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class JdbcDemo {
    public static void main(String[] args) throws Exception {
        //1.导入jar包
        //2.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //获取数据库连接对象
        Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/db4","root","root");
        //4.定义sql语句
        String sql="update stu set name='zhang' where id=1";
        //5.获取执行sql的对象
        Statement statement=connection.createStatement();
        //6.执行sql
        int count=statement.executeUpdate(sql);

        System.out.println(count);

        statement.close();
        connection.close();
    }
}

/*
		使用集合接受数据库中表
*/

   public static void main(String[] args) {
        List<emp>list=new JdbcDemo6().findAll();
        System.out.println(list);
    }

    public List<emp> findAll() {
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet=null;
        List<emp> empList = new ArrayList<>();

        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");
            statement = connection.createStatement();
            String sql = "SELECT * FROM emp";
            resultSet = statement.executeQuery(sql);
            emp emps =null;
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String ename = resultSet.getString("ename");
                int job_id = resultSet.getInt("job_id");
                int mgr = resultSet.getInt("mgr");
                Date joindate = resultSet.getDate("joindate");
                double salary = resultSet.getDouble("salary");
                double bouns = resultSet.getDouble("bonus");
                int dept_id = resultSet.getInt("dept_id");
                emps=new emp();
                emps.setId(id);
                emps.setEname(ename);
                emps.setJob_id(job_id);
                emps.setMgr(mgr);
                emps.setJoindate(joindate);
                emps.setSalary(salary);
                emps.setBonus(bouns);
                emps.setDept_id(dept_id);
                empList.add(emps);
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        finally {
            if(resultSet!=null)
            {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(statement!=null)
            {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(connection!=null)
            {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return empList;
    }

使用PreparedStatement对象解决sql注入问题:
sql注入:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接,会造成安全问题:如OR;

	1.导入驱动jar包
	2.注册驱动
	3.获取数据库连接对象Connection
	4.定义sql(sql的参数使用?作为占位符)
	5.获取执行sql语句的对象PreparedStatement Connection.prepareStatement(String sql)
	6.给sql赋值
	6.执行sql,接受返回结果,无sql参数
	7.处理结果
	8.释放资源

C3P0:数据库连接池技术
步骤:
1.导入jar包 c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar
2.定义配置文件
路径为:c3p0.properties 或者 c3p0-config.xml文件
3.创建核心对象:数据库连接池对象 CombopooledDataSource
4.获取连接:getConnection

Druid:数据库连接池技术 阿里巴巴提供
步骤:
1.导入jar包 druid-1.0.9.jar
2.定义配置文件:
properties形式
3.获取数据库连接池对象:DruidDataSourceFactory
4.获取连接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值