美文网首页
18/1/22 java数据库管理之jdbc

18/1/22 java数据库管理之jdbc

作者: 金春国_Roy | 来源:发表于2018-01-22 21:44 被阅读0次

    JDBC概念和数据库驱动程序

    a:JDBC概述
    *JDBC(Java Data Base Connectivity java数据库连接)是一种用于执行SQL语句的Java api.
    可以为多种多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是Java访问数据的标准规范。
    总结:a.JDBC是java提供给开发人员的一套操作数据库的接口。b.数据库驱动就是实现该接口的实现类。

    • java.util.date转换成java.sql.date。
     //java.util.date--->java.sql.date
            Date date = sort.getSdate();
            //得到date对应的时间戳
            long timestamp = date.getTime();
            //通过时间戳创建java.sql.Date类型的对象
            java.sql.Date sqlDate = new java.sql.Date(timestamp);
            preparedStatement.setDate(4,sqlDate);
    

    JDBC的开发步骤

    • A: JDBC的开发步骤
      • a: 步骤介绍
        1.注册驱动
        告知JVM使用的是哪一个数据库的驱动
        2.获得连接
        使用JDBC中的类,完成对MySQL数据库的连接
        3.获得语句执行平台
        通过连接对象获取对SQL语句的执行者对象
        4.执行sql语句
        使用执行者对象,向数据库执行SQL语句
        获取到数据库的执行后的结果
        5.处理结果
        6.释放资源 一堆close()

    导入mysql数据库驱动程序jar包

    导入mysql数据库驱动程序jar包。
    

    执行insert语句获取结果集

    注册数据库驱动程序
    package com.company;
    
    import java.sql.*;
    
    /**
     * Created by ttc on 18-1-22.
     */
    public class JDBCDemo {
        public static void main(String[] args) throws ClassNotFoundException, SQLException {
    //       1.注册数据库驱动程序
            Class.forName("com.mysql.jdbc.Driver");
    //        2.获取数据库的连接对象
            String url="jdbc:mysql://localhost:3306/mybase";
            String username ="root";
            String password ="root";
            Connection connection = DriverManager.getConnection(url,username,password);
    //        3.获取SQL语句的执行对象
            Statement statement = connection.createStatement();
    //        4.执行SQL语句
            String str = "INSERT INTO sort(sname,sprice,sdesc) VALUES('汽车用品',50000,'疯狂涨价')"
            int row =statement.executeUpdate(str);
    //        5.释放资源 一堆close()
            statement.cancel();
            connection.close();
        }
    }
    

    执行select语句获取结果集

    import java.util.Collections;
    
    /**
     * Created by ttc on 18-1-22.
     */
    public class JDBC1Demo {
        public static void main(String[] args) throws ClassNotFoundException, SQLException {
            Class.forName("com.mysql.jdbc.Driver");
            String url ="jdbc:mysql://localhost:3306/mybase";
            String username ="root";
            String password ="root";
            Connection connection = DriverManager.getConnection(url,username,password);
            Statement statement =connection.createStatement();
            String str = "select* from sort";
            ResultSet resultSet = statement.executeQuery(str);
            while (resultSet.next()== true){
                System.out.println(resultSet.getInt("sid")+resultSet.getString("sname")
                +resultSet.getDouble("sprice")+resultSet.getString("sdesc"));
            }
            resultSet.close();
            statement.cancel();
            connection.close();
        }
    }
    
    
    • 查询与增删改相比多了获取一个结果集的步骤:
      ResultSet resultSet = statement.executeQuery(str);
      result.next();

    SQL注入攻击

    ResultSet rs = stat.executeQuery(sql);
                    while(rs.next()){
                        System.out.println(rs.getString("username")+"   "+rs.getString("password"));
                    }
    会产生SQL注入攻击,因此通常不采用这种方法
    
    //执行SQL语句,数据表,查询用户名和密码,如果存在,登录成功,不存在登录失败 
    String sql = "SELECT * FROM users WHERE username=? AND PASSWORD=?";
     //调用Connection接口的方法prepareStatement,获取PrepareStatement接口的实现类
    //方法中参数,SQL语句中的参数全部采用问号占位符
    PreparedStatement pst =  con.prepareStatement(sql);
    
    

    a.PreparedStatement接口添加了处理 IN 参数的方法;
    b.PreparedStatement:
    可变参数的SQL,编译一次,执行多次,效率高;
    安全性好,有效防止Sql注入等问题;
    支持批量更新,批量删除;

    JDBC的工具类和测试

    package com.company;
    
    import java.sql.*;
    
    /**
     * Created by ttc on 18-1-22.
     */
    public class JDBCUtils {
    //    与SQL数据库建立连接
        private  static Connection connection;
        static{
            try{
                Class.forName("com.mysql.jdbc.Driver");
                String url = "jdbc:mysql://localhost:3306/mybase";
                String username="root";
                String password="root";
                connection = DriverManager.getConnection(url, username, password);
            }catch(Exception ex){
                throw new RuntimeException(ex+"数据库连接失败");
            }
        }
    
    
    //    定义静态方法,返回数据库的连接对象
        public static Connection getConnection(){
            return  connection;
        }
    //    关闭流
        public static void close(Connection connection, Statement statement){
          if (statement!=null){
              try {
                  statement.cancel();
              } catch (SQLException e) {
                  e.printStackTrace();
              }
          }
            if (connection != null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        public static void close(ResultSet connection, Statement statement, Connection resultSet){
            if (resultSet!=null){
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (statement!=null){
                try {
                    statement.cancel();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                }
            if (connection != null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    //测试类
        public static void main(String[] args) throws SQLException {
            Connection connection = JDBCUtils.getConnection();
            String str ="select* from sort";
            PreparedStatement preparedStatement = connection.prepareStatement(str);
            ResultSet resultSet =preparedStatement.executeQuery();
            while (resultSet.next()==true){
                System.out.println(resultSet.getString("sname"));
            }
            JDBCUtils.close(resultSet,preparedStatement,connection);
        }
    }
    
    

    相关文章

      网友评论

          本文标题:18/1/22 java数据库管理之jdbc

          本文链接:https://www.haomeiwen.com/subject/acolaxtx.html