JDBC API的使用

您所在的位置:网站首页 加载数据库驱动类的代码 JDBC API的使用

JDBC API的使用

2023-07-11 01:25| 来源: 网络整理| 查看: 265

1.DriverManager(驱动管理类)         registerDriver() 注册驱动方法

        由于MySQL提供的Driver类已经执行了DriverMananger.registerDriver(new Driver());方法进行驱动注册,所以只需要加载Driver类就可以了.

        Class.forName("com.mysql.jdbc.Driver);//加载Driver类

        getConnection(); 链接数据库

DriverManager.getConnection(数据库链接路径,数据库用户名,密码);

        该方法的返回值为Connection对象.

2.Connection(数据库链接对象)         获取执行sql语句的对象 Connection connection = DriverManager.getConnection(url,userName,password); connection.createStatement();//返回一个Statement对象 connection.prepareStatement(String sql);//返回的是一个prepareStatement对象         事务管理

MySQL默认事务是自动提交的.手动提交需要先开启事务.即关闭MySQL的事务自动提交

connection.setAutoCommit(false);//开启事务

connection.commit();//提交事务 connection.rollback();//回滚事务

在Java中可以捕获异常,如果没有出现异常,则提交事务,否则进行事务回滚.通过手动提交事务,保持数据库中数据的一致.

3.Statement , PrepareStatement(执行sql的对象) Statement对象

执行DML语句(对数据库表中的数据进行增删改操作)时返回值是执行完DML语句后受影响的行数,可以通过此返回值来判断sql语句是否执行成功.

执行DDL语句(对数据库,数据表进行操作)时,返回值为int类型.但是一般不会使用Java代码去执行DDL语句.

Statement statement = connection.createStatement(); statement.executeUpdate(String sql);//执行sql

执行DQL(查询数据)语句时,返回值是一个Result(结果集对象)

Statement statement = connection.createStatement(); Result rs = statement.excuteQuery(String sql);执行sql         Result(结果集对象)

封装了DQL语句的查询结果.Result提供了一些方法,可以通过这些方法获取的我们想要的值

rs.next();//返回值为boolean型变量 判断当前行是否有数据.

rs.getXXX(String);

rs.getInt("想要获取的数据的列名");//获取int类型变量

rs.getString(String);//获取String型变量

rs.getDouble(String);//获取double型变量

....

PreparedStataement对象         对SQL语句进行预编译

Connection connection = DriverManager.getConnection(url,userName,password);

String sql = "select id , username , password from tb_user where username = ? and password = ? ";

//获取PreparedStatement对象

PreparedStatement ptmt = connection.prepareStatement(sql);//预编译SQL语句

ptmt.setString(int,String);//通过setXXX(int,String);对占位符?赋值,第一个参数表示?的位置,从1开始  第二个是该位置?的值, XXX传递的值得数据类型

//执行SQL

Result  rs  = ptmt.executeQuery();//此处不需要再传递sql语句了,在获取SQL执行对象PreparedStatement时已经对SQL语句进行预编译了,executeUpdate();也同理.

由于检查,编译sql语句耗时,而执行sql语句很快,所以通过对sql语句进行预编译后.执行同一个sql语句就不需要每次都对sql语句进行检测,编译了,提高代码运行效率.

        防止SQL注入

使用Statement对象执行sql时,参数传递是通过字符串的直接拼接进行的,容易导致一些安全问题.

String username =  "111";

String password = "' or '1' = '1";

String sql = "select id , username , password from tb_user where username = ' "+username+" ' and password =' "+password+" ' ";

//使用Statement对象执行sql

Statement statement = connection.createStatement();//没有对sql语句进行预编译,代码效率低

statement.executeQuery(sql);

这样执行的sql语句是 select * from tb_user where username = '111' and password = ''or  '1' = '1';

无论用户输入什么账号密码 1=1是永远成立的,即无论输入什么 都可以查询到tb_user中的值.

而使用PreparedStatement对象执行sql时,参数传递给?占位符之前会对敏感字符进行转义,防止通过一些特殊的sql语句,导致网站受到攻击.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3