• java链接数据库---JDBC学习记录(一)


    文章摘抄于课件整理,及自己总结等,倾向于笔记。

    1.

    JDBC是Java DataBase Connectivity(Java 数据连接)技术的简称,是一种可用于执行SQL语句的Java API。它由一些Java语言编写的类和接口组成;
    JDBC为数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。

    JDBC主要功能:
    (1)与数据库建立连接;
    (2)向数据库发送SQL语句;
    (3)处理数据返回的结果。

     JDBC有两个程序包:
    java.sql:核心包,这个包中的类主要完成数据库的基本操作,如生成连接、执行SQL语句及预处理SQL语句等;
    javax.sql:扩展包,主要为数据库方面的高级操作提供了接口和类。
    JDBC常用类和接口:
    Driver接口:在内部创建连接
    DriverManager类:装入所需的驱动程序,编程时调用它的方法来创建连接。
    Connection接口:使用该类对象创建Statement对象或PreparedStatement对象等。
    Statement接口:使用该类对象得到ResultSet对象。

    使用JDBC进行数据库应用开发的主要步骤:
    操作步骤:

    1. 创建数据源(使用JDBC-ODBC桥式驱动程序时必需),jdbc驱动方式则无需先配置数据源)
    2. 注册、加载特定的驱动程序;
    3. 创建Connection连接对象;
    4. 利用Connection对象生成Statement对象;
    5. 利用Statement对象执行SQL语句,如查询、更新、插入、删除等;
    6. 若是执行查询语句,还要从ResultSet读取数据;
    7. 关闭ResultSet、Statement、Connection等。

    ---2020-04-21


    (1)创建数据源:

    打开控制面板/管理工具/数据源(ODBC)(Windows操作系统)---这个我没有尝试过

    (2)加载驱动程序:
        格式:Class.forName("驱动程序名称");
       请注意:不同类型的数据库加载的驱动程序不同:
    JDBC-ODBC桥式
     以前面配置的mysqlserver数据源名为例:
    加载数据库驱动程序 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

    jdbc驱动方式(无需先配置数据源)
    下载对应数据库的JDBC驱动程序jar包文件,放入classpath中,Class.forName("com.mysql.jdbc.Driver");

    (3)创建数据库连接:
      格式:Connection conn = DriverManager.getConnection(url,“用户名", "密码");  
       其中:url类似于互联网的地址,它由三部分组成,即:协议:子协议:数据源标识,协议通常是jdbc,子协议是接受DBMS的名称和版本,数据源标识通常是数据源。
    JDBC-ODBC桥式:
    String url="jdbc:odbc:mysqlserver";
    Connection conn=DriverManager.getConnection(url,"root","123456");
    JDBC驱动方式:
    String url="jdbc:mysql://localhost:3306/db_mysise";
    Connection conn=DriverManager.getConnection(url,"root","123456");
    (4)利用Connection对象生成Statement对象(即语句):
     格式:
    Statement stmt = conn.createStatement( );
    Statement stmt =conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

    //ResultSet.TYPE_SCROLL_SENSITIVE 数据集支持指针滚动,ResultSet.CONCUR_UPDATABLE 数据库更新和客户端同步更新;
    (5)利用Statement对象执行SQL语句:
    执行select语句:将返回一个 ResultSet 对象
    格式:ResultSet rs = stmt.executeQuery(”Select 语句”);
    例如:ResultSet rs = stmt.executeQuery(”Select * from students”);
    结果集(即ResultSet 对象 ):符合查询条件的记录构成的集合,可以将它理解为一张二维表格。稍后将介绍从结果集中获取数据的方法。
    执行update(更新)、insert(插入)、delete(删除)语句:
    格式:
    [int  n=]stmt.executeUpdate(”update|insert|delete语句”);
    例如:stmt.executeUpdate(”update students set majorgrade='SA07'  where name='张三'”);
    返回结果:SQL操作影响的行数或者 0(表示没有成功执行),可以不保存。
    (6)若是执行查询语句,需要从ResultSet读取数据:
    通过返回的ResultSet对象来获得查询结果:
    ResultSet对象的指针一开始定位在第一条记录的前面。
    ResultSet提供了指针下移的方法:next(),指针可以不断下移,直到最后。除此之外,还有其它移动指针的方法。
    通常用rs.next()是否为false来判断结果集是否为空。
    ResultSet提供了一些方法来获得当前行中的不同字段的值:getXXX(int 列序号) 或 getXXX(String 列名)

     
    (7)调用close()方法,依次关闭ResultSet、Statement、Connection对象

    注意:关闭顺序与打开顺序相反。

     

    例子:

    jdbc驱动方式(无需先配置数据源),下载对应数据库的JDBC驱动程序jar包文件,放入classpath中即可

    代码例子:

     1 package jdbc_mysql;
     2 
     3 import java.sql.DriverManager;
     4 import java.sql.SQLException;
     5 
     6 public class JdbcTest {
     7     public static void main(String[] args) {
     8         String url = "jdbc:mysql://localhost:3306/a_test2";
     9         java.sql.Connection conn = null;
    10         java.sql.Statement stmt = null;
    11         java.sql.ResultSet rs = null;
    12         String drivername="com.mysql.jdbc.Driver";
    13         try {
    14             Class.forName(drivername);// 加载JDBC驱动
    15             // 打开链接
    16             System.out.println("连接数据库...");
    17             conn = DriverManager.getConnection(url, "用户名", "密码");
    18             // 执行查询
    19             System.out.println("实例化Statement对象...");
    20             stmt = conn.createStatement();
    21             
    22             String sql1;
    23             String sql2;
    24             String sql3;
    25             String sql4;
    26             // 查询
    27             sql1 = "select * from exam";
    28             rs = stmt.executeQuery(sql1);
    29             System.out.println("工号	校区	班级	老师");
    30             // 展开结果集数据库
    31             while (rs.next()) {
    32                 // 通过字段检索
    33                 int id=rs.getInt("id");
    34                 String testid = rs.getString("testid");
    35                 String school = rs.getString("school");
    36                 String classroom = rs.getString("classroom");
    37                 String teacher = rs.getString("teacher");
    38                 // 输出数据
    39                 System.out.println(id+"	"+testid + "	" + school + "	" + classroom + "	" + teacher);
    40             }
    41             // 插入
    42             sql2 = "INSERT INTO exam(id,testid,school,classroom,teacher)" + "values('1004','1004','1004','1004','1004')";
    43             int count2 = stmt.executeUpdate(sql2);
    44             if (count2 != 0)
    45                 System.out.println("成功插入一条记录");
    46             // 修改
    47             sql3 = "update exam set classroom=2 where id=1";
    48             int count3 = stmt.executeUpdate(sql3);
    49             if (count3 != 0)
    50                 System.out.println("成功修改一条记录");
    51             // 删除
    52             sql4 = "delete from exam where testid=2";
    53             int count4 = stmt.executeUpdate(sql4);
    54             if (count4 != 0)
    55                 System.out.println("成功删除一条记录");
    56 
    57         } catch (ClassNotFoundException e) {
    58             e.printStackTrace();
    59         } catch (SQLException e) {
    60             e.printStackTrace();
    61         } finally {// 关闭资源
    62             try {
    63                 if (rs != null)
    64                     rs.close();// 有查询,才需要用到结果集对象
    65                         // 也才有关闭java.sql.ResultSet rs
    66                 if (stmt != null)
    67                     stmt.close();
    68                 if (conn != null)
    69                     conn.close();
    70             } catch (SQLException e) {
    71                 e.printStackTrace();
    72             }
    73         }System.out.println("Goodbye!");
    74     }
    75 }
    JdbcTest

    ---2020-05-03


    prepareStatement和createStatement

    https://www.runoob.com/servlet/servlet-database-access.html

     

    ---2020-05-04

  • 相关阅读:
    Cogs 452. Nim游戏!(博弈)
    Cogs 876. 游戏(DP)
    Cogs 2546. 取石块儿(博弈)
    Bzoj 4147: [AMPPZ2014]Euclidean Nim(博弈)
    Codevs 3002 石子归并 3(DP四边形不等式优化)
    洛谷 P1041 传染病控制
    洛谷 P1967 货车运输
    洛谷 P1038 神经网络
    洛谷 P1027 Car的旅行路线
    洛谷 P1054 等价表达式
  • 原文地址:https://www.cnblogs.com/jiuzhen/p/12742721.html
Copyright © 2020-2023  润新知