JDBC学习

JDBC

注意:
部分代码存在乱码问题,直接复制会出现错误!
大二小白一枚,初学java,有任何问题和建议欢迎指教

jdbc配置四大参数:

driverClassName: com.mysql.jdbc.Driver

url: jdbc:mysql://localhost::3306/数据库名

username: root

password: ***********

对数据库的增,删,改

1.通过connection 对象创建statement(向数据库发送sql语句的发送器)

2.调用它的int executeUpdate(String sql),它可以发送DML,DDL (返回对数据库几行有影响)

3.关闭资源(倒着关)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class main {
    public static void main(String arg[]) throws ClassNotFoundException, SQLException {

        //数据库四件套
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url="jdbc:mysql://localhost:3306/mouse";
        String username="root";
        String password="111111";
        Connection con= DriverManager.getConnection(url,username,password);// System.out.println(con);

        //获取statement对象
        Statement sta=con.createStatement();
        //使用statement发送sql语句
        String sql="INSERT INTO student VALUES('204361111','mouse','男',18,'信息学院')";
        int m=sta.executeUpdate(sql);
        System.out.println(m);
        
        //关闭资源
        sta.close();
        con.close();
     }
}

查询:

1.通过connection 对象创建statement(向数据库发送sql语句的发送器)

2.调用ResultSet rs=executeQuery(String querysql)

3.解析resultset 该方法自带一个行光标 默认指向beforefirst 需要调用next()语句将行光标往下

4.关闭资源(倒着关)

import java.sql.*;

public class main {
    public static void main(String arg[]) throws ClassNotFoundException, SQLException {

        //数据库四件套
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url="jdbc:mysql://localhost:3306/mouse";
        String username="root";
        String password="111111";
        Connection con= DriverManager.getConnection(url,username,password);// System.out.println(con);

        //获取statement对象
        Statement sta=con.createStatement();

        //查询
        ResultSet rs=sta.executeQuery("select *from student");
        //解析resultset
        //调用next方法把光标使光标移动
        if(rs.next()){
            String x=rs.getString("xuehao");
            String n=rs.getString("name");
            String s=rs.getString("sex");
            int a=rs.getInt("age");
            String d=rs.getString("sdept");
            System.out.println(x+" "+n+" "+s+" "+a+" "+d);
        }
        rs.close();
        sta.close();
        con.close();
     }
}

规范化:

在try外定义对象,在try内获取实例化对象,在finally中关闭对象(防止发生异常后执行不到关闭资源的语句)

ResultSet结果集光标挪动:

在这里插入图片描述
在这里插入图片描述

获取结果集元数据:

  • 得到元数据:rs.getMetaData(),返回值为ResultSetMetaData;
  • 获取结果集列数:int getColumnCount();
  • 获取指定列的列名: String getColumnName(int collindex)

preparestatement

在进行con获取时,url为url=“jdbc:mysql://localhost:3306/数据库名称?useServerPrepStmts=true&cachePrepStmts=true”;(?)

来打开mysql的预编译功能(mysql默认关闭预编译功能)

  • 是statement的子接口
  • 可以防止SQL攻击
  • 提高代码的可读性,可维护性
  • 提高效率

使用前提:

  • 连接的数据区必须支持预处理
  • 每个pstmt都与一个sql模板绑定在一起,先把sql给数据库,数据库先进行效验,再进行编译。执行时只是把参数传递过去,若二次执行时就不用再校验语法,也不用再次编译,直接执行,从而提高效率。

书写例子(用户登录防止SQL攻击查询):

String sql="select *from user where username=? and password=?";
PreparedStatement pstm=con.prepareStatement(sql);
//为参数(?)赋值
pstm.setString(1,username);//第一个参数为第几个括号
pstm.setString(2,password);

ResultSet rs=pstm.executeQuery();

批处理:

mysql默认关闭批处理,在url中加入?rewriteBatchenStatements=true打开

当需要向数据库发送的指令过多时,为了提高效率,可以使用批处理,即一批一批的处理需要发送的指令

String sql="select *from user where username=? and password=?";
PreparedStatement pstm=con.prepareStatement(sql);
for(int i=0;i<=10000;i++){
    pstm.setString(1,"user"+i);
    pstm.setString(2,"1234"+i);
    pstm.addBatch();           //添加批
}
pstm.executeBatch();           //执行批

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值