2021-03-06

JDBC
一、statemnet  
会存在sql注入问题
会涉及到安全问题,一般情况下不会使用
除非一些需要sql注入的业务
第一步 建立驱动  运用反射机制加载
 Class.forName("com.mysql.cj.jdbc.Driver");//不同的mysql版本对应括号的内容的不相同
 //该驱动只需要加载一次,在Java测试代码中,我们可以加@Before注解,让它执行在所有test代码之前


第二步 建立连接
 Connection connection = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/wyp",
                    "root",    //mysql账号
                    "12345678" //mysql密码
);
此时建立java 到数据库的连接,连接的通道已经打开了
第三步 执行sql语句 //此处statement preparestatement不太一样
prepare代表预先的意思
statemen对象用于Java向mysql发送一个sql
当然,我们应该先创建一个statemnet对象
 Statement statement = connection.createStatement();
 insert例子
   String sql="INSERT INTO t_jdbc(name,password) VALUE ('nmsl','wsnd')";
   //在字符串中拼接字符串要加单引号
int rows=statement.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);//rows代表修改的条数
//Statement.RETURN_GENERATED_KEYS,加这个的原因,是要返回一个自增长的primary key,必须自增长,不然无效
此时sql已经成功执行,当然你的sql必须正确
那么为了验证Statement.RETURN_GENERATED_KEYS
我们可以获得查询结果集来看看
 //4.处理结果集
//            if (rows>0){
//                ResultSet rs = statement.getGeneratedKeys();//因为dml语句很少使用查询结果集,我们就采用获取主键的方法
//                while(rs.next()){
//                    Integer id =rs.getInt(1);  //这个1代表的是第一个字段的意思
//
//                }
select 例子
String sql = "SELECT id, name, password FROM t_jdbc";
ResultSet rs = statement.executeQuery(sql);

while (rs.next()) {//4.处理结果集
                Integer id =rs.getInt(1);//代表第一个字段,代表的sql select后面的顺序
                String name=rs.getString("name");//代表name字段
                String password=rs.getString("password");//password
                System.out.println("id="+id+",name="+name+",password="+password);
            }

5.关闭资源
先开的后关
So,firstly,we close rs,secondly,we close statement,finally,we close connection.
//jdk 1.7之后 try(){}  当在括号里面打开资源的时候,可以不用关闭,因为他实现的接口中有自动关闭资源的方法

二、prepareStatement
使用的比较多,效率高,安全性高
String sql = "SELECT id, name, password FROM t_jdbc WHERE id=?";//?代表占位符
PreparedStatement ps = connection.prepareStatement(sql);//预先准备,创建的时候就会传入sql
      ps.setInt(1,1);//1代表第一个?,后面的1代表值
               rs = ps.executeQuery();//得到结果集
            while (rs.next()) {//4.处理结果集
                String name=rs.getString("name");//获取name字段
                String password= rs.getString("password");
                System.out.println("name="+name+",password="+password);
            }
        其他相同
        //insert 
        ResultSet rs =null;

        String sql = "INSERT INTO t_jdbc(name,password) VALUES(?,?),(?,?) ";//?代表占位符
        try (Connection connection = DriverManager.getConnection( //2.建立连接  实现了closeable接口可以关闭
                "jdbc:mysql://127.0.0.1:3306/wyp",
                "root",
                "12345678"
        );
             PreparedStatement ps = connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);//预先准备此处跟statement不同
        ) {         //pre预处理 创建连接的时候加入sql语句                     //Statement.RETURN_GENERATED_KEYS增长id,不是自增的还获取不到
            ps.setString(1,"好的");//1代表第一个问好 set后面类型要一致
            ps.setString(2,"hello");//2代表第二个问号
            ps.setString(3,"hello");
            ps.setString(4,"world");
            int rows = ps.executeUpdate();//执行sql语句
            System.out.println(rows);
            if (rows>0){
                rs = ps.getGeneratedKeys();//得到结果集
                while (rs.next()) {//4.处理结果集
                    Integer id =rs.getInt(1);
                    System.out.println("id="+id);
                }
            }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值