zoukankan      html  css  js  c++  java
  • Java JDBC 基础

    JDBC API 包含以下几个核心部分:

        1:JDBC 驱动

        2:Connections (连接)

        3:Statements (声明)

        4:Result Sets (结果集)

    JDBC: 打开数据库连接

     Loading the JDBC Driver(加载数据库驱动)

     在打开数据库连接前必须先加载数据库驱动

    Class.forName("driverClassName");

     Opening the Connection(打开连接)

    String url = "jdbc:mysql://127.0.0.1:3306/appName";
    String user = "root";
    String password = "123456";
    Connection connection = DriverManager.getConnection(url,user,password);

    Closing the Connection(关闭连接)

    connection.close();

    JDBC:查询数据库

    对数据库进行操作,你需要创建SQL Statement,然后发送至数据库,得到返回结果.

    Statement statement = conn.createStatement(); 

    创建Statement后执行查询

    String sql = "select * from table";
    ResultSet result = statement.executeQuery(sql); 

    对结果集进行迭代

    while(result.next()){
        String name = result.getString("name");
        int age = result.getInt("age");
    }
    //根据数据库字段名获取对应的数据
    result.getString("columnName");
    result.getInt("columnName");
    result.getLong("columnName");
    result.getDouble("columnName");
    result.getBigDecimal("columnName");
    //通过字段索引顺序获取字段数据,索引从1开始
    result.getInt(1);
    result.getString(2);
    //通过字段名找到数据库对应字段索引的位置
    int columnIndex = result.findColumn("columnName");

    如果需要迭代大量数据,使用索引的效率要比查询字段名获取数据要快.

    完成数据迭代后需要对resultSet和statement进行关闭.

    result.close();
    statement.close();

    JDBC:更新数据库

    更新数据库包含更新数据库记录和删除数据库记录

    excuteUpdate()方法可以用来更新和删除数据库记录.

    更新记录

    Statement statement = conn.createStatement();
    String  sql = "update table set name = ’name‘ where id = 1“;
    int rowAffected = statement.executeUpdate(sql); 

    rowsAffected代表有多少条记录被更新了.

     删除记录

    像上面那样更新直接执行sql语句

    JDBC:结果集

    创建结果集

    可以通过执行Statement和PreparedStatement来创建结果集.

    Statement statement = conn.createStatement();
    String sql = "select * from table";
    ResultSet result = statement.executeQuery(sql); 
    
    PrepareStatement statement = conn.preparedStatement();
    ResultSet result = statement.executeQuery(sql);

    更新结果集

    result.updateString("name","alex");
    result.updateInt("age",33);
    result.updatBigDecimal("cofficient",new BigDecimal("0.1343");
    result.updateRow();

    数据将在调用updateRow()方法后才将数据真正更新至数据库,如果updateRow()执行与事物中则需等到事物提交才将数据提交更新.

    JDBC:PreparedStatement

    PreparedStatement特性:

    1. 更容易操作sql statement 参数

    2. 可对preparedstatement的重用

    3. 更容易的批处理

    操作示例

    String sql = "update people set firstname=? , lastname=? where id=?";
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setString(1, "Gary");
    preparedStatement.setString(2, "Larson");
    preparedStatement.setLong  (3, 123);
    int rowsAffected = preparedStatement.executeUpdate();

    创建PreparedStatement

    String sql = "select * from people where firstname=? and lastname=?";
    
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setString(1, "John");
    preparedStatement.setString(2, "Smith");
    ResultSet result = preparedStatement.executeQuery();

    PreparedStatement的重用

    String sql = "update people set firstname=? , lastname=? where id=?";
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setString(1, "Gary");
    preparedStatement.setString(2, "Larson");
    preparedStatement.setLong  (3, 123);
    
    int rowsAffected = preparedStatement.executeUpdate();
    preparedStatement.setString(1, "Stan");
    preparedStatement.setString(2, "Lee");
    preparedStatement.setLong  (3, 456);
    
    int rowsAffected = preparedStatement.executeUpdate();
    JDBC:批量更新操作

    Statement Batch Updates

    Statement statement = null;
    try{
         statement = conn.createStatement();
         statement.addBatch("update people set firstname='John' where id=123");
         statement.addBatch("update people set firstname='Eric' where id=456");
    
        int[] recordsAffected   = statement.executeBatch();
    }finally{
        if(statent != null) statement.close();  
    }

    PreparedStatement Batch Updates

    String sql = "update people set firstname=? , lastname=? where id=?";
    
    PreparedStatement preparedStatement = null;
    try{
        preparedStatement =
                connection.prepareStatement(sql);
        preparedStatement.setString(1, "Gary");
        preparedStatement.setString(2, "Larson");
        preparedStatement.setLong  (3, 123);
    
        preparedStatement.addBatch();
    
        preparedStatement.setString(1, "Stan");
        preparedStatement.setString(2, "Lee");
        preparedStatement.setLong  (3, 456);
     
        preparedStatement.addBatch();
    
        int[] affectedRecords = preparedStatement.executeBatch();
    
    }finally {
        if(preparedStatement != null) {
            preparedStatement.close();
        }
    }
    JDBC:事务

    开始事务

    conn.setAutoCommit(false);

    事务回滚

    conn.rollback();

    提交事务

    conn.commit();

    示例

    Connection connection = ...
    try{
        connection.setAutoCommit(false);
        Statement statement1 = null;
        try{
            statement1 = connection.createStatement();
            statement1.executeUpdate(
                "update people set name='John' where id=123");
        } finally {
            if(statement1 != null) {
                statement1.close();
            }
        }
        Statement statement2 = null;
        try{
            statement2 = connection.createStatement();
            statement2.executeUpdate(
                "update people set name='Gary' where id=456");
        } finally {
            if(statement2 != null) {
                statement2.close();
            }
        }
        connection.commit();
    } catch(Exception e) {
        connection.rollback();
    } finally {
        if(connection != null) {
            connection.close();
        }
    }
  • 相关阅读:
    Python 类中方法的内部变量,命名加'self.'变成 self.xxx 和不加直接 xxx 的区别
    用foreach遍历 datagridView 指定列所有的内容
    treeView1.SelectedNode.Level
    YES NO 上一个 下一个
    正则 单词全字匹配查找 reg 边界查找 精确匹配 只匹配字符 不含连续的字符
    抓取2个字符串中间的字符串
    sqlite 60000行 插入到数据库只用不到2秒
    将多行文本以单行的格式保存起来 读和写 ini
    将秒转换成时间格式
    richtextbox Ctrl+V只粘贴纯文本格式
  • 原文地址:https://www.cnblogs.com/tutar/p/3629308.html
Copyright © 2011-2022 走看看