第十八章 JDBC

1.使用jdbc连接数据库:

  a.导入驱动jar包
  b.Class.forName(DRIVER);
  // 2.建立连接
  con = DriverManager.getConnection(URL, USERNAME, PWD);

2.增、删、改:(只要修改sql就可实现)
  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.SQLException;
  import java.sql.Statement;

  public class UpadateTest {
    public static final String DRIVER = "com.mysql.jdbc.Driver";
    public static final String URL = "jdbc:mysql://localhost:3306/petstore";
    public static final String USERNAME = "root";
    public static final String PWD = "root";

    public static void main(String[] args) {
      Connection con = null;
      Statement statement = null;
      try {
        Class.forName(DRIVER);
        con = DriverManager.getConnection(URL, USERNAME, PWD);
        statement = con.createStatement();
        String sql = "update pet set name=‘毛毛‘ where id=2";
        int result = statement.executeUpdate(sql);//增删改
        if (result > 0) {
          System.out.println("修改成功");
        } else {
          System.out.println("修改失败");
        }
      } catch (ClassNotFoundException e) {
        e.printStackTrace();
      } catch (SQLException e) {
        e.printStackTrace();
      }finally{
        try {
          statement.close();
          con.close();
        } catch (SQLException e) {
          e.printStackTrace();
        }
      }
    }
  }

3.查询:
  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.ResultSet;
  import java.sql.SQLException;
  import java.sql.Statement;

  public class QueryTest {
    public static final String DRIVER = "com.mysql.jdbc.Driver";
    public static final String URL = "jdbc:mysql://localhost:3306/petstore";
    public static final String USERNAME = "root";
    public static final String PWD = "root";

    public static void main(String[] args) {
      Connection con = null;
      Statement statement = null;
      ResultSet rs=null;
      try {
        Class.forName(DRIVER);
        con = DriverManager.getConnection(URL, USERNAME, PWD);
        statement = con.createStatement();
        String sql = "select * from pet";
        rs = statement.executeQuery(sql);
        while (rs.next()) {
          System.out.print(rs.getInt(1)+"\t");
          System.out.print(rs.getString(2)+"\t");
          System.out.print(rs.getInt(3)+"\t");
          System.out.print(rs.getInt(4)+"\t");
          System.out.print(rs.getString(5)+"\n");
        }
      } catch (ClassNotFoundException e) {
        e.printStackTrace();
      } catch (SQLException e) {
        e.printStackTrace();
      }finally{
        try {
          rs.close();
          statement.close();
          con.close();
        } catch (SQLException e) {
          e.printStackTrace();
        }
      }

    }
   }

4.statement的方法的区别:
  execute     不常用    返回值是boolean类型,true指返回结果集
  executeUpdate   增、删、改  返回int类型,指受影响的行数
  executeQuery    查       返回ResultSet类型,指结果集

5.prepareStatement避免sql注入异常
  使用方式:
  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.PreparedStatement;
  import java.sql.ResultSet;
  import java.sql.SQLException;
  import java.util.ArrayList;
  import java.util.List;

  public class PrepTest {
    public static final String DRIVER = "com.mysql.jdbc.Driver";
    public static final String URL = "jdbc:mysql://localhost:3306/petstore";
    public static final String USERNAME = "root";
    public static final String PWD = "root";

    public static void main(String[] args) {
      Connection con = null;
      PreparedStatement ps = null;
      ResultSet rs = null;
      List<Master> masterlst = new ArrayList<Master>();
      try {
        // 1加载驱动
        Class.forName(DRIVER);
        // 2创建连接
        con = DriverManager.getConnection(URL, USERNAME, PWD);
        // 3声明Sql
        //  StringBuffer sql = new StringBuffer("select * from master where 1=1 ");
             // sql.append("and name=? ");
        // sql.append("and money=?");
        String sql="select * from master ";
        // 4.创建PreparedStatement对象
        ps = con.prepareStatement(sql);
             // 5.传参数
          // ps.setString(1, "李");
          // ps.setInt(2, 100);
            // 6.执行sql
          rs = ps.executeQuery();
            // 7遍历显示
        while (rs.next()) {
          Master m = new Master();
          m.setId(rs.getInt(1));
          m.setName(rs.getString(2));
          m.setPassword(rs.getString(3));
          m.setMoney(rs.getInt(4));
          masterlst.add(m);
        }
      } catch (ClassNotFoundException e) {
        e.printStackTrace();
      } catch (SQLException e) {
        e.printStackTrace();
      } finally {
        // 8.关闭对象//由内到外关闭
        try {
          rs.close();
          ps.close();
          con.close();
        } catch (SQLException e) {
          e.printStackTrace();
        }
      }

      System.out.println("查询结果:");
      for (Master m:masterlst) {
          System.out.println(m.getId()+"\t"+m.getName()+"\t"+m.getPassword()+"\t"+m.getMoney());
      }
    }

  }

时间: 2024-12-28 20:06:47

第十八章 JDBC的相关文章

《Linux内核设计与实现》读书笔记 第十八章 调试

第十八章调试 18.1 准备开始          需要准备的东西: l  一个bug:大部分bug通常都不是行为可靠而且定义明确的 l  一个藏匿bug的内核版本:找出bug首先出现的版本 l  相关内核代码的知识和运气 最好能让bug重现,有一些bug存在而且有人没办法让他重现,因为内核与用户程序和硬件间的交互很微妙. 18.2内核中的bug 可以有无数种原因产生,表象也变化多端.代码中的错误往往引发一系列连锁反应,目击者才看到bug. 18.3通过打印来调试 内核提供了打印函数printk

第十八章 并发登录人数控制——《跟我学Shiro》(http://blog.csdn.net/lhacker/article/details/19334305)

第十八章 并发登录人数控制——<跟我学Shiro> 博客分类: 跟我学Shiro 跟我学Shiro 目录贴:跟我学Shiro目录贴 在某些项目中可能会遇到如每个账户同时只能有一个人登录或几个人同时登录,如果同时有多人登录:要么不让后者登录:要么踢出前者登录(强制退出).比如spring security就直接提供了相应的功能:Shiro的话没有提供默认实现,不过可以很容易的在Shiro中加入这个功能. 示例代码基于<第十六章 综合实例>完成,通过Shiro Filter机制扩展Ki

第十八章 SOCKET类的实现

                        第十八章    SOCKET类的实现         这几天反复思考,到底是从上到下.还是从底层开始往上设计?最后.还是决定从上层建筑开始.APO追求的是简单.再简单!强大.再强大!高速.高效!"天下武功.无坚不破.唯快不破!". APO的socket也不外是一种内存文件吧,但socket描述符和其它类型的文件描述符还是略有区别的.APO中的一个用户进程最多可打开64K个非socket类型的文件描述符,而APO系统只是最多可以打开16M个

第十八章 面向对象的特性

学习要点:1.OOP 的封装2.OOP 的继承3.OOP 的多态 面向对象的三个主要特性是封装.继承和多态. 一.OOP的封装 隐藏对象的字段和实现细节,仅对外公开接口,控制在程序中字段的读和修改的访问级别:将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成"类",其中数据和函数都是类的成员. 字段的作用域1.public 公共的(类外可以访问)2.private 私有的(类内可以访问)3.protected 受保护的(类内和

Linux内核分析——第十八章 调试

第十八章    调试 18.1 准备开始 1.在用户级的程序里,bug表现比较直接:在内核中却不清晰. 2.内核级开发的调试工作远比用户级开发艰难的多. 3.准备工作需要的是: (1)一个bug (2)一个藏匿bug的内核版本 (3)相关内核代码的知识和运气 18.2 内核中的bug 1.内核中的bug多种多样. 2.引用空指针会产生一个oops:垃圾数据会导致系统崩溃. 3.定时限制和竞争条件都允许多个线程在内核中同时运行产生的结果. 18.3 通过打印来调试 一.健壮性 1.健壮性——在任何

Gradle 1.12 翻译——第十八章. 日志

有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html 本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/41241915 关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qin

Linux Socket Programming by Example-第十八章 实战

第18章主要介绍了一个软件实践项目. 架构: C/S 功能:实现一个股票信息广播发布平台. 这个代码本身对2年工作以上的人来说,毫无参考价值. 主要的是软件本身引发的一些发散思考. 最近智能家电 物联网 大数据 数字医疗等都很火热. 这些设备均涉及到2个网络, 一个是基于WIFI.以太网的局域网 一个是基于ISP服务的互联网. 具体构架: 家里的智能设备     -> WiFi  ->  智能路由器 -> ISP ->  互联网 (远程服务器) 如果将智能路由器扩展下,变成带数据库

Gradle 1.12用户指南翻译——第三十八章. Eclipse 插件

本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc 本文翻译所在分支: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/userg

DRILLNET 2.0------第二十八章 背景知识

第二十八章 背景知识 <略>?