zoukankan      html  css  js  c++  java
  • Java JDBC学习

        要连接数据库,可以向java.sql.DriverManager要求并获得java.sql.Connection对象,Connection是数据库连接的具体代表对象,一个Connection对象就代表一个数据库连接,可以使用DriverManager的getConnection方法,制定JDBC URL作为自变量并获得Connection对象:

        String url ="jdbc:mysql://localhost:3306/demo?" +

                    "user=root&password=123";

        Connection  conn = DriverManager.getConnection(url);

        可以将JDBC URL、用户名称与密码等设置信息编写在一个属性文件中,由程序读取这个属性文件中的信息,如果需要变更信息,则只需要修改属性文件,无需修改程序、重新编译。在 Java SE中,属性文件的读取可以交给java.util.Properties类。

        在数据库应用程序中,数据库连接的获得是一个耗费时间与资源的操作,包括了建立 Socket connection 、交换数据(用户密码验证、相关参数)、会话(Session)、日志(Loggin)、分配进程(Process)等资源。

        如果数据库的操作是很频繁的动作,则要考虑到重复使用连接的需求,以节省在获得连接时的时间与资源,通常会实现一个连接池,有需要连接时可以从池中获得,不需要连接时就将连接放回池中,而不是直接关闭连接。

    使用JDBC进行数据操作

        表数据操作的基本技术如下:

        1. Statement类用于执行静态SQL语句并反悔它所生成结果的对象。一个Statement对象只能打开一个ResultSet对象。

        2. Statement类的execute(String sql)方法执行给定的SQL语句,它的返回值类型为boolean。标志如果第一个结果为ResultSet对象,返回true,如果其为更新计数或不存在任何结果,返回false。

        3. Statement类的executeQuery(String sql)方法用于执行查询SQL语句,返回查询的结果集,一个ResultSet对象。

        4. ResultSet的next()方法的作用是将指针从当前位置向下移动一行。它的返回值类型为boolean,表示如果新的当前行不为Null,则返回true,负责返回false,此方法通常用于while语句并作为判断是否存在数据的依据。

        5. ResultSet的getString(String columnName)方法的作用是以字符串的形式返回ResultSet对象的当前行中指定列名的值。

        6. Statement类的executeUpdate(String sql)方法用于执行更新SQL语句,包括插入、修改和删除语句,返回一个int值,表示更新的行的计数。

        7. ResultSetMetaData接口的作用是获取ResultSet对象中列的类型和属性信息。由于ResultSetMetaData是接口,所以没有构造函数,所以不能使用new创建ResultSetMetaData对象,但是可以通过ResultSet的getMetaData()创建,如 

            String sql = "select ...";

            Statement sm = null;

            sm = con.getStatement();    

            ResultSet= sm.executeQuery(sql);

            ResultSetMetaData md = rs.getMetaData();

        8.ResultSetMetaData的getColumnName(int column)可以获取指定列的名称,其中column指的是列数。

        9. ResultSetMetaData的getColumnTypeName(int column)返回检索指定列的数据库特定的类型名称,其中column指的是列数。

        10. ResultSetMetaData的isNullable(int column)的作用是说明指定列中的值是否可以为null,其中column指的是列数。

    批处理:

        1. DatabaseMetaData接口是描述有关数据库的整体综合信息,由于DatabaseMetaData是接口,所以没有构造方法,故不能用new来创建DatabaseMetaData对象,但是可以通过Connection 的getMetaData()方法来创建。例如:

            DatabaseMetaData = con.getMetaData();

        2. DataBaseMetaData类的supportsBatchUpdates方法用于判断此数据库是否支持批量更新。其返回值为boolean。

        3. Statement的addBatch(String sql)方法将给定的SQL命令添加至此Statement对象的当前命令列表中,此方法可多次调用。

        4. Statement的executeBatch()方法的作用是将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。

        

            public static int[] startBatch(Connection con ,String[] sqls) throws Exception

            {

                if(sqls == null)    return null;

                Statement sm = con.createStatement();

                for(int i = 0 ; i<sqls.length; i++)

                {

                    sm.addBatch(sqls[i]);

                }

                return sm.executeBatch();

            }

            函数调用结果:

            int[] results = startBatch(con,sqls);

            for(int i = 0;i<sqls.length ;i++)

            {

                if(results[i] >0 ) System.out.println("语句" + sqls[i] + "执行成功,影响了" +results[i] + "行数据");

                else if(results[i] == Statement.SUCCESS_NO_INFO) System...影响的函数未知;

                else if( results[i] == Statement.EXCUTE_FAILED)    执行失败;

            }

    事务处理:

        1. DatabaseMetaData的supportsTransactions()方法可以判断数据库是否支持事物。它的返回值类型为boolean。

        2. 数据库连接Connection对象默认是自动提交的。为了控制事务提交,则需在事务提交之前,调用Connection的setAutoCommit(boolean autoCommit)方法关闭数据库连接的自动提交模式,其中参数autoCommit为true,表示启用自动提交模式;为false,表示禁用该模式。以后只有调用Connection的commit方法,才会将所有的操作提交到数据库。

        3. Connection的rollback方法,执行回滚操作,其作用是如果一同进行操作的语句,有一条出现了错误,那么其他的语句也会操作无效。使用此方法时,需要注意的是只能在setAutoCommit(false)的模式下使用。

         try

         {

            System.out.println("事物开始");

            con.setAutoCommit(false);

            sm = con.createStatement();

            for(int i = 0;i<sqls.length;i++)

            {

                sm.execute(sqls[i]);        //执行sql语句,但没更新到数据库

            }

            System.out.println("事物提交");

            con.commit();

            System.out.println("事物结束");

        }

        catch(SQLException e)

        {    

            con.rollback();        //出现异常时,进行回滚操作,取消前面执行的操作。

        }

  • 相关阅读:
    改进IT服务流程17步 IT管理
    ISO 17799 /27001标准简介
    风险管理_cissp
    操作安全_cissp
    isms实施步骤
    CISSP要点-第五章安全体系结构和设计
    WLC+AP,跨专线实现异地多SSID流量分流 H-REAP
    186、说一下C++左值引用和右值引用
    180、C++从代码到可执行程序经历了什么?
    177、你知道回调函数吗?它的作用?
  • 原文地址:https://www.cnblogs.com/fanchangfa/p/2592246.html
Copyright © 2011-2022 走看看