JDBC ----java数据库链接

14 篇文章 0 订阅

jdbc:(java database connection) java数据库连接。

思考: java是什么语言: 面向对象的语言

​ SQL是什么语言:结构化查询语言。

-----------------------------java语言和SQL语言进行沟通--------------------------------------------

解决方案:---------------翻译。

 

1. 编写相关的代码

1.1创建java工程 并把驱动引入到该工程

1. 2.解压该jar包

 3.编写代码

(1)加载驱动
   Class.forName("com.mysql.cj.jdbc.Driver"); 
   
(2)获取连接对象
    String url="jdbc:mysql://ip:port/数据库名?serverTimezone=Asia/Shanghai";
    String user="root"
    String password="密码"
    Connection connection=DriverManager.getConnection(url,user,password);
(3)获取执行sql语句的对象
    Statement st=connection.createStatement();
 
 (4)执行sql语句 增删改
    st.executeUpdate(sql);

常见错误:

Class---->别写为class

没有引入驱动jar包。

没有解压驱动jar包

账号或密码错误

  没有再url后添加时区。

 主键唯一

 表不存在

 sql语法有误

 2.jdbc----查询功能

public static void findAll() throws Exception{
          Class.forName("com.mysql.cj.jdbc.Driver");
          Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/ssm?serverTimezone=Asia/Shanghai","root","root");
          Statement st=connection.createStatement();
//          执行sql语句
          String sql="select * from tbl_dept";
          ResultSet set=st.executeQuery(sql); //执行查询sql语句 并把查询的结果封装到ResultSet容器中

           //遍历出来
           while(set.next()){ //指针向下移动并且判断当前行是否有记录 有:true  无:false
                int deptId=set.getInt("deptId");//获取当前行中指定列的值
                String deptName= set.getString("deptName");
                System.out.println(deptId+"============="+deptName);
           }

    }

3. 如何防止sql注入

sql注入: sql中存在特殊字符时 则sql会按照特殊字符来解析。

sql注入的演示:

    public static void main(String[] args)throws Exception {
        findByName("asdasdsadas' or '1'='1");
    }

    public static void findByName(String name) throws Exception{
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/ssm?serverTimezone=Asia/Shanghai","root","root");
        Statement st=connection.createStatement();
//          执行sql语句
        String sql="select * from tbl_dept where deptName='"+name+"'";
        System.out.println(sql);
        ResultSet set=st.executeQuery(sql); //执行查询sql语句 并把查询的结果封装到ResultSet容器中
        //遍历出来
        while(set.next()){ //指针向下移动并且判断当前行是否有记录 有:true  无:false
            int deptId=set.getInt("deptId");//获取当前行中指定列的值
            String deptName= set.getString("deptName");
            System.out.println(deptId+"============="+deptName);
        }

    }

 

因为Statement类导致了sql注入的危险!

如何解决:-----演变出一个Statement的子类----->PreparedStatement[重写相应的方法]

public static void findByName2(String name) throws Exception{
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/ssm?serverTimezone=Asia/Shanghai","root","root");
        String sql="select * from tbl_dept where deptName=?"; //占位符
        PreparedStatement ps=connection.prepareStatement(sql);//预编译sql
        //为占位符赋值parameterIndex:占位符的索引   占位符的内容
        ps.setString(1,name);
//          执行sql语句
        System.out.println(sql);
        ResultSet set=ps.executeQuery(); //执行查询sql语句 并把查询的结果封装到ResultSet容器中
        //遍历出来
        while(set.next()){ //指针向下移动并且判断当前行是否有记录 有:true  无:false
            int deptId=set.getInt("deptId");//获取当前行中指定列的值
            String deptName= set.getString("deptName");
            System.out.println(deptId+"============="+deptName);
        }

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值