JDBC API的使用 |
您所在的位置:网站首页 › 加载数据库驱动类的代码 › JDBC API的使用 |
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 |