JDBC连接数据库和基本操作

时间:2022-01-29 13:30:24

       介绍:

          DBC(Java Data Base Connectivity,java数据库连接),由一些接口和类构成的API。
          J2SE的一部分,由java.sql,javax.sql包组成


        应用程序、JDBC API、数据库驱动及数据库之间的关系

   JDBC连接数据库和基本操作

       连接数据的步骤

        注册驱动 (只做一次)

        建立连接(Connection) 
        创建执行SQL的语句(Statement)
        执行语句
        处理执行结果(ResultSet)
        释放资源

       前提引入 驱动jar包

       JDBC连接数据库和基本操作

       1、 注册驱动 (项目中只做一次)

        Class.forName(“com.mysql.jdbc.Driver”);
推荐这种方式,不会对具体的驱动类产生依赖。
         DriverManager.registerDriver(com.mysql.jdbc.Driver);
会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。
        System.setProperty(“jdbc.drivers”, “driver1:driver2”);
虽然不会对具体的驱动类产生依赖;但注册不太方便,所以很少使用。 
         驱动类型(四种类型)

         2、建立连接(Connection)

     Connection conn = DriverManager.getConnection(url, user, password);
      url格式:JDBC:子协议:子名称//主机名:端口/数据库名?属性名=属性值&…

           User,password可以用“属性名=属性值”方式告诉数据库;
            其他参数如:useUnicode=true&characterEncoding=GBK。

       3、创建执行SQL的语句(Statement)

            3.1 Statement   普通
         Statement st = conn.createStatement();
         st.executeQuery(sql);
           3.2PreparedStatement   带过滤防止sql注入
        String sql = “select * from table_name where col_name=?”;
        PreparedStatement ps = conn.preparedStatement(sql);
        ps.setString(1, “col_value”);//添加参数
        ps.executeQuery();

          PreperedStatement(从Statement扩展而来)相对Statement的优点
1.没有SQL注入的问题。
2.Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。
3.数据库和驱动可以对PreperedStatement进行优化(只有在相关联的数据库连接没有关闭的情况下有效)。

       4、处理执行结果(ResultSet)

             ResultSet rs = statement.executeQuery(sql);
            While(rs.next()){
       rs.getString(“col_name”);
       rs.getInt(“col_name”);
        //…
             }

       5、释放资源

              释放ResultSet, Statement,Connection.
              数据库连接(Connection)是非常稀有的资源,用完后必须马上释放,如果Connection不能及时正确的关闭将导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。

         CRUD(增、删、查、改)

              增、删、改用Statement.executeUpdate来完成,返回整数(匹配的记录数),这类操作相对简单。
           查询用Statement.executeQuery来完成,返回的是ResultSet对象,ResultSet中包含了查询的结果;查询相对与增、删、改要复杂一些,因为有查询结果要处理。