JDBC编程:JDBC原理和基础编程

什么是JDBC:

JDBC(Java DataBase Connectivity)就是Java数据库连接,简单说就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。

JDBC编程:JDBC原理和基础编程_第1张图片

特点:

1)跨平台运行:这是继承了Java语言的“一次编译,到处运行”的特点;

2)不受数据库供应商的限制:巧妙在于JDBC设有两种接口,一个是面向应用程序层,其作用是使得开发人员通过SQL调用数据库和处理结果,而不需要考虑数据库的提供商;另一个是驱动程序层,处理与具体驱动程序的交互;

常用接口:

1)Driver接口:
Driver接口由数据库厂家提供,作为java开发人员,只需要使用Driver接口就可以了。

2)Connection接口:
Connection与特定数据库的连接(会话),在连接上下文中执行sql语句并返回结果。

常用方法:

  • createStatement():创建向数据库发送sql的statement对象。
  • prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
  • prepareCall(sql):创建执行存储过程的callableStatement对象。
  • setAutoCommit(boolean autoCommit):设置事务是否自动提交。
  • commit() :在链接上提交事务。
  • rollback() :在此链接上回滚事务。

3)Statement接口:
用于执行静态SQL语句并返回它所生成结果的对象。

三种Statement类:

  • Statement:由createStatement创建,用于发送简单的SQL语句(不带参数)。
  • PreparedStatement :继承自Statement接口,由preparedStatement创建,用于发送含有一个或多个参数的SQL语句。
  • CallableStatement:继承自PreparedStatement接口,由方法prepareCall创建,用于调用存储过程。

常用Statement方法:

  • execute(String sql):运行语句,返回是否有结果集
  • executeQuery(String sql):运行select语句,执行查询操作,返回ResultSet结果集。
  • executeUpdate(String sql):运行insert/update/delete语句,执行更新操作。
  • addBatch(String sql) :把多条sql语句放到一个批处理中。
  • executeBatch():向数据库发送一批sql语句执行。

4)ResultSet接口:
执行sql查询语句返回的结果集。

ResultSet提供检索不同类型字段的方法:

  • getString(int index)、getString(String columnName):获得在数据库里是varchar、char等类型的数据对象。
  • getFloat(int index)、getFloat(String columnName):获得在数据库里是Float类型的数据对象。
  • getDate(int index)、getDate(String columnName):获得在数据库里是Date类型的数据。
  • getBoolean(int index)、getBoolean(String columnName):获得在数据库里是Boolean类型的数据。
  • getObject(int index)、getObject(String columnName):获取在数据库里任意类型的数据。

ResultSet对结果集进行滚动的方法:

  • next():移动到下一行;
  • Previous():移动到前一行;
  • absolute(int row):移动到指定行;
  • beforeFirst():移动resultSet的最前面;
  • afterLast() :移动到resultSet的最后面;

【使用后依次关闭对象及连接:ResultSet → Statement → Connection】

编程步骤:

1)加载驱动程序;

Class.forName(driverClass)
//加载MySql驱动
Class.forName("com.mysql.jdbc.Driver")
//加载Oracle驱动
Class.forName("oracle.jdbc.driver.OracleDriver")

2)获取数据连接:通过DriverManager类创建数据库连接对象Connection;

 Connection conn = DriverManager.getConnection(url, user,password);

3)创建Statement对象:

 Statement stmt = conn.createStatement();

4)调用Statement对象的相关方法执行相对应的 SQL 语句:通过execuUpdate()方法用来数据的更新,包括插入和删除等操作;

5)关闭数据库连接:使用完数据库或者不需要访问数据库时,通过Connection的close() 方法及时关闭数据连接;

例:

获取连接数据库资源

private static ResourceBundle bundle= ResourceBundle.getBundle("connect");//资源包
private static String driver= bundle.getString("driver");//驱动程序
private static String url=bundle.getString("url"); //数据库连接地址
private static String user=bundle.getString("user");//用户名称
private static String password=bundle.getString("password");//用户密码

创建连接

public Connection getConn() {
        try {
            Class.forName(driver);//加载驱动
            Connection conn;
            conn=DriverManager.getConnection(url, user, password);//创建连接
            return conn;
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

执行方法

public void Update(String sql, ArrayList parameters) {
    Connection connection = getConn();//获取连接
    PreparedStatement ps = null;//初始化陈述清单
    try {
        connection.setAutoCommit(false);// 更改JDBC事务的默认提交方式,默认是true,是自动提交;
        ps = connection.prepareStatement(sql);//设置sql语句    
        
        for (int i = 0; i < parameters.size(); i++) {
        ps.setString(i + 1, parameters.get(i));//设置参数
        }
        ps.executeUpdate();
        connection.commit();//提交JDBC事务,如果没问题,这时才真正的删除了;
        connection.setAutoCommit(true);// 恢复JDBC事务的默认提交方式;
                                        
    } catch (SQLException e) {
        try {
             //回滚JDBC事务,出现异常,为保证数据完整性,此次操作回滚,不删除;
            connection.rollback();
        } catch (SQLException e1) {
        e1.printStackTrace();
         }
        e.printStackTrace();
    }finally{
                    
        try {                                     
            //关闭资源
            ps.close();connection.close();
        } catch (SQLException e) {e.printStackTrace(); }}}

你可能感兴趣的:(数据库,jdbc,java)