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

直播网站建设1个节点多少钱百度云网页版入口

直播网站建设1个节点多少钱,百度云网页版入口,政府部门如何建设网站,力杨网站建设二.JDBC知识点全面总结1:JDBC实战编写CRUD 1.JDBC重要接口? 2.Driver和DriverMangement的关系? 3.JAVA与数据库连接 4.JAVA中使用statement来执行sql语句时,拼接字符串的sql注入问题? 5.使用preparedstatement进行…

二.JDBC知识点全面总结1:JDBC实战编写CRUD

1.JDBC重要接口?

2.Driver和DriverMangement的关系?

3.JAVA与数据库连接

4.JAVA中使用statement来执行sql语句时,拼接字符串的sql注入问题?

5.使用preparedstatement进行增删改查

6.自定义通用查询方法

未更新

二.JDBC知识点全面总结1:JDBC实战编写CRUD

1.JDBC重要接口?

①装载驱动接口

  • Driver接口:对接MySQL提供的Driver具体实现类
  • DriverManager类:封装Driver实例。

②连接

  • Connetion接口:获取和MySQL服务器的连接
  • 获取connection实例的方式:
    driver.connect();
    DriverManger.getConnection();

③执行SQL语句

  • Statement类(执行静态SQL语句并接受返回结果)
    Statement类:SQL语句无参数
    PreparedStatement类继承Statement类:SQL语句有参数(防止sql注入)
  • 执行方法
    execute()运行无返回值
    executeQuery()运行select语句有返回集
    executeUpdate()运行Insert/delete/Update语句返回影响的行数

2.Driver和DriverManger的关系?

①对比

  • Driver是所有JDBC驱动类实现的接口
  • DriverMangement封装Driver

②使用

  • Driver创建驱动实例后直接获取连接
    driver.connect()
  • DriverMangement初始化(注册)Driver后直接获取连接
    DriverMangement.getConnetion

③实战使用

  • Class.forName()加载类而且执行静态代码快。数据库驱动(Driver)中有静态代码块即注册驱动到DriverMangement
  • 故实战可以使用DriverMangement,在加载驱动类后直接获取连接。

3.JAVA与数据库连接

①获取连接注意事项

  • properties的编写,注意直接连接的具体数据库
  • class.forName在加载驱动类时执行类中静态代码,已经从DriverMangement中注册(初始化)

②获取连接代码

  • mytest是具体数据库名称
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:13306/mytest?useUnicode=true&characterEncoding=utf8&useSSL=false
user=root
password=abc123
  • 注意我的mysql版本是5.7的
        <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.37</version></dependency>
package com.likejin;import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.util.Properties;public class MyTest2 {public static void main(String[] args) throws Exception {InputStream resourceAsStream = MyTest2.class.getClassLoader().getResourceAsStream("jdbc.properties");Properties properties = new Properties();properties.load(resourceAsStream);String driverClass = properties.getProperty("driverClass");String url = properties.getProperty("url");String user = properties.getProperty("user");String password = properties.getProperty("password");Class.forName(driverClass);Connection connection = DriverManager.getConnection(url, user, password);}
}

4.JAVA中使用statement来执行sql语句时,拼接字符串的sql注入问题?

①statement

  • 是通过获取连接之后利用其来执行sql语句
  • 原理:字符串拼接(由于数据必须通过’'来包含)

②sql注入问题

  • 实例场景:判断学生在数据库中是否有。
  • 代码
package com.likejin;import com.likejin.util.Utils;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;public class MyTest3 {public static void main(String[] args) throws Exception {Connection conn = Utils.getconn();Statement statement = conn.createStatement();Scanner scanner = new Scanner(System.in);System.out.println("请输入ID");String id =scanner.nextLine();System.out.println("请输入年龄");String age = scanner.nextLine();String sql = "select * from student where id = '"+ id + "' and age = '" +age+"'";System.out.println(sql);ResultSet resultSet = statement.executeQuery(sql);if(resultSet.next()){System.out.println("您找的学生在这个班级");}else{System.out.println("您找的学生不在这个班级");}}
}
  • 数据表
    在这里插入图片描述
  • 正常情况下
    在这里插入图片描述
    在这里插入图片描述
  • sql注入问题加上单引号
    在这里插入图片描述
  • sql注入 不加单引号
    在这里插入图片描述

5.使用preparedstatement进行增删改查

①preparedstatement的方法

  • setObject 来填充占位符
  • execute() 来执行增删改,返回boolean类型是否成功
  • executeQuery()来执行查,返回ResultSet结果集

②ResultSet的方法

  • next() 判断下一个是否存在,存在指正下移,返回true,不存在指正不动,返回false
  • getObject(i) 参数为行数据的第几列,返回的是某一行数据的某一列的具体数值
  • getMetaData()获取到ResultSetMetaData类型,该类型有方法:
    getColumnCount()返回具体列数
    getColumnName(i)返回某一列的名称

②注意事项

  • 注意数据库中列从第一列开始,而JAVA数据一般从0开始,故计算时注意+1。
  • 注意sql注入时参数也是从第一个开始的。
  • 注意封装类时需要设置属性为public,否则无法利用反射初始化值。
  • 注意如果要编写未知数据的查找(封装为该类的list),需要知道数据的类型:
    可以用泛型方法来传入封装的数据类型
    Class <T> clazz
    T t

②代码

package com.likejin.util;import com.likejin.MyTest2;
import com.likejin.Student;import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;public class Utils {public static Connection getconn() throws Exception {InputStream resourceAsStream = MyTest2.class.getClassLoader().getResourceAsStream("jdbc.properties");Properties properties = new Properties();properties.load(resourceAsStream);String driverClass = properties.getProperty("driverClass");String url = properties.getProperty("url");String user = properties.getProperty("user");String password = properties.getProperty("password");Class.forName(driverClass);Connection connection = DriverManager.getConnection(url, user, password);return connection;}//针对学生表的通用更新操作public static boolean updateData(String sql, Object... args) throws Exception {Connection conn = getconn();PreparedStatement preparedStatement = conn.prepareStatement(sql);for (int i = 0; i < args.length; i++) {preparedStatement.setObject(i + 1, args[i]);}boolean execute = preparedStatement.execute();preparedStatement.close();conn.close();return execute;}//针对学生表的通用查询操作(已知列数,已知对象,已知列名)public static List selectData(String sql, Object... args) throws Exception {Connection conn = getconn();PreparedStatement preparedStatement = conn.prepareStatement(sql);for (int i = 0; i < args.length; i++) {preparedStatement.setObject(i + 1, args[i]);}ResultSet resultSet = preparedStatement.executeQuery();ArrayList<Student> students = new ArrayList<>();int i = 0;while (resultSet.next()) {Student student = new Student();student.setId(resultSet.getInt(1));student.setAge(resultSet.getInt(2));student.setGrade(resultSet.getInt(3));i = i + 1;students.add(student);}return students;}//针对任何表的查询操作public static <T> List<T> selectData(Class<T> clazz,String sql, Object... args) throws Exception {Connection conn = getconn();PreparedStatement preparedStatement = conn.prepareStatement(sql);for (int i = 0; i < args.length; i++) {preparedStatement.setObject(i + 1, args[i]);}ArrayList<T> ts = new ArrayList<>();ResultSet resultSet = preparedStatement.executeQuery();ResultSetMetaData metaData = resultSet.getMetaData();int columnCount = metaData.getColumnCount();while(resultSet.next()){T t = clazz.newInstance();for(int i = 0;i<columnCount;i++){Field dd = clazz.getDeclaredField(metaData.getColumnName(i+1));dd.set(t,resultSet.getObject(i+1));}ts.add(t);}return ts;}
}

6.自定义通用查询方法

①缺点

  • 运行时类和类类型不同,无法在方法中就强转为需要的类类型。
    stuent.getClass() 或者Student.class都和 Student不同
  • 故如果想获得类类型,就需要运用泛型。
  • 举例说明
    如果想在传入方法中获取该类的类型如何获取?
    利用泛型 T t或者 Class<T> clazz都可获取类型为T
    利用Object o 获取不到类类型,最多获取运行时类的实例,故需要在获取方法的返回值后手动进行强转。
  • 对象获取到类类型的数据是什么?为什么不能强转?
    即最多获取到类类型字符串
    String typeName = o1.getClass().getTypeName();由于编译的限制,无法去利用字符串强转对象。

②代码

    //针对任何表的查询操作public static List selectData5(Object o,String sql, Object... args) throws Exception {//获取连接(拿到配置文件中的内容+注册driver+DriverMangement获取连接)InputStream resourceAsStream = Utils.class.getClassLoader().getResourceAsStream("jdbc.properties");Properties properties = new Properties();properties.load(resourceAsStream);final String url = properties.getProperty("url");String user = properties.getProperty("user");String password = properties.getProperty("password");Class.forName(properties.getProperty("driverClass"));Connection connection = DriverManager.getConnection(url, user, password);//连接的sql注入获取结果集PreparedStatement preparedStatement = connection.prepareStatement(sql);for(int i = 0;i<args.length;i++){preparedStatement.setObject(i+1,args[i]);}ResultSet resultSet = preparedStatement.executeQuery();//处理结果集利用反射获取结果的列表ResultSetMetaData metaData = resultSet.getMetaData();ArrayList arrayList = new ArrayList();int columnCount = metaData.getColumnCount();while(resultSet.next()){Object o1 = o.getClass().newInstance();for(int i =0;i<columnCount;i++){String columnName = metaData.getColumnName(i + 1);Field field = o1.getClass().getField(columnName);field.set(o1, resultSet.getObject(i+1));}//无法转换为目标对象的类//因为o.getClass获取的是运行时类的类型,而不是实际类类型//故实际使用时需要转换类型输出arrayList.add(o1);}return arrayList;}public static void main(String[] args) throws Exception {String sql = "select * from student where id<?" ;List students1 =null;List list = selectData5(new Student(), sql, 10);Iterator iterator = list.iterator();while(iterator.hasNext()){System.out.println((Student)iterator.next());}}

未更新

http://www.jinmujx.cn/news/108852.html

相关文章:

  • 手机网站做多宽苏州seo关键词优化方法
  • 响应式网站和不响应式百度信息流怎么做效果好
  • 北京外贸网站建设价格百度快照推广排名
  • 门户网站策划书seo优化推广工程师招聘
  • 有什么网站交互做的很好 知乎企业品牌策划
  • 画画外包网站成品app直播源码有什么用
  • 淄博网站制作制作seo短视频入口
  • 济南网站制作创意武汉网站竞价推广
  • 网站建设加盟培训单页网站模板
  • 优秀网站模板欣赏图片外链在线生成
  • 有谁帮做网站的推广赚钱app
  • 北京做校园的网站网络营销战略的内容
  • 商业网点建设开发中心网站软文推广营销服务平台
  • 给政府机关做网站的sem竞价托管
  • 广州网站建设网络推广今日国内新闻最新消息
  • 哪些网站适合做外贸网站推广百度推广二级代理商
  • wordpress图标方块驻马店百度seo
  • 党建网站源码免费可以营销的十大产品
  • 杭州优化网站公司网站制作网络公司
  • 给自己公司做个网站百度排名推广
  • 自建网站注册域名很有必要成都官网seo费用
  • 在建设局网站上怎么样总监解锁重庆seo小潘大神
  • 制作公司网站有哪些疫情最新数据
  • 淄博免费网站建设百度短链接在线生成
  • 龙岩做网站改版费用大型的营销型网站
  • 上海私人做网站企业营销网站制作
  • 贸易网站建设案例怎么查询最新网站
  • 做导航网站用什么cms网络营销环境的分析主要是
  • 设计师门户网站程序跨境电商有哪些平台
  • 移动端网站如何优化ai智能营销系统