家装设计效果图网站如何对网站进行维护

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

家装设计效果图网站,如何对网站进行维护,php英文网站源码,汇源企业网络营销策划目录 1. JDBC原理

  1. 导入JDBC驱动包
  2. 编写JDBC代码实现Insert 3.1 创建并初始化一个数据源 3.2 和数据库服务器建立连接 3.3 构造SQL语句 3.4 执行SQL语句 3.5 释放必要的资源
  3. JDBC代码的优化 4.1 从控制台输入 4.2 避免SQL注入的SQL语句
  4. 编写JDBC代码实现…目录 1. JDBC原理
  5. 导入JDBC驱动包
  6. 编写JDBC代码实现Insert 3.1 创建并初始化一个数据源 3.2 和数据库服务器建立连接 3.3 构造SQL语句 3.4 执行SQL语句 3.5 释放必要的资源
  7. JDBC代码的优化 4.1 从控制台输入 4.2 避免SQL注入的SQL语句
  8. 编写JDBC代码实现Select 1. JDBC原理
  9. 各种数据库如MySQL、Oracle、SQLServer等在开始时会提供一组编程接口API API即application programming interface即代码层次上的提供的功能API往往是通过函数或类的形式来提供的。
  10. 不同的数据库系统的API是不同的JDBC就是统一Java与数据库连接的一套规范的API 3.Java程序员如果想要进行数据库开发就需要在项目中导入对应数据库的驱动包才能编写代码。
  11. 驱动包是数据库厂商提供的此处以MySQL为例获取方式有 1从MySQL官网获取现为Oracle官网的一个子网 2github 3maven中央仓库 注中央仓库可以理解为一个服务器托管了各种软件程序包maven就类似于应用商店通过应用商店就可以访问到应用程序包并进行下载
  12. 导入JDBC驱动包 3. 编写JDBC代码实现Insert import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException;public class JDBCInsert {public static void main(String[] args) throws SQLException {// 1. 创建并初始化一个数据源DataSource dataSource new MysqlDataSource();// 把dataSource对象转为MysqlDataSource类型// setUrl是MysqlDataSource类的方法要调用需先将对象转为MysqlDataSource类型((MysqlDataSource)dataSource).setUrl(jdbc:mysql://127.0.0.1:3306/JDBCProgram?characterEncodingutf8useSSLfalse);((MysqlDataSource)dataSource).setUser(root);((MysqlDataSource)dataSource).setPassword(xxxxx);// 2. 和数据库服务器建立连接Connection connection dataSource.getConnection();// 3. 构造 SQL 语句String sql insert into student values(1, Mike);// 使用PreparedStatement对sql语句进行预编译PreparedStatement statement connection.prepareStatement(sql);// 4. 执行 SQL 语句int ret statement.executeUpdate();System.out.println(ret ret);// 5. 释放必要的资源statement.close();connection.close();} } 运行代码在idea控制台有 并在MySQL中查看Student表结果 mysql select* from student; ———— | id | name | ———— | 1 | Mike | ———— 1 row in set (0.00 sec) 编写JDBC代码需要以下五个步骤 3.1 创建并初始化一个数据源 1数据源即数据的源头此处数据来源于数据库即此处要描述数据库服务器在哪里 数据库中使用DataSourse接口进行描述 2在创建并初始化一个数据源也可以无需向上转型向下转型直接使用MysqlDataSource MysqlDataSource dataSource new MysqlDataSource(); 但这种写法后续会使得MysqlDataSource类名扩散到代码其他地方 向上转型向下转型的写法可以使MysqlDataSource类名不会扩散到代码的其他地方后续如果需要修改数据库为别的数据库代码改动比较小即mysql与程序之间的耦合较低 二种方式均可使用 3URL即唯一资源定位符用于描述网络上某个资源所在的位置此处设置为 ((MysqlDataSource)dataSource).setUrl(jdbc:mysql://127.0.0.1:3306/JDBCProgram?characterEncodingutf8useSSLfalse); ① jdbc:mysql表示此url用于给jdbc操作mysql数据库使用的如果使用其他数据库如Oracle则写为jdbc:oracle ② 127.0.0.1为本地回环地址表示本主机 ③ 3306为数据库服务器默认端口号标记某一主机上的进程 ④ JDBCProgram为数据库名自行创建 ⑤ 在URL中表示访问资源时需要的参数 ⑥ characterEncodingutf8useSSLfalse分别表示字符集为utf8和不加密SSL是一个加密协议此处设置为false表示不加密 3除设置URL之外还需设置User和Passward才能访问数据库服务器用户名默认为root这是mysql默认自带的用户密码为安装数据库时的密码 4经过第一步后只是描述了数据库的位置与用户名、密码等还没有进行连接 3.2 和数据库服务器建立连接 1使用getConnection方法与数据库服务器建立连接并用Connection类型的变量来接受返回值注意选择第一个jdbc的Connection 2如果getConnection方法正常运行则连接建立成功如果连接建立失败会直接抛异常 执行SQL或操作数据库中出现问题一般都会抛出SQLException异常 3注意区别连接Connection与链接Link 连接进行网络通信双方的抽象关系 链接快捷方式 3.3 构造SQL语句 基于以下数据库与数据表 mysql use jdbcprogram Database changed mysql show tables; ———————– | Tables_in_jdbcprogram | ———————– | student | ———————– 1 row in set (0.00 sec)mysql desc student; ———————————————– | Field | Type | Null | Key | Default | Extra | ———————————————– | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | ———————————————– 2 rows in set (0.00 sec) 1构造的SQL语句与在MySQL中构造的规定相同 2如果请求是个SQL字符串服务器是可以处理的。服务器就需要对SQL进行解析。 客户端数目庞大时会导致服务器压力很大故而在客户端使用PreparedStatement对SQL语句进行预编译对SQL语句进行解析检查解析完毕后把结构化数据发给数据库服务器就可以减轻服务器的压力 3.4 执行SQL语句 1注意SQL语句的insert、delete和update操作都是使用executeUpdate方法进行执行的返回值是int类型数据表示影响的行数 2select操作使用的是executeQuery方法 3.5 释放必要的资源 1数据库的客户端与服务器进行通信时会消耗一定的系统资源如CPU、内存、硬盘、带宽等等。为了防止服务器同时处理多个客户端造成系统资源受限当客户端不使用服务器时就对资源进行释放 2语句与连接均需要释放需要先释放语句再释放连接。 释放的顺序与创建的顺序是相反的。 3除Datsource之外还有一种DriverManager的写法这种写法是通过反射的方式加载驱动包中的类进一步进行后续操作的。 但并不建议使用这种写法反射属于java开发的特殊手段其代码可读性非常差编译期难以对代码的正确性进行检查容易产生运行时异常建议不到万不得已不要使用反射 并且DataSource内置了数据库连接池可以复用连接提高连接服务器的效率
  13. JDBC代码的优化 对于上文的JDBC代码要插入的数据是硬编码但是让用户编码是不现实的故而需要将数据通过其他方式供用户输入。 4.1 从控制台输入 import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Scanner;public class JDBCInsert {public static void main(String[] args) throws SQLException {Scanner scanner new Scanner(System.in);// 1. 创建并初始化一个数据源DataSource dataSource new MysqlDataSource();((MysqlDataSource)dataSource).setUrl(jdbc:mysql://127.0.0.1:3306/JDBCProgram?characterEncodingutf8useSSLfalse);((MysqlDataSource)dataSource).setUser(root);((MysqlDataSource)dataSource).setPassword(xxxxx);// 2. 和数据库服务器建立连接Connection connection dataSource.getConnection();// 3. 从控制台读取用户输入的内容System.out.println(请输入学生姓名);String name scanner.next();System.out.println(请输入学生学号);int id scanner.nextInt();// 4. 构造 SQL 语句String sql insert into student values( id , name );// 预编译PreparedStatement statement connection.prepareStatement(sql);// 5. 执行 SQL 语句int ret statement.executeUpdate();System.out.println(ret ret);// 6. 释放必要的资源statement.close();connection.close();} }运行代码在控制台输入一下信息  在mysql中查看Student表 mysql select* from student; ———— | id | name | ———— | 1 | Mike | | 2 | Mary | ———— 2 rows in set (0.00 sec) 4.2 避免SQL注入的SQL语句 在上例代码中构造的SQL语句为 String sql insert into student values( id , name ); 如果用户输入的name形如王五);select* from **导致看似一条SQL语句变为多个语句就会出现SQL注入问题如果再携带drop database之类的语句可能会对系统造成更大的伤害。 针对以上问题可以借助PreparedStatement的拼装功能实现 import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Scanner;public class JDBCInsert {public static void main(String[] args) throws SQLException {Scanner scanner new Scanner(System.in);// 1. 创建并初始化一个数据源DataSource dataSource new MysqlDataSource();// 把dataSource对象转为MysqlDataSource类型// setUrl是MysqlDataSource类的方法要调用需先将对象转为MysqlDataSource类型((MysqlDataSource)dataSource).setUrl(jdbc:mysql://127.0.0.1:3306/JDBCProgram?characterEncodingutf8useSSLfalse);((MysqlDataSource)dataSource).setUser(root);((MysqlDataSource)dataSource).setPassword(xxxxx);// 2. 和数据库服务器建立连接Connection connection dataSource.getConnection();// 3. 从控制台读取用户输入的内容System.out.println(请输入学生姓名);String name scanner.next();System.out.println(请输入学生学号);int id scanner.nextInt();// 4. 构造 SQL 语句String sql insert into student values(?, ?);// 使用PreparedStatement对sql语句进行预编译PreparedStatement statement connection.prepareStatement(sql);statement.setInt(1, id);statement.setString(2, name);// 打印statement需在拼接数据之后System.out.println(statement);// 5. 执行 SQL 语句int ret statement.executeUpdate();System.out.println(ret ret);// 6. 释放必要的资源statement.close();connection.close();} } 输入学生姓名与学号后控制台输出结果如下 在mysql中查看Student表 mysql select from student; ———— | id | name | ———— | 1 | Mike | | 2 | Mary | | 3 | John | ———— 3 rows in set (0.00 sec) 注1构造的SQL语句中的2个?是两个占位符statement.setInt与statement.setString方法就可以把占位符替换为指定的值 statement.setInt(1, id);statement.setString(2, name); 两个参数第一个数字表示对应的问号的序号从1开始计数 分别表示将第一个占位符替换为id的值第二个占位符替换为name的值当用户输入给id和name赋值后就会通过该方法自动替换 2可以使用打印statement的方法查看具体拼接情况需将该语句置于拼接数据之后 假如代码执行出错了也可以把statement打印出来查看具体语法是否出错
  14. 编写JDBC代码实现Select import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;public class JDBCSelect {public static void main(String[] args) throws SQLException {// 1. 创建并初始化数据源DataSource dataSource new MysqlDataSource();((MysqlDataSource)dataSource).setUrl(jdbc:mysql://127.0.0.1:3306/JDBCProgram?characterEncodingutf8useSSLfalse);((MysqlDataSource)dataSource).setUser(root);((MysqlDataSource)dataSource).setPassword(xxxxx);// 2. 建立连接Connection connection dataSource.getConnection();// 3. 构造SQL语句String sql select* from Student;PreparedStatement statement connection.prepareStatement(sql);// 4. 执行SQL语句ResultSet resultSet statement.executeQuery();// 5. 遍历结果集合while(resultSet.next()){int id resultSet.getInt(id);String name resultSet.getString(name);System.out.println(id id , name name);}// 6. 释放资源resultSet.close();statement.close();connection.close();} }控制台输出结果为 注1执行SQL的语句为 ResultSet resultSet statement.executeQuery(); 对比SQL实现Insert的executeUpdate方法返回的是一个int类型数据实现Select的executeQuery方法返回的是一个ResultSet类型对象。 该对象可以视为是一张表初始时光标指向表首行可以使用getXXX方法获取当前光标指向的行的数据。每调用一次next就使光标下移一行当光标遍历完整张表再调用next时就会返回false 2getXXX方法用于取出这一行指定列的值使用的方法要与列的类型匹配 参数可以是第几列的下标也可以是列名更推荐使用列名 while(resultSet.next()){int id resultSet.getInt(id);String name resultSet.getString(name);System.out.println(id id , name name);} 3实现Select的程序在释放资源时相较于Insert需要多释放一个resultSet可以将查询结果的临时表视为一个resultSet