JDBC基础入门

 

目录

JDBC

(1)创建java工程 并把驱动引入到该工程  

 (2)解压该jar包

​ (3)编写代码

2、常见错误:

3、 jdbc----查询功能

4、如何防止sql注入


JDBC

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

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

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

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

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

 

 

 编写相关的代码

(1)创建java工程 并把驱动引入到该工程  

 

 (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);

2、常见错误:

1.Class---->别写为class

2、驱动jar包

  •  没有引入驱动jar包。
  • 没有解压驱动jar包

3、账号或密码错误

 4、没有再url后添加时区。

5、表不存在

6、sql语法有误

注:一上是经常出现的错误

3、 jdbc----查询功能

public static void findAll() throws Exception{
          Class.forName("com.mysql.cj.jdbc.Driver");
          Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名?serverTimezone=Asia/Shanghai","root","root");
          Statement st=connection.createStatement();
//          执行sql语句
          String sql="select * from 表名";
          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);
           }

    }

4、如何防止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/数据库名?serverTimezone=Asia/Shanghai","root","root");
        Statement st=connection.createStatement();
//          执行sql语句
        String sql="select * from 表名 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/数据库名?serverTimezone=Asia/Shanghai","root","root");
        String sql="select * from 表名 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);
        }

    }

获得更多学习资源点击此处A_M阿木的博客_CSDN博客-领域博主

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A_M阿木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值