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

大型租车门户网站商业版源码湖南企业网站建设制作

大型租车门户网站商业版源码,湖南企业网站建设制作,dede分类信息网站,选择宁波seo优化公司BCSP-玄子JAVA开发之JAVA数据库编程CH-08_JDBC 8.1 JDBC 介绍 8.1.1 什么是 JDBC JDBC#xff08;Java Database Conectivity#xff09; Java数据库连接技术的简称#xff0c;提供连接各种常用数据库的能力 8.1.2 JDBC 的工作原理 JDBC API 内容#xff1a;供程序员…BCSP-玄子JAVA开发之JAVA数据库编程CH-08_JDBC 8.1 JDBC 介绍 8.1.1 什么是 JDBC JDBCJava Database Conectivity Java数据库连接技术的简称提供连接各种常用数据库的能力 8.1.2 JDBC 的工作原理 JDBC API 内容供程序员调用的接口与类集成在java.sql和javax.sql包中如 DriverManager类Connection接口Statement接口ResultSet接口 DriverManager 作用管理各种不同的JDBC驱动 JDBC 驱动 提供者数据库厂商作用负责连接各种不同的数据库 8.1.3 JDBC API JDBC API 主要功能 与数据库建立连接、执行SQL 语句、处理结果 DriverManager 依据数据库的不同管理JDBC驱动 Connection 负责连接数据库并担任传送数据的任务 Statement 由 Connection 产生、负责执行SQL语句 esultSet负责保存Statement执行后的查询结果 8.2 使用 JDBC 连接数据库 8.2.1 导入 JDBC 驱动 JAR 包 数据库版本MySQL5.7 MySQL官网下载对应的JDBC驱动JAR包 mysql-connector-java-8.0.19.jar 驱动类 com.mysql.cj.jdbc.Driver 8.2.2 纯 Java 驱动方式 使用纯Java方式连接数据库 由JDBC驱动直接访问数据库 优点完全Java代码快速、跨平台 缺点访问不同的数据库需要下载专用的JDBC驱动 JDBC驱动由数据库厂商提供 8.2.3 JDBC编程模板 try {Class.forName(JDBC驱动类);# 1.加载JDBC驱动 } catch (ClassNotFoundException e) {//异常输出代码 } //… … try {Connection conDriverManager.getConnection(数据连接字符串,数据库用户名,密码);// 2.与数据库建立连接 Statement stmt con.createStatement();ResultSet rs stmt.executeQuery(SELECT a, b, c FROM table1;);// 3.发送SQL语句并得到返回结果 while (rs.next()) {int x rs.getInt(a);String s rs.getString(b);float f rs.getFloat(c);}// 4.处理返回结果 rs.close();stmt.close(); con.close();// 5.释放资源 } //… …8.2.4 数据库连接字符串 jdbc:数据库://ip:端口/数据库名称[连接参数参数值]数据库表示JDBC连接的目标数据库ip: 表示JDBC所连接的目标数据库地址如果是本地数据库可为localhost即本地主机名端口连接数据库的端口号数据库名称是目标数据库的名称连接参数连接数据库时的参数配置 连接本地MySQL中hospital数据库 jdbc:mysql://localhost:3306/hospital?serverTimezoneGMT-8 // 我国处于东八区时区设置为GMT-88.2.5 Connection 接口 Connection是数据库连接对象的类型 方法作用Statement createStatement()创建一个Statement对象将SQL语句发送到数据库PreparedStatement prepareStatement(String sql)创建一个PreparedStatement对象将参数化的SQL语句发送到数据库boolean isClosed()查询此Connection对象是否已经被关闭。如果已关闭则返回true否则返回falsevoid close()立即释放此Connection对象的数据库和JDBC资源 8.2.6 连接本地 hospital 数据库 package XaunZiShare;import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;import java.sql.*;public class HospitalConn {private static Logger logger LogManager.getLogger(HospitalConn.class.getName());public static void main(String[] args) {Connection conn null;// 1、加载驱动try {Class.forName(com.mysql.cj.jdbc.Driver);} catch (ClassNotFoundException e) {logger.error(e);}try {// 2、建立连接conn DriverManager.getConnection(jdbc:mysql://localhost:3306/hospital?serverTimezoneUTC,root, root);System.out.println(数据库连接成功);} catch (SQLException e) {logger.error(e);} finally {// 3、关闭数据库连接try {if (null ! conn) {conn.close();System.out.println(数据库连接断开);}} catch (SQLException e) {logger.error(e);}}} }8.2.7 常见异常 使用JDBC连接数据库时经常出现的错误 JDBC驱动类的名称书写错误导致ClassNotFoundException异常数据连接字符串、数据库用户名、密码错误导致SQLException异常数据库操作结束后没有关闭数据库连接导致仍旧占有系统资源关闭数据库连接语句没有放到finally语句块中导致语句可能没有被执行 8.3 Statement 操作数据库 Java执行数据库操作的一个重要接口在已经建立数据库连接的基础上向数据库发送要执行的SQL语句 Statement对象执行不带参数的简单SQL语句PreparedStatement对象执行带或不带In参数的预编译SQL语句 方法作用ResultSet executeQueryString sql可以执行SQL查询并获取ResultSet对象int executeUpdateString sql可以执行插入、删除、更新的操作返回值是执行该操作所影响的行数boolean executeString sql可以执行任意SQL语句。如果结果为 ResultSet 对象则返回 true如果其为更新计数或者不存在任何结果则返回false使用 executeQuery() 和 executeUpdate() 方法都需要啊传入 SQL 语句因此需要在 Java 中通过字符串拼接获得 SQL 字符串 8.3.1 Java 的字符串操作 String类 字符串常量一旦声明则不可改变String类对象可以改变但改变的是其内存地址的指向使用“”作为数据的连接操作不适用频繁修改的字符串操作 StringBuffer类 StringBuffer类对象能够被多次修改且不产生新的未使用对象使用append()方法进行数据连接适用于字符串修改操作是线程安全的支持并发操作适合多线程 如果使用StringBuffer 生成了 String 类型字符串可以通过 toString( ) 方法将其转换为一个 String 对象 需要拼接的字符串 String patientName李明; String gender男; String birthDate2010-09-03;使用拼接字符串 //使用拼接字符串 String sql insert into patient (patientName,gender,birthDate) values(patientName,gender,birthDate);; System.out.println(sql);使用StringBuffer拼接字符串 //使用StringBuffer拼接字符串 StringBuffer sbSql new StringBuffer(insert into patient (patientName,gender,birthDate) values();sbSql.append(patientName,); sbSql.append(gender,); sbSql.append(birthDate);); sql sbSql.toString(); System.out.println(sql);SQL语句中字符和是等效的但在Java代码中拼接字符串时使用字符会使代码更加清晰也不容易出错引号、逗号或括号等符号必须成对出现可在控制台输出拼接后的字符串检查SQL语句是否正确 8.3.1 Statement 插入数据 使用Statement接口执行插入数据的操作的方法 executeUpdate()方法execute()方法 如果希望得到插入成功的数据行数可以使用executeUpdate()方法否则使用execute()方法 实现步骤 声明Statement变量创建Statement对象构造SQL语句执行数据插入操作关闭Statement对象关闭顺序是后创建的对象要先关闭释放资源 演示案例 使用JDBC向hospital数据库病人表中添加一个新的病人记录关键代码 package XaunZiShare;import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement;public class HospitalInsert {private static Logger logger LogManager.getLogger(HospitalInsert.class.getName());public static void main(String[] args) {Connection conn null;Statement stmt null;String name 张菲;// 姓名String gender 女;// 性别String birthDate 1995-02-12;// 出生日期String phoneNum 13887676500;// 联系电话String email fei.zhangqq.com;//邮箱String password 909000;//密码String identityNum 610000199502126100;//身份证号String address 北京市;//地址// 1、加载驱动try {Class.forName(com.mysql.cj.jdbc.Driver);} catch (ClassNotFoundException e) {logger.error(e);}try {// 2、建立连接conn DriverManager.getConnection(jdbc:mysql://localhost:3306/hospital?serverTimezoneUTC, root, root);// 创建Statement对象stmt conn.createStatement();//构造SQLStringBuffer sbSql new StringBuffer(insert into patient (patientName,gender,birthDate,phoneNum,email,password,identityNum,address) values ( );sbSql.append(name ,);sbSql.append(gender ,);sbSql.append(birthDate ,);sbSql.append(phoneNum ,);sbSql.append(email ,);sbSql.append(password ,);sbSql.append(identityNum ,);sbSql.append(address ););System.out.println(sbSql.toString());//3、执行插入操作stmt.execute(sbSql.toString());} catch (SQLException e) {logger.error(e);} finally {// 4、关闭数据库连接try {if (null ! stmt) {stmt.close();}if (null ! conn) {conn.close();System.out.println(数据库连接断开);}} catch (SQLException e) {logger.error(e);}}} }为了避免可能出现的乱码问题可将指定数据库连接的编码集为UTF8多个参数间使用字符进行分隔 jdbc:mysql://localhost:3306/hospital?serverTimezoneGMT-8useUnicodetruecharacterEncodingutf-88.3.2 Statement 更新数据 使用executeUpdate()方法或execute()方法实现更新数据的操作使用Statement接口更新数据库中的数据的步骤与插入数据类似 实现步骤 声明Statement变量创建Statement对象构造SQL语句执行数据更新操作关闭Statement对象 需关注拼接的SQL字符串以避免出错 演示案例 使用JDBC将hospital数据库中patientID为13的病人电话更新为13627395833 package XaunZiShare;import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement;public class HospitalUpdate {private static Logger logger LogManager.getLogger(HospitalUpdate.class.getName());public static void main(String[] args) {Connection conn null;Statement stmt null;int patientID 13;// 病人编号String phoneNum 13627395833;// 联系电话// 1、加载驱动try {Class.forName(com.mysql.cj.jdbc.Driver);} catch (ClassNotFoundException e) {logger.error(e);}try {// 2、建立连接conn DriverManager.getConnection(jdbc:mysql://localhost:3306/hospital?serverTimezoneUTC, root, root);// 创建Statement对象stmt conn.createStatement();//构造SQLStringBuffer sbSql new StringBuffer(update patient );sbSql.append(set phoneNum phoneNum );sbSql.append(where patientID patientID ;);System.out.println(sbSql.toString());//3、执行插入更新操作int effectRowNum stmt.executeUpdate(sbSql.toString());System.out.println(更新数据的行数 effectRowNum);} catch (SQLException e) {logger.error(e);} finally {// 4、关闭数据库连接try {if (null ! stmt) {stmt.close();}if (null ! conn) {conn.close();System.out.println(数据库连接断开);}} catch (SQLException e) {logger.error(e);}}} } 8.3.3 ResultSet 接口 保存和处理Statement执行后所产生的查询结果 由查询结果组成的一个二维表每行代表一条记录每列代表一个字段 方法说明boolean next()将游标从当前位置向下移动一行void close()关闭ResultSet 对象int getInt(int colIndex)以int形式获取结果集当前行指定列号值int getInt(String colLabel)以int形式获取结果集当前行指定列名值float getFloat(int colIndex)以float形式获取结果集当前行指定列号值float getFloat(String colLabel)以float形式获取结果集当前行指定列名值String getString(int colIndex)以String形式获取结果集当前行指定列号值String getString(String colLabel)以String形式获取结果集当前行指定列名值要从中获取数据的列号或列名可作为方法的参数根据值的类型选择对应的方法 ResultSet 接口 getXxx() 方法 获取当前行中某列的值要从中获取数据的列号或列名可作为方法的参数根据值的类型选择对应的方法 int类型 - getInt() float类型 - getFloat() String类型 - getString()假设结果集的第一列为patientID存储类型为int类型能够获得该列值的两种方法 //使用列号提取数据 int id rs.getInt(1); //使用列名提取数据 int id rs.getInt(patientID);列号从1开始计数与数组下标从0开始计数不同采用列名来标识列可读性强且不容易出错 8.3.4 Statement 和 ResultSet 查询数据 使用 JDBC 从 hospital 数据库中查询前3个病人的编号、姓名、性别、住址信息并输出到控制台上 package XaunZiShare;import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;import java.sql.*;public class HospitalQuery {private static Logger logger LogManager.getLogger(HospitalQuery.class.getName());public static void main(String[] args) {Connection conn null;Statement stmt null;ResultSet rs null;int patientID 13;// 病人编号String phoneNum 13627395833;// 联系电话// 1、加载驱动try {Class.forName(com.mysql.cj.jdbc.Driver);} catch (ClassNotFoundException e) {logger.error(e);}try {// 2、建立连接conn DriverManager.getConnection(jdbc:mysql://localhost:3306/hospital?serverTimezoneUTC, root, root);System.out.println(建立连接成功 !);// 创建Statement对象stmt conn.createStatement();//构造SQLString sql select patientID,patientName,gender,address from patient limit 3;;//3、执行查询更新操作rs stmt.executeQuery(sql);//4、移动指针遍历结果集并输出查询结果while (rs.next()) {System.out.println(rs.getInt(patientID) \t rs.getString(patientName) \t rs.getString(gender) \t rs.getString(address));}} catch (SQLException e) {logger.error(e);} finally {// 5、关闭数据库连接try {if (null ! rs) {rs.close();}if (null ! stmt) {stmt.close();}if (null ! conn) {conn.close();System.out.println(数据库连接断开);}} catch (SQLException e) {logger.error(e);}}} }8.4 PreparedStatement 操作数据库 8.4.1 SQL 注入攻击 通过提交一段SQL代码执行超出用户访问权限的数据操作称为SQL注入SQL InjectionSQL注入攻击是应用安全领域的一种常见攻击方式会造成的数据库安全风险包括刷库、拖库和撞库等主要是没有对用户输入数据的合法性进行判断导致应用程序存在安全隐患 使用JDBC实现医院管理系统用户登录验证功能 package XaunZiShare;import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;import java.sql.*; import java.util.Scanner;public class HospitalLogin {private static Logger logger LogManager.getLogger(HospitalLogin.class.getName());public static void main(String[] args) {Connection conn null;Statement stmt null;ResultSet rs null;//根据控制台提示输入用户身份证号和密码Scanner input new Scanner(System.in);System.out.println(用户登录);System.out.print(请输入身份证号:);String identityNum input.next();System.out.print(请输入密码:);String password input.next();// 1、加载驱动try {Class.forName(com.mysql.cj.jdbc.Driver);} catch (ClassNotFoundException e) {logger.error(e);}try {// 2、建立连接conn DriverManager.getConnection(jdbc:mysql://localhost:3306/hospital?serverTimezoneUTC, root, 123456);// 创建Statement对象stmt conn.createStatement();//构造SQLStringBuffer sbSql new StringBuffer(SELECT patientName FROM patient WHERE );sbSql.append(password password );sbSql.append( and identityNum identityNum ;);//3、执行查询更新操作rs stmt.executeQuery(sbSql.toString());System.out.println(sbSql.toString());//4、验证用户名和密码if (rs.next()) {System.out.println(欢迎 rs.getString(patientName) 登录系统);} else {System.out.println(密码错误);}} catch (SQLException e) {logger.error(e);} finally {// 5、关闭数据库连接try {if (null ! rs) {rs.close();}if (null ! stmt) {stmt.close();}if (null ! conn) {conn.close();}} catch (SQLException e) {logger.error(e);}}} }[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q7QwIOIY-1680668171434)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230404172438.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XJPm8kaF-1680668171437)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230404172502.png)] 修改查询结构 8.4.2 PreparedStatement 接口 使用PreparedStatement 接口 继承自 Statement接口与Statement对象相比使用更加灵活更有效率 PreparedStatement接口 预编译的 SQL 语句 提高代码可读性和可维护性 提高安全性 提高SQL语句执行的性能 方 法作 用boolean execute()执行SQL语句可以是任何SQL语句。如果结果是Result对象则返回true。如果结果是更新计数或没有结果则返回falseResultSet executeQuery()执行SQL查询返回该查询生成的ResultSet对象int executeUpdate()执行SQL语句该语句必须是一个DML语句比如INSERT、UPDATE或DELETE语句;或者是无返回内容的SQL语句比如DDL语句。返回值是执行该操作所影响的行数void setXxx(int index,xxx x)方法名Xxx和第二个参数的xxx均表示如intfloatdouble等基本数据类型且两个类型需一致参数列表中的x表示方法的形式参数。把指定数据类型xxx的值x设置给index位置的参数。根据参数类型的不同常见方法有setInt(int index,int x) 、setFloat(int index,float x)、setDouble(int index,double x)等void setObject(int index,Object x)除基本数据类型外参数类型也可以是Object可以将Object对象x设置给index位置的参数 8.4.3 PreparedStatement 操作数据 创建PreparedStatement对象 使用Connection接口prepareStatement(String sql)方法创建PreparedStatement对象需要提前设置该对象将要执行的SQL语句SQL语句可具有一个或多个输入参数 设置输入参数的值 调用setXxx()方法完成参数赋值 执行SQL语句 调用PreparedStatement接口executeQuery()executeUpdate()execute()方法执行SQL语句 验证用户输入的身份证号和密码 如果通过验证则输出“欢迎[姓名]登录系统”的信息否则输出“密码错误” package XaunZiShare;import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;import java.sql.*; import java.util.Scanner;public class HospitalLogin {private static Logger logger LogManager.getLogger(HospitalLogin.class.getName());public static void main(String[] args) {Connection conn null;PreparedStatement pstmt null;ResultSet rs null;//根据控制台提示输入用户身份证号和密码Scanner input new Scanner(System.in);System.out.println(用户登录);System.out.print(请输入身份证号:);String identityNum input.next();System.out.print(请输入密码:);String password input.next();// 1、加载驱动try {Class.forName(com.mysql.cj.jdbc.Driver);} catch (ClassNotFoundException e) {logger.error(e);}try {// 2、建立连接conn DriverManager.getConnection(jdbc:mysql://localhost:3306/hospital?serverTimezoneUTC, root, 123456);//3、构造PreparedStatement对象pstmt conn.prepareStatement(SELECT patientName FROM patient WHERE identityNum? and password?);pstmt.setString(1, identityNum);pstmt.setString(2, password);rs pstmt.executeQuery();//4、验证用户名和密码if (rs.next()) {System.out.println(欢迎 rs.getString(patientName) 登录系统);} else {System.out.println(密码错误);}} catch (SQLException e) {logger.error(e);} finally {// 5、关闭数据库连接try {if (null ! rs) {rs.close();}if (null ! pstmt) {pstmt.close();}if (null ! conn) {conn.close();}} catch (SQLException e) {logger.error(e);}}} }8.4.4 PreparedStatement 的优势 实际开发中推荐使用PreparedStatement接口执行数据库操作 PreparedStatement与Statement接口相比具有的优势可读性和可维护性高SQL语句执行性能高安全性更高
http://www.w-s-a.com/news/99351/

相关文章:

  • 重庆城市建设集团官方网站php用什么做网站服务器
  • 深圳坪山站重庆市园林建设有限公司网站
  • 网站建设图片教程如何用自己的电脑建网站
  • 《网页设计与网站建设》A卷答案广东新闻联播
  • 海南专业网站运营托管wordpress 去掉主题
  • 企业品牌网站制作甜品制作网站
  • 手机网站怎么制作影响力网站建设
  • 猪八戒网站做私活赚钱吗一尊网 又一个wordpress站点
  • 上海市做网站的公司滨州哪里做网站
  • 简单的网站建设步骤wordpress 贴吧主题
  • 金泉网做网站找谁表格做网站
  • 北京做兼职从哪个网站好江西省建设监督网站电子网
  • 什么网站做生鲜比较好安徽建设厅城乡官网
  • 域名购买网站有哪些问题上海装修网站建设
  • 找人做seo要给网站程序河北建设网网站
  • 哪家做网站性价比高wordpress最新文章链接插件
  • 维修网站怎么做移动互联网应用程序指的是什么
  • 张家界建设网站门户网站的建设原理
  • 企业通用网站模板湖南网站建设企业
  • 能看网站的视频app如何运行asp网站
  • 公司做网站还是做阿里好呢国外的旅游网站做的如何
  • 怎么做wep网站长沙seo排名公司
  • 海南网站网络推广做转运网站
  • 门户网站方案用户等待网站速度
  • 哈尔滨专业建网站方案深圳生活免费信息网
  • 检测网站是否被挂黑链wordpress 网址分享
  • 网站建设贵阳东莞网站建设策划
  • 网站5建设需要学什么桃城网站建设公司
  • 杭州外贸网站企业门户网站的安全性
  • 建设论坛网站需要做什么水果电商网站建设相关文献