当前位置: 首页 > news >正文

网站建设分工表上海线上引流推广

网站建设分工表,上海线上引流推广,在线制作效果图,网站php源码JDBC JDBC英文名为#xff1a;Java Data Base Connectivity(Java数据库连接)#xff0c;官方解释它是Java编程语言和广泛的数据库之间独立于数据库的连接标准的Java API 根本上说JDBC是一种规范#xff0c;它提供的接口#xff0c;一套完整的#xff0c;允许便捷式访问底…JDBC JDBC英文名为Java Data Base Connectivity(Java数据库连接)官方解释它是Java编程语言和广泛的数据库之间独立于数据库的连接标准的Java API 根本上说JDBC是一种规范它提供的接口一套完整的允许便捷式访问底层数据库。 不同的可执行文件都能通过JDBC访问数据库又兼备存储的优势。 它就是Java与数据库的连接的桥梁或者插件用Java代码就能操作数据库的增删改查、存储过程、事务等。 我们可以发现JDK自带了一个java.sql包而这里面就定义了大量的接口不同类型的数据库都可以通过实现此接口编写适用于自己数据库的实现类。而不同的数据库厂商实现的这套标准我们称为数据库驱动。 使用JDBC连接数据库 6.0版本以上不用手动加载驱动我们直接使用即可 DriverManager就是管理我们的数据库驱动的 //1. 通过DriverManager来获得数据库连接 try (Connection connection DriverManager.getConnection(连接URL,用户名,密码);//2. 创建一个用于执行SQL的Statement对象Statement statement connection.createStatement()){ //注意前两步都放在try()中因为在最后需要释放资源//3. 执行SQL语句并得到结果集ResultSet set statement.executeQuery(select * from 表名);//4. 查看结果while (set.next()){...} }catch (SQLException e){e.printStackTrace(); } //5. 释放资源try-with-resource语法会自动帮助我们close了解Connection Connection是数据库的连接对象可以通过连接对象来创建一个Statement用于执行SQL语句 Statement createStatement() throws SQLException;PreparedStatement能够有效地预防SQL注入式攻击 PreparedStatement prepareStatement(String sql)throws SQLException;了解Statement 使用了executeQuery()方法来执行select语句此方法返回给我们一个ResultSet对象查询得到的数据就存放在ResultSet中 Statement除了执行这样的DQL语句外我们还可以使用executeUpdate()方法来执行一个DML或是DDL语句它会返回一个int类型表示执行后受影响的行数可以通过它来判断DML语句是否执行成功 也可以通过excute()来执行任意的SQL语句它会返回一个boolean来表示执行结果是一个ResultSet还是一个int我们可以通过使用getResultSet()或是getUpdateCount()来获取 执行DQL操作 执行DQL操作会返回一个ResultSet对象我们来看看如何从ResultSet中去获取数据 //首先要明确select返回的数据类似于一个excel表格 while (set.next()){//每调用一次next()就会向下移动一行首次调用会移动到第一行 }移动行数后就可以通过set中提供的方法来获取每一列的数据。 执行批处理操作 要执行很多条语句时可以不用一次一次地提交而是一口气全部交给数据库处理这样会节省很多的时间。 public static void main(String[] args) throws ClassNotFoundException {try (Connection connection DriverManager.getConnection();Statement statement connection.createStatement()){statement.addBatch(insert into user values (f, 1234));statement.addBatch(insert into user values (e, 1234)); //添加每一条批处理语句statement.executeBatch(); //一起执行}catch (SQLException e){e.printStackTrace();} }将查询结果映射为对象 既然可以从数据库中获取数据了那么现在就可以将这些数据转换为一个类来进行操作 首先定义我们的实体类 public class Student {Integer sid;String name;String sex;public Student(Integer sid, String name, String sex) {this.sid sid;this.name name;this.sex sex;}public void say(){System.out.println(我叫name学号为sid我的性别是sex);} }进行一个转换列的下标是从1开始的 while (set.next()){Student student new Student(set.getInt(1), set.getString(2), set.getString(3));student.say(); }也可以利用反射机制来将查询结果映射为对象使用反射的好处是无论什么类型都可以通过我们的方法来进行实体类型映射 private static T T convert(ResultSet set, ClassT clazz){try {ConstructorT constructor clazz.getConstructor(clazz.getConstructors()[0].getParameterTypes()); //默认获取第一个构造方法Class?[] param constructor.getParameterTypes(); //获取参数列表Object[] object new Object[param.length]; //存放参数for (int i 0; i param.length; i) { //是从1开始的object[i] set.getObject(i1);if(object[i].getClass() ! param[i])throw new SQLException(错误的类型转换object[i].getClass() - param[i]);}return constructor.newInstance(object);} catch (ReflectiveOperationException | SQLException e) {e.printStackTrace();return null;} }while (set.next()){Student student convert(set, Student.class);if(student ! null) student.say(); }SQL注入攻击 模拟登陆一个用户 try (Connection connection DriverManager.getConnection(URL,用户名,密码);Statement statement connection.createStatement();Scanner scanner new Scanner(System.in)){ResultSet res statement.executeQuery(select * from user where usernamescanner.nextLine()and pwdscanner.nextLine(););while (res.next()){String username res.getString(1);System.out.println(username 登陆成功);} }catch (SQLException e){e.printStackTrace(); }如果我输入的是以下内容 Test 1111 or 11; -- # Test 登陆成功原本的SQL语句会变为 select * from user where usernameTest and pwd1111 or 11; -- 如果允许这样的数据插入那么我们原有的SQL语句结构就遭到了破坏使得用户能够随意登陆别人的账号。 因此我们可能需要限制用户的输入来防止用户输入一些SQL语句关键字但是关键字非常多这并不是解决问题的最好办法。 PreparedStatement 可以使用PreparedStatement来解决SQL注入攻击漏洞 public static void main(String[] args) throws ClassNotFoundException {try (Connection connection DriverManager.getConnection(URL,用户名,密码);PreparedStatement statement connection.prepareStatement(select * from user where username ? and pwd?;);Scanner scanner new Scanner(System.in)){statement.setString(1, scanner.nextLine());statement.setString(2, scanner.nextLine());System.out.println(statement); //打印查看一下最终执行的ResultSet res statement.executeQuery();while (res.next()){String username res.getString(1);System.out.println(username 登陆成功);}}catch (SQLException e){e.printStackTrace();} }要提前给到PreparedStatement一个SQL语句并且使用?作为占位符它会预编译一个SQL语句通过直接将我们的内容进行替换的方式来填写数据。 实际执行的SQL语句是什么 com.mysql.cj.jdbc.ClientPreparedStatement: select * from user where username Test and pwd123456 or 11; -- ;输入的参数一旦出现时会被变为转义形式\而最外层有一个真正的来将我们输入的内容进行包裹因此它能够有效地防止SQL注入攻击 管理事务 JDBC默认的事务处理行为是自动提交JDBC需要进行事务管理时首先要通过Connection对象调用setAutoCommit(false) 方法, 将SQL语句的提交commit由驱动程序转交给应用程序负责 一旦关闭自动提交那么现在执行所有的操作如果在最后不进行commit()来提交事务的话那么所有的操作都会丢失 也可以使用rollback()来手动回滚之前的全部操作 con.setAutoCommit(); //关闭自动提交后相当于开启事务。 // SQL语句 // SQL语句 // SQL语句 con.commit();或 con.rollback();public static void main(String[] args) throws ClassNotFoundException {try (Connection connection DriverManager.getConnection(URL,用户名,密码);Statement statement connection.createStatement()){connection.setAutoCommit(false); //关闭自动提交现在将变为我们手动提交statement.executeUpdate(insert into user values (a, 1234));statement.executeUpdate(insert into user values (b, 1234));statement.executeUpdate(insert into user values (c, 1234));connection.commit(); //如果前面任何操作出现异常将不会执行commit()之前的操作也就不会生效}catch (SQLException e){e.printStackTrace();} }创建一个回滚点来实现定点回滚 public static void main(String[] args) throws ClassNotFoundException {try (Connection connection DriverManager.getConnection(URL,用户名,密码);Statement statement connection.createStatement()){connection.setAutoCommit(false); //关闭自动提交现在将变为我们手动提交statement.executeUpdate(insert into user values (a, 1234));Savepoint savepoint connection.setSavepoint(); //创建回滚点statement.executeUpdate(insert into user values (b, 1234));connection.rollback(savepoint); //回滚到回滚点撤销前面全部操作statement.executeUpdate(insert into user values (c, 1234));connection.commit(); //提交事务注意回滚之前的内容都没了}catch (SQLException e){e.printStackTrace();} }
http://www.hkea.cn/news/14478038/

相关文章:

  • 网站建设衤金手指花总十五做外贸用什么软件找客户
  • 域名访问过程会不会影响网站访问四川仁厚建设集团有限公司
  • 设计素材网站线上网页设计报告2000字
  • 自己做网站费用北京大龙建设集团有限公司网站首页
  • 优化推广网站seo工业设计的就业前景和就业方向
  • 宁夏吴忠网站建设深圳互联网企业有哪些
  • 沈阳高端网站设计有学给宝宝做衣服的网站吗
  • 武进网站建设代理商html网页制作代码大全免费
  • 微山网站建设哪家好建网站云空间
  • 在dw里如何做网站自己建网站卖鞋
  • 成都网站开发技术wordpress 搜索没反应
  • 免费创建网站带咨询的wordpress符号
  • 建立网站的目的个人备案网站做企业网可以吗
  • 做网站用的国外节点服务器传奇网站模板psd
  • 哪里可以学做资料员的网站上海百度seo点击软件
  • 怎么做自动下单网站wordpress添加统计代码
  • 网站建设的提成wordpress插件连不上
  • 网站设计工作流程扒网站样式
  • 吴江seo网站优化软件想学淘宝美工去哪里学
  • 简洁大气的网站首页教学ppt模板免费下载完整版
  • 全国建设信息网站c2c网站支付方式
  • 北京北站如何在微信创建公众号
  • 关于做公司网站建设你应该知道的织梦本地做的网站内网访问不
  • 邢台做网站的那好建设部网站录入业绩
  • 开发区网站建设工作职责专业软件开发培训机构
  • 什么网站可以自学ps做贵宾卡wordpress 登录菜单
  • 好的html5网站模板下载应用市场
  • 网站开发市场人员的招聘大港手机网站建设
  • 域名做网站名职业培训机构需要什么资质
  • 固安建设局网站被通知公司网站域名到期