zoukankan      html  css  js  c++  java
  • 数据库链接JDBC

    通过java_JDBC链接数据库
    jdbc:
        java操作数据库.jdbc是oracle公司指定的一套规范(一套接口)
        驱动:jdbc的实现类.由数据库厂商提供.
        我们就可以通过一套规范操作不同的数据库了(多态)
        jdbc作用:
            连接数据库
            发送sql语句
            处理结果
    步骤:
         导入jar包:
    1. 注册驱动
    2. 获取链接
    3. 获取执行者
    4. 执行sql语句
    5. 对结果进行操作
    jdbc-api详解:
        所有的包 都是 java.sql 或者 javax.sql
     
        DriverManager:管理了一组jdbc的操作 类
            常用方法:
                了解:注册驱动   
                    static void registerDriver(Driver driver) :
                        通过查看 com.mysql.jdbc.Driver的源码 有如下代码
                            
     static {
          try {
                 java.sql.DriverManager.registerDriver(new Driver());//这段代码我们已经写过
             } catch (SQLException E) {
                   throw new RuntimeException("Can't register driver!");
              }
     }
     
                        驱动注册了两次.我们只需要将静态代码块执行一次,类被加载到内存中会执行静态代码块,并且只执行一次.
                        现在只需要将类加载到内存中即可:
                            方式1:
                                ★Class.forName("全限定名");//包名+类名   com.mysql.jdbc.Driver
                            方式2:
                                类名.class;
                            方式3:
                                对象.getClass();
     
                掌握:获取连接
                    static Connection getConnection(String url, String user, String password)
                        参数1:告诉我们连接什么类型的数据库及连接那个数据库
                                    协议:数据库类型:子协议 参数
                            mysql:    jdbc:mysql://localhost:3306/数据库名称
                            oracle:    jdbc:oracle:thin@localhost:1521@实例
     
                        参数2:账户名 root
                        参数3:密码
     
        (了解)Driver:java.sql 接口 驱动
        Connection:连接 接口
            常用方法:
                获取语句执行者:
                    (了解)Statement createStatement() :获取普通的语句执行者  会出现sql注入问题
                    ★PreparedStatement prepareStatement(String sql) :获取预编译语句执行者
                    (了解)CallableStatement prepareCall(String sql):获取调用存储过程的语句执行者
     
                了解:
                    setAutoCommit(false) :手动开启事务
                    commit():提交事务
                    rollback():事务回滚
     
        Statement:语句执行者 接口
        PreparedStatement:预编译语句执行者 接口
            常用方法:
                设置参数:
                    setXxx(int 第几个问号,Object 实际参数);
                        常见的方法:
                             setInt
                             setString
                             setObject
     
                执行sql:
                     ResultSet executeQuery() :执行 r 语句 返回值:结果集
                     int executeUpdate() :执行cud 语句 返回值:影响的行数
     
        ResultSet:结果集 接口
            执行查询语句之后返回的结果
                常用方法:
                    boolean next():判断是否有下一条记录,若有返回true且将光标移到下一行,若没有呢则返回false
                        光标一开始处于第一条记录的上面
     
                    获取具体内容
                        getXxx(int|string)
                            若参数为int :第几列
                            若参数为string:列名(字段名)
                        例如:
                            获取cname的内容可以通过
                                getString(2)
                                getString("cname")
                        常用方法:
                            getInt
                            getString 也可以获取int值
                            getObject 可以获取任意
     
     1 //代码演示:
     2 //我们封装一个工具类来提高代码的扩展性
     3 public class JDBCUtils {
     4           private static final String url="jdbc:mysql://localhost:3306/test";
     5           private static final String username="root";
     6           private static final String password = "root";
     7           /**
     8            * 注册驱动
     9            */
    10           static {
    11               try {
    12                    Class.forName("com.mysql.jdbc.Driver");
    13               } catch (ClassNotFoundException e) {
    14                    // TODO Auto-generated catch block
    15                    e.printStackTrace();
    16               }
    17           }
    18           /**
    19            * 获取链接
    20            * @return
    21            */
    22           public static Connection getConnention() {
    23               Connection connection=null;
    24               try {
    25                    connection = DriverManager.getConnection(url,username,password);
    26               } catch (SQLException e) {
    27                    // TODO Auto-generated catch block
    28                    e.printStackTrace();
    29               }
    30               return connection;
    31           }
    32           /**
    33            * 通过可变参关闭连接
    34            * @param objects
    35            */
    36           public static void colse(Object ...objects) {
    37               try {
    38                    if (objects!=null && objects.length>0) {
    39                         for(int i = 0;i<objects.length;i++) {
    40                              if(objects[i] instanceof Statement) {
    41                                   ((Statement)objects[i]).close();
    42                              }else if(objects[i] instanceof Connection) {
    43                                   ((Connection)objects[i]).close();
    44                              }
    45                         }
    46                    }
    47               } catch (Exception e) {
    48                    e.printStackTrace();
    49               }
    50           }
    51 }
     1 // 对工具类的使用
     2 public class JDBCDemo {
     3      public static void main(String[] args) {
     4           //获取链接
     5           Connection connection = JDBCUtils.getConnention();
     6           //获取执行者
     7           ResultSet resultSet=null;
     8           PreparedStatement pStatement=null;
     9  
    10           //定义将要执行的sql语句
    11           String sql = "select * from products where cno=?";
    12           //存放结果集对象
    13           List<Product> list = new ArrayList<Product>();
    14           try {
    15               //获取语句执行者对象
    16               pStatement = connection.prepareStatement(sql);
    17               //设置参数
    18               pStatement.setInt(1, 1);
    19               //执行查询操作
    20               resultSet = pStatement.executeQuery();
    21               //遍历结果集
    22               while (resultSet.next()) {
    23                    Product product = new Product();
    24                    product.setId(resultSet.getInt("pid"));
    25                    product.setName(resultSet.getString("pname"));
    26                    product.setPrice(resultSet.getInt("price"));
    27                    product.setNum(resultSet.getInt("pnum"));
    28                    product.setCno(resultSet.getInt("cno"));
    29                    product.setTimestamp(resultSet.getTimestamp("pdate"));
    30                    list.add(product);
    31               }
    32           } catch (SQLException e) {
    33               // TODO Auto-generated catch block
    34               e.printStackTrace();
    35           }finally {
    36               //关闭连接
    37               JDBCUtils.colse(pStatement,connection);
    38           }
    39           for (Product product : list) {
    40               System.out.println(product);
    41           }
    42      }
    43 }
     
     
  • 相关阅读:
    正则表达式match方法和search方法
    正则表达式(基础篇1)
    动画
    重绘和重排(回流)
    数组常用的10个方法
    css3只需一招,将网站变成灰色的
    Python-类的几种调用方法
    Codeforces Global Round 8 C. Even Picture(构造)
    Codeforces Global Round 8 D. AND, OR and square sum(位运算)
    Codeforces Round #650 (Div. 3) C. Social Distance
  • 原文地址:https://www.cnblogs.com/anzhi/p/7465168.html
Copyright © 2011-2022 走看看