zoukankan      html  css  js  c++  java
  • Java JDBC基础学习小结

    JDBC是一个Java应用程序接口,作用是封装了对数据库的各种操作。JDBC由类和接口组成,使用Java开发数据库应用都需要4个主要的接口:Driver、Connection、Statement、ResultSet,这些接口定义了使用SQL访问数据库的一般架构。  

    1、JDBC相关类和API

    JDBC是一个Java应用程序接口,作用是封装了对数据库的各种操作。JDBC由类和接口组成,使用Java开发数据库应用都需要4个主要的接口:Driver、Connection、Statement、ResultSet,这些接口定义了使用SQL访问数据库的一般架构。

    • Driver接口

    Driver接口是所有JDBC程序必须实现的接口,该接口专门提供给数据库厂商使用。编写JDBC程序时,必须制定数据库驱动程序或类库加载到项目classpath中。

    • DriverManager类

    DriverManager用于加载JDBC驱动并创建与数据库的连接。其中定义了2个重要的静态方法:

    1 DriverManager.registerDriver(Driver driver) // 用于向DeriverManager注册给定的JDBC驱动程序
    2 DriverManager.getConnection(String url, String user, String pwd) // 建立与数据库的连接,返回表示连接的Connection对象
    • Connection接口

    Connection代表与数据库的连接,其中定义了一系列的方法:

    1 Connection.getMetaData(); // 返回表示数据库元数据的DatabaseMetaData对象
    2 Connection.createStatement(); // 创建一个Statement对象
    3 Connection.prepareStatement(String sql); // 创建一个PreparedStatement对象
    4 Connection.prepareCall(String sql); // 创建一个CallableStatement对象来调用数据库存储过程
    • Statement接口

    Statement接口用于向数据库发送SQL语句。

    1 Statement.execute(String sql); // 执行各种SQL语句,返回一个boolean类型值,true表示执行的SQL语句具备查询结果,可通过Statement.getResultSet()方法获取
    2 Statement.executeUpdate(String sql); // 执行SQL中的insert/update/delete语句,返回一个int值,表示受影响的记录的数目
    3 Statement.executeQuery(String sql); // 执行SQL中的select语句,返回一个表示查询结果的ResultSet对象
    • ResultSet接口
    1 ResultSet.next(); // 将游标由当前位置移动到下一行
    2 ResultSet.getString(String columnName); // 获取指定字段的String类型值
    3 ResultSet.getString(int columnIndex); // 获取指定索引的String类型值
    4 ResuleSet.previous(); // 将游标由当前位置移动到上一行

    2、程序示例

    数据库IP 192.168.1.150,数据库名称为test,数据表名称persion,表结构为:

     表中原有数据

    JDBC连接MySQL程序示例

     1 package server;
     2 
     3 import java.sql.Connection;
     4 import java.sql.DriverManager;
     5 import java.sql.ResultSet;
     6 import java.sql.Statement;
     7 
     8 public class DemoJDBC {
     9     public static void main(String[] args) throws Exception {
    10         // 加载驱动类
    11         Class.forName("com.mysql.jdbc.Driver");
    12         
    13         // 通过DriverManager获取数据库连接
    14         String url = "jdbc:mysql://192.168.1.150/test";
    15         String user = "teamtalk";
    16         String password = "123456";
    17         Connection connection = (Connection) DriverManager.getConnection(
    18                 url, user, password);
    19         
    20         // 通过Connection对象获取Statement对象、Statement执行SQL语句
    21         Statement statement = (Statement) connection.createStatement();  
    22         ResultSet resultSet = statement.executeQuery("select * from persion");
    23         
    24         // 操作ResultSet结果集
    25         while (resultSet.next()) {
    26             // 第一种获取字段方式
    27             System.out.println(resultSet.getString(1) + " " + 
    28                     resultSet.getString(2) + " " + resultSet.getString(3));
    29             System.out.print("---- ");
    30             // 第二种获取字段方式
    31             System.out.println(resultSet.getString("id") + " " +
    32                     resultSet.getString("name") + " " + resultSet.getString("age"));
    33         }
    34         
    35         int ret = statement.executeUpdate("insert persion (name, age) value ('bobo', 24)");
    36         if (ret > 0) {
    37             System.out.println("  insert ok");
    38             resultSet = statement.executeQuery("select * from persion");
    39   
    40             while (resultSet.next()) {
    41                 System.out.println(resultSet.getString(1) + " " + 
    42                         resultSet.getString(2) + " " + resultSet.getString(3));
    43             }
    44         }
    45         
    46         // 关闭数据库连接
    47         resultSet.close();
    48         statement.close();
    49         connection.close();
    50     }
    51 }

    程序运行结果为:

      数据表中数据

    JDBC使用PreparedStatement进行数据插入操作程序示例

     1 package server;
     2 
     3 import java.sql.Connection;
     4 import java.sql.DriverManager;
     5 import java.sql.ResultSet;
     6 import java.sql.Statement;
     7 
     8 import com.mysql.jdbc.PreparedStatement;
     9 
    10 public class DemoJDBC {
    11     public static void main(String[] args) throws Exception {
    12         // 加载驱动类
    13         Class.forName("com.mysql.jdbc.Driver");
    14     
    15         // 通过DriverManager获取数据库连接
    16         String url = "jdbc:mysql://192.168.1.150/test";
    17         String user = "teamtalk";
    18         String password = "123456";
    19         Connection connection = (Connection) DriverManager.getConnection(
    20                 url, user, password);
    21         
    22         PreparedStatement statement = (PreparedStatement) connection.prepareStatement(
    23                 "insert persion (name, age) value (?, ?)");
    24         statement.setString(1, "hdu");
    25         statement.setInt(2, 21);
    26         statement.executeUpdate();
    27         
    28         ResultSet resultSet = statement.executeQuery("select * from persion");
    29         // 操作ResultSet结果集
    30         while (resultSet.next()) {
    31             // 第一种获取字段方式
    32             System.out.println(resultSet.getString(1) + " " + 
    33                     resultSet.getString(2) + " " + resultSet.getString(3));
    34         }
    35 
    36         // 关闭数据库连接
    37         resultSet.close();
    38         statement.close();
    39         connection.close();
    40     }
    41 }

    程序输出为:

     数据库中数据为:

    3、小结

    当程序远程访问mysql时,不能使用root账号和密码登录,这样是为了mysql的安全考虑,可以先新建一个mysql账号用来测试。

    如果远程MySQL主机是Centos7的话,需要展暂时关闭防火墙,使用命令 systemctl stop firewalld.service。

    JDBC是一套操作数据库的接口,相当于数据库的抽象层,我们可以通过它来操作常用的数据库,进行SQL操作。当我们写程序时,对于一个表(user),可以新建其对应的类(User),其提供各种get/set方法;然后新建一个数据库操作工具类(JDBCUtils),其提供与数据库建立连接、关闭连接方法;最后新建一个对表的操作类(UserDao),其封装了对表User的添加、删除、查询和更新等操作。

  • 相关阅读:
    帧同步与状态同步
    撸个服务端出来系列(五)
    撸个服务端出来系列(四)
    撸个服务端出来系列(三)
    撸个服务端出来系列(二)
    新博客手机适配的问题
    撸个服务端出来系列(一)
    高性能事件分发器,lua 版
    cocos2dx lua UI栈
    cocos2dx3.x+cocostudio多屏幕分辨率适配解决方案(干货)
  • 原文地址:https://www.cnblogs.com/luoxn28/p/5274435.html
Copyright © 2011-2022 走看看