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

网站的设计思路范文中国2020最新军事新闻

网站的设计思路范文,中国2020最新军事新闻,南通市城乡和住房建设局网站,双语网站建设哪家便宜JDBC文档 JDBC概述 JDBC概述 Java DataBase Connectivity Java 数据库连接技术 JDBC的作用 通过Java语言操作数据库#xff0c;操作表中的数据 SUN公司为**了简化、**统一对数据库的操作#xff0c;定义了一套Java操作数据库的规范#xff0c;称之为JDBC JDBC的本质 是官方…JDBC文档 JDBC概述 JDBC概述 Java DataBase Connectivity Java 数据库连接技术 JDBC的作用 通过Java语言操作数据库操作表中的数据 SUN公司为**了简化、**统一对数据库的操作定义了一套Java操作数据库的规范称之为JDBC JDBC的本质 是官方sun公司定义的一套操作所有关系型数据库的规则接口。各个数据库厂商去实现这套接口提供数据库驱动jar包。我们可以使用这套接口JDBC编程运行时的代码其实是驱动jar包中的实现类。 总结 在java中要想访问数据库只能通过JDBC. JDBC是java访问数据库的基础,其他数据库访问技术都是对JDBC的封装(Hibernate,MyBatis) JDBC是为了访问不同的数据库,提供了一种统一的访问方式 JDBC本身是java连接数据库的一个标准,是进行数据库连接的抽象层.由java编写的一组类和接口,接口的实现由各大数据库厂商来实现JDBC 入门案例 使用junit测试用例 /*** Auther: yanqi* 只有无返回值和没有参数据的情况下才能使用junit点击方法用右击运行JUnit run * Desc:* 在同一个类中只能有一个main方法这个main是被jvm所调用* 我还想测试main2,没办法去运行这个main2* 为了解决多次测试问题* 提供了一个 【测试用例】 junit*/ public class JdbcDemo1 {/*使用junit测试用例1在方法上加Test2: 前提-测试的方法返回值只能是void , 不能参数3注意 类名不能叫 test*///单元测试Testpublic void test1(){System.out.println(aaaa);}//单元测试Testpublic void test2(){System.out.println(bbbb);}} JDBC_CRUD操作 实现步骤 1、要连接mysql数据库。有一个mysql的数据库并且要启动 2、创建一个数据库创建一个表把表添加一些数据。 3、找到msyql的驱动并且拷贝到工程中。build-path 4、书写java代码。准备数据库 CREATE TABLE t_user (id int(11) NOT NULL AUTO_INCREMENT,username varchar(25) DEFAULT NULL,passworld varchar(25) DEFAULT NULL,age int(11) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8;创建JavaWeb工程 添加驱动jar包 JDBC的查询操作 /*** 通过jdbc连接数据库步骤* 1、加载驱动* 2、连接数据库* 3、创建statement对象* 4、发送sql* 5、处理结果集* 6、关闭连接*/ public class JDBC_CRUD {/*** jdbc实现查询操作*/Testpublic void TestSelectUser() throws Exception {// 1、加载驱动Class.forName(com.mysql.jdbc.Driver);// 2、连接数据库String urljdbc:mysql://localhost:3306/test;String userroot;String password root;Connection conn DriverManager.getConnection(url, user, password);// 3、创建statement对象,这个对象是可以发送sqlStatement statm conn.createStatement();//4、发送sqlString sqlselect * from t_user;ResultSet rs statm.executeQuery(sql);//5、处理结果集while (rs.next()){//指针一个一个的去找如果找到就取出int id rs.getInt(id);String username rs.getString(username);String passworld2 rs.getString(passworld);int age rs.getInt(age);System.out.println(id-username-passworld2-age);}// 6、关闭连接 后打开的先关闭rs.close();statm.close();conn.close();} }两种取值方式 //5、处理结果集 while (rs.next()){//指针一个一个的去找如果找到就取出/*** 取值方式有两种* 1、按字段名来取比较真观推荐使用常用* 2、按列号来取可以在字段少的情况下使用*/int id rs.getInt(1);//表示第一列id字段String username rs.getString(2);//表示第二列username字段String passworld2 rs.getString(passworld);int age rs.getInt(age);System.out.println(id-username-passworld2-age); }JDBC的添加操作 /*** jdbc实现添加操作*/ Test public void TestAddUser() throws Exception {// 1、加载驱动Class.forName(com.mysql.jdbc.Driver);//2、连接数据库String urljdbc:mysql://127.0.0.1:3306/test;String userroot;String pwdroot;Connection conn DriverManager.getConnection(url, user, pwd);//3、创建statement对象Statement stmt conn.createStatement();//4、发送sql 添加修改删除 都用executeUpdate()方法String sql INSERT INTO test.t_user(id, username, passworld, age) VALUES (null, rose, 123, 97);int i stmt.executeUpdate(sql);System.out.println(i);//表示的影响的行数//5、关闭连接stmt.close();conn.close(); }JDBC的删除操作 /*** jdbc实现删除操作*/ Test public void TestDeleteUser() throws Exception {// 1、加载驱动Class.forName(com.mysql.jdbc.Driver);// 2、连接数据库String urljdbc:mysql://127.0.0.1:3306/test;String userroot;String pwdroot;Connection conn DriverManager.getConnection(url, user, pwd);// 3、创建statement对象Statement stmt conn.createStatement();// 4、发送sqlString sqldelete from t_user;int i stmt.executeUpdate(sql);System.out.println(i);// 5、关闭连接stmt.close();conn.close(); }JDBC的修改操作 /*** jdbc实现修改操作*/ Test public void TestUpdateUser() throws Exception {// 1、加载驱动Class.forName(com.mysql.jdbc.Driver);// 2、连接数据库String urljdbc:mysql://127.0.0.1:3306/test;String userroot;String pwdroot;Connection conn DriverManager.getConnection(url, user, pwd);// 3、创建statement对象Statement stmt conn.createStatement();// 4、发送sqlString sqlupdate t_user set username 张三 where id 4 ;int i stmt.executeUpdate(sql);System.out.println(i);// 5、关闭连接stmt.close();conn.close(); }异常的处理 public class JdbcEx {/*** jdbc实现查询操作*/Testpublic void TestSelectUser(){// 1、加载驱动try {Class.forName(com.mysql.jdbc.Driver);} catch (ClassNotFoundException e) {e.printStackTrace();}// 2、连接数据库String urljdbc:mysql://localhost:3306/test;String userroot;String password root;Connection conn null;Statement statm null;ResultSet rs null;try {conn DriverManager.getConnection(url, user, password);// 3、创建statement对象,这个对象是可以发送sqlstatm conn.createStatement();//4、发送sqlString sqlselect * from t_user;rs statm.executeQuery(sql);//5、处理结果集while (rs.next()){//批针一个一个的去找如果找到就取出/*** 取值方式有两种* 1、按字段名来取比较真观推荐使用常用* 2、按列号来取可以在字段少的情况下使用*/int id rs.getInt(1);//表示第一列id字段String username rs.getString(2);//表示第二列username字段String passworld2 rs.getString(passworld);int age rs.getInt(age);System.out.println(id-username-passworld2-age);}} catch (SQLException e) {e.printStackTrace();}finally {// 6、关闭连接 后打开的先关闭try {if(rs ! null){rs.close();rs null;//关闭连接给赋值null,gc垃圾回收回机制会优先处理这些对象}} catch (SQLException e) {e.printStackTrace();}try {if(statm ! null){statm.close();statmnull;}} catch (SQLException e) {e.printStackTrace();}try {if(conn ! null){conn.close();conn null;}} catch (SQLException e) {e.printStackTrace();}}} }工具类的抽取 public class JDBCUtil {//静态代码块,随着类的加载而加载并且只加载一次static {try {Class.forName(com.mysql.jdbc.Driver);} catch (ClassNotFoundException e) {e.printStackTrace();}}//获取连接public static Connection getConnection(){String urljdbc:mysql://localhost:3306/test;String userroot;String password root;Connection conn null;try {conn DriverManager.getConnection(url, user, password);} catch (SQLException e) {e.printStackTrace();}return conn;}//关闭方法public static void close(ResultSet rs , Statement statm, Connection conn){try {if(rs ! null){rs.close();rs null;//关闭连接给赋值null,gc垃圾回收回机制会优先处理这些对象}} catch (SQLException e) {e.printStackTrace();}try {if(statm ! null){statm.close();statmnull;}} catch (SQLException e) {e.printStackTrace();}try {if(conn ! null){conn.close();conn null;}} catch (SQLException e) {e.printStackTrace();}}//关闭方法public static void close( Statement statm, Connection conn){try {if(statm ! null){statm.close();statmnull;}} catch (SQLException e) {e.printStackTrace();}try {if(conn ! null){conn.close();conn null;}} catch (SQLException e) {e.printStackTrace();}} }工具类的测试 public class UtilTest {Testpublic void testUpdate(){Connection conn null;Statement stmt null;try {conn JDBCUtil.getConnection();stmt conn.createStatement();int i stmt.executeUpdate(update t_user set username 江一燕 where id 4);System.out.println(i);} catch (SQLException e) {e.printStackTrace();}finally {JDBCUtil.close(stmt,conn);}}/*** 测试的查询*/Testpublic void test(){Connection conn null;Statement stmt null;ResultSet rs null;try {conn JDBCUtil.getConnection();stmt conn.createStatement();rs stmt.executeQuery(select * from t_user);while (rs.next()){int id rs.getInt(id);String username rs.getString(username);String passworld rs.getString(passworld);int age rs.getInt(age);System.out.println(id);System.out.println(username);System.out.println(passworld);System.out.println(age);}} catch (SQLException e) {e.printStackTrace();}finally {JDBCUtil.close(rs,stmt,conn);}} }工具类的优化 jdbc.properties ClassforNamecom.mysql.jdbc.Driver urljdbc:mysql://localhost:3306/test userroot passwordrootpublic class JDBCUtil {private static String classforName;private static String url;private static String user;private static String password;private static Connection conn null;//静态代码块,随着类的加载而加载并且只加载一次static {//FileInputStream fis null; //获取的配置文件方式一Properties pro null;try {//fis new FileInputStream(src/jdbc.properties); //获取的配置文件方式一web项目中无法用//获取的配置文件二通过类加载器InputStream isJDBCUtil.class.getClassLoader().getResourceAsStream(jdbc.properties);pro new Properties();//加载到Properties集合对象中pro.load(is);} catch (IOException e) {e.printStackTrace();}finally {try {is.close();} catch (IOException e) {e.printStackTrace();}}classforName pro.getProperty(ClassforName);url pro.getProperty(url);user pro.getProperty(user);password pro.getProperty(password);//加载驱动try {Class.forName(classforName);} catch (ClassNotFoundException e) {e.printStackTrace();}//创建连接try {conn DriverManager.getConnection(url, user, password);} catch (SQLException e) {e.printStackTrace();}}//获取连接public static Connection getConnection(){return conn;}//关闭方法public static void close(ResultSet rs , Statement statm, Connection conn){try {if(rs ! null){rs.close();rs null;//关闭连接给赋值null,gc垃圾回收回机制会优先处理这些对象}} catch (SQLException e) {e.printStackTrace();}try {if(statm ! null){statm.close();statmnull;}} catch (SQLException e) {e.printStackTrace();}try {if(conn ! null){conn.close();conn null;}} catch (SQLException e) {e.printStackTrace();}}//关闭方法public static void close( Statement statm, Connection conn){try {if(statm ! null){statm.close();statmnull;}} catch (SQLException e) {e.printStackTrace();}try {if(conn ! null){conn.close();conn null;}} catch (SQLException e) {e.printStackTrace();}} }封装实现体类 public class UserTest {Testpublic void queryUser() throws SQLException {Connection conn JDBCUtil.getConnection();Statement stmt conn.createStatement();ResultSet rs stmt.executeQuery(select * from t_user);ListUser list new ArrayList();while (rs.next()){ User u new User();u.setId(rs.getInt(id));u.setUsername(rs.getString(username));u.setPassworld(rs.getString(passworld));u.setAge(rs.getInt(age));list.add(u);}list.forEach(System.out::println);JDBCUtil.close(rs,stmt,conn);} }MVC三层架 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ERyu1jsE-1676683410519)(assets/image-20211122171228868.png)] 案例-登录功能 所用的技术 jdbc mysql 接口 实现类 三层架构 web – service – dao 创建工程 web工程 所需要的jar包 mysql的驱动包 数据库准备 CREATE TABLE t_user (id int(11) NOT NULL AUTO_INCREMENT,username varchar(25) DEFAULT NULL,passworld varchar(25) DEFAULT NULL,age int(11) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT5 DEFAULT CHARSETutf8;实体对象 public class User {private int id;private String username;private String pwd;private int age;//提供有参无参构造方法//提供get set 方法//提供 toString 方法 }dao层 方法 public User login(User user);public class UserDaoImpl implements UserDao {Overridepublic User login(User u) {try {Class.forName(com.mysql.jdbc.Driver);} catch (ClassNotFoundException e) {e.printStackTrace();}//如果你的数据是本地的并且端口是默认3306是可以省略String url jdbc:mysql:///test;String user root;String pwd root;Connection conn null;Statement stmt null;try {conn DriverManager.getConnection(url, user, pwd);stmt conn.createStatement();String sql select * from t_user where username u.getUsername() and passworld u.getPassworld() ;ResultSet rs stmt.executeQuery(sql);//登录只有两个结果查到查不到if(rs.next()){String username rs.getString(username);String passworld rs.getString(passworld);//如果有数据封装并返回User user1 new User();user1.setUsername(username);user1.setPassworld(passworld);return user1;}} catch (SQLException e) {e.printStackTrace();}//TODO关闭连接//如果没有查到用户整体返回nullreturn null;} }dao单元测试 /*** 测试dao层代码是否正常使用*/ Test public void login() {//创建dao层UserDao dao new UserDaoImpl();User user new User();user.setUsername(dfdfdf);user.setPassworld(123);//调用dao方法User u dao.login(user);if(u!null){System.out.println(登录成功);}else{System.out.println(登录失败);} }service层 public interface UserService {public boolean login(User user); }public class UserServiceImpl implements UserService {//创建dao对象private UserDao userDao new UserDaoImpl();Overridepublic boolean login(User user) {//调用dao层方法User res userDao.login(user);if(res ! null){//不能null表示dao查到数据登录成功return true;}//否则登录失败return false;} }测试service Test public void login() {//创建对象UserService service new UserServiceImpl();User user new User();user.setUsername(rose);user.setPassworld(123);boolean login service.login(user);if(login){System.out.println(登录成功);}else{System.out.println(登录失败);} }web层 public class UserWeb {public static void main(String[] args) {//创建对象UserService service new UserServiceImpl();User user new User();user.setUsername(jack);user.setPassworld(123);boolean login service.login(user);if(login){System.out.println(登录成功);}else{System.out.println(登录失败);}} }sql注入问题 -- 原sql select * from t_user where username jack and passworld 123-- 什么是sql注入 通过字符串拼接篡改sql这就是sql注入 select * from t_user where username or 11 and passworld or 11 select * from t_user where 1 1解决sql注入问题的思路 -- 解决sql注入问题 -- 出现的sql注入原因字符串拼接篡改sql -- 解决思想就让sql进行拼接 select * from t_user where username ? and passworld ?PreparedStatement解决sql注入 1执行效率Statement 采取直接编译 SQL 语句的方式扔给数据库去执行而 PreparedStatement 则先将 SQL 语句预编译一遍再填充参数这样效率会高一些。SQL 语句被预编译并且存储在 PreparedStatement 对象中其后可以使用该对象高效地多次执行该语句。2代码可读性Statement 中 SQL 语句中需要 Java 中的变量加就得进行字符串的运算还需要考虑一些引号、单引号的问题参数变量越多代码就越难看而且会被单引号、双引号搞疯掉而 PreparedStatement则不需要这样参数可以采用“?”占位符代替接下来再进行参数的填充 这样利于代码的可读性并且符合面向对象的思想。3安全性Statement 由于可能需要采取字符串与变量的拼接很容易进行 SQL 注入攻击而 PreparedStatement 由于是预编译再填充参数的不存在 SQL 注入问题。public class UserDaoImpl implements UserDao {Overridepublic User login(User u) {try {Class.forName(com.mysql.jdbc.Driver);} catch (ClassNotFoundException e) {e.printStackTrace();}//如果你的数据是本地的并且端口是默认3306是可以省略String url jdbc:mysql:///test;String user root;String pwd root;Connection conn null;PreparedStatement pstmt null;ResultSet rs null;try {conn DriverManager.getConnection(url, user, pwd);/*stmt conn.createStatement();String sql select * from t_user where username u.getUsername() and passworld u.getPassworld() ;ResultSet rs stmt.executeQuery(sql);*///预处理提前把sql进行处理可以防止sql注入问题String sql select * from t_user where username ? and passworld ?;pstmt conn.prepareStatement(sql);pstmt.setString(1,u.getUsername());pstmt.setString(2,u.getPassworld());//执行再发送rs pstmt.executeQuery();//登录只有两个结果查到查不到if(rs.next()){String username rs.getString(username);String passworld rs.getString(passworld);//如果有数据封装并返回User user1 new User();user1.setUsername(username);user1.setPassworld(passworld);return user1;}} catch (SQLException e) {e.printStackTrace();}//TODO关闭连接//如果没有查到用户整体返回nullreturn null;} }PreparedStatement进行了预编译处理当下次执行相同的sqlsql就不会再编译了比Statement的效率高。 Statement每执行一次sql进行编译一次 jdbc批处理-了解 业务场景当需要向数据库中发送一批sql时就可以用jdbc的批处理机制以提升执行效率避免向数据库一条条的发送 statement批处理 /*** statement批处理*/Testpublic void test1(){Connection conn null;Statement statement null;try {conn JDBCUtil.getConnection();statement conn.createStatement();for(int i 1; i 10000; i){String sql insert into t_user (id,username, passworld,age) values(null,i, 123, 28);statement.addBatch(sql);//一次性向数据库中添加了3000条if(i % 3000 0 ){//执行批次statement.executeBatch();//清空批次statement.clearBatch();}}//执行批次statement.executeBatch();//清空批次statement.clearBatch();} catch (SQLException e) {e.printStackTrace();}finally {JDBCUtil.close(statement,conn);}}PreparedStatement批处理 /*** PreparedStatement* throws SQLException*/Testpublic void test2() throws SQLException {Connection conn JDBCUtil.getConnection();String sql insert into t_user (username, passworld,age) values(?, ?, ?);PreparedStatement pstmt conn.prepareStatement(sql);for (int i 1; i 10000 ; i) {pstmt.setString(1,ui);pstmt.setString(2,pi);pstmt.setInt(3,i);pstmt.addBatch();if(i % 3000 0){pstmt.executeBatch();pstmt.clearBatch();}}pstmt.executeBatch();pstmt.clearBatch();JDBCUtil.close(pstmt,conn);}ent.clearBatch(); } catch (SQLException e) { e.printStackTrace(); }finally { JDBCUtil.close(statement,conn); } }**PreparedStatement批处理**java/*** PreparedStatement* throws SQLException*/Testpublic void test2() throws SQLException {Connection conn JDBCUtil.getConnection();String sql insert into t_user (username, passworld,age) values(?, ?, ?);PreparedStatement pstmt conn.prepareStatement(sql);for (int i 1; i 10000 ; i) {pstmt.setString(1,ui);pstmt.setString(2,pi);pstmt.setInt(3,i);pstmt.addBatch();if(i % 3000 0){pstmt.executeBatch();pstmt.clearBatch();}}pstmt.executeBatch();pstmt.clearBatch();JDBCUtil.close(pstmt,conn);}
http://www.w-s-a.com/news/48326/

相关文章:

  • 抽奖的网站怎么做的广州小程序定制开发
  • 网站的文件夹建设企业网站公积金
  • 做网站的的价位网站建设 考试题目
  • 深圳比邻网站建设北京优化服务
  • 菏泽网站建设哪家好电子商务网络安全
  • 仿一个网站广州网站建设正规公司
  • 网站建设 目的seo网站关键词排名快速
  • 什么叫做响应式网站自媒体全平台发布
  • 企业网站 案例哪里需要人做钓鱼网站
  • 厚街东莞网站建设网站开发者调试模式
  • 网站推广营销联系方式wordpress adminlte
  • 哪些网站可以做文字链广告卖水果网站建设的策划书
  • 雕刻业务网站怎么做企业qq官网
  • 新华书店的做的数字阅读网站wordpress编辑器格式
  • jq做6个网站做什么好广西临桂建设局网站
  • 网站新闻图片尺寸南京网站设计公司
  • 重庆seo建站网站服务器 安全
  • 咸宁做网站的公司桂林网站建设兼职
  • 教做网站网站开发行业分析
  • 忻州网站建设培训友情链接交换形式有哪些
  • 佛山做外贸网站渠道外贸常用网站
  • 文章收录网站网站及新媒体建设办法
  • 招聘网站排行榜2021找建网站公司
  • 网站建设制作宝塔面板活动宣传推广的形式有哪些
  • 掉关键词网站敏捷软件开发流程
  • 微信小程序格泰网站建设新闻采编与制作专业简历
  • 电子商城建设网站海伦网站建设
  • 南充能够建设网站的公司有专门做设计的一个网站
  • 免费域名申请个人网站阿里巴巴运营的工作内容
  • 怎么建自己的手机网站保定电子商务网站建设