• JDBC连接数据库


    一下内容引用自http://wiki.jikexueyuan.com/project/jdbc/connections.html

    在安装相应的驱动程序后,就可以用JDBC建立一个数据库连接。

    编写建立一个JDBC连接的程序是相当简单的。下面是简单的四个步骤:

    • 导入JDBC包:在Java代码中,用import语句添加所需的类。

    • 注册JDBC驱动程序:这一步会导致JVM加载所需的驱动程序到内存中执行,因此它可以实现JDBC请求。

    • 数据库URL制定:这是用来创建格式正确的地址指向想要连接的数据库。

    • 创建连接对象:最后,代码调用DriverManager对象的getConnection()方法来建立实际的数据库连接。

    一、导入JDBC包

    import语句告诉Java编译器在哪里可以找到在代码中引用的类,这些引用放置在源代码起始位置。

    使用标准的JDBC包,它允许选择,插入,更新和删除SQL表中的数据,添加以下引用到源代码中:

    import java.sql.* ;  // for standard JDBC programs
    import java.math.* ; // for BigDecimal and BigInteger 

    二、注册JDBC驱动程序

    在使用驱动程序之前,必须在程序里面注册它。通过加载Oracle驱动程序的类文件到内存中来注册驱动程序,因此它可以采用JDBC接口来实现。

    需要在程序里做一次注册即可。可以通过以下两种方式来注册一个驱动程序。

    1、方法1-Class.forName()

    注册一个驱动程序中最常用的方法是使用Java的Class.forName()方法来动态加载驱动程序的类文件到内存中,它会自动将其注册。这种方法更优越一些,因为它允许对驱动程序的注册信息进行配置,便于移植。

    下面是使用Class.forName()来注册Oracle驱动程序的示例:

    try {
       Class.forName("oracle.jdbc.driver.OracleDriver");
    }
    catch(ClassNotFoundException ex) {
       System.out.println("Error: unable to load driver class!");
       System.exit(1);
    }

    可以使用getInstance()方法来解决不兼容的JVM,但必须编写如下所示的两个额外的异常:

    try {
       Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    }
    catch(ClassNotFoundException ex) {
       System.out.println("Error: unable to load driver class!");
       System.exit(1);
    catch(IllegalAccessException ex) {
       System.out.println("Error: access problem while loading!");
       System.exit(2);
    catch(InstantiationException ex) {
       System.out.println("Error: unable to instantiate driver!");
       System.exit(3);
    }

    2、方法2-DriverManager.registerDriver()

    注册一个驱动程序的第二种方法是使用静态staticDriverManager.registerDriver()方法。

    如果使用的是不兼容JVM的非JDK,比如微软提供的,必须使用registerDriver()方法。

    下面是使用registerDriver()来注册Oracle驱动程序的示例:

    try {
       Driver myDriver = new oracle.jdbc.driver.OracleDriver();
       DriverManager.registerDriver( myDriver );
    }
    catch(ClassNotFoundException ex) {
       System.out.println("Error: unable to load driver class!");
       System.exit(1);
    }

    三、数据库URL制定

    当加载了驱动程序之后,可以通过DriverManager.getConnection()方法建立一个连接。为方便参考,以下列出了三个加载DriverManager.getConnection()方法:

    • getConnection(String url)
    • getConnection(String url, Properties prop)
    • getConnection(String url, String user, String password)

    在这里,每个格式需要一个数据库URL ,数据库URL是指向数据库的地址。

    在建立一个数据连接的时候,大多数会在配置一个数据库URL时遇到问题。

    下表列出了常用的JDBC驱动程序名和数据库URL。

    RDBMSJDBC 驱动程序名称URL 格式
    MySQL com.mysql.jdbc.Driver jdbc:mysql://hostname/databaseName
    ORACLE oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@hostname:port Number:databaseName
    DB2 COM.ibm.db2.jdbc.net.DB2Driver jdbc:db2:hostname:port Number/databaseName
    Sybase com.sybase.jdbc.SybDriver jdbc:sybase:Tds:hostname: port Number/databaseName

    URL格式所有加粗的部分都是静态的,需要将剩余部分按照数据库实际情况进行设置。

    四、创建连接对象

    已经列出了三种用DriverManager.getConnection()方法来创建一个连接对象。

    五、使用数据库URL的用户名和密码

    getConnection()最常用的方式是需要提供一个数据库URL,用户名和密码:

    假设使用的是Oracle的简化驱动程序,可以从URL获得数据库的主机名:端口:数据库名称的信息。

    如果有一台名为amrood的主机,它的TCP/IP地址192.0.0.1,Oracle监听器被配置为监听端口1521,数据库名称是EMP,然后完整的数据库URL是:

    jdbc:oracle:thin:@amrood:1521:EMP

    现在,必须调用适当的用户名和密码以及getConnection()方法来获得一个Connection对象,如下所示:

    String URL = "jdbc:oracle:thin:@amrood:1521:EMP";
    String USER = "username";
    String PASS = "password"
    Connection conn = DriverManager.getConnection(URL, USER, PASS);

    六、只使用数据库URL

    第二种DriverManager.getConnection()方法调用的方式只需要数据库URL参数:

    DriverManager.getConnection(String url);

    然而,在这种情况下,数据库的URL ,包括用户名和密码,将表现为以下的格式:

    jdbc:oracle:driver:username/password@database

    所以上述连接对象可以如下所示创建连接:

    String URL = "jdbc:oracle:thin:username/password@amrood:1521:EMP";
    Connection conn = DriverManager.getConnection(URL);

    七、使用数据库URL和Properties对象

    第三种DriverManager.getConnection()方法调用需要数据库URL和Properties对象:

    DriverManager.getConnection(String url, Properties info);

    Properties对象保存了一组关键数值。它通过调用getConnection()方法,将驱动程序属性传递给驱动程序。

    使用下面的代码可以建立与上述示例相同的连接:

    import java.util.*;
    
    String URL = "jdbc:oracle:thin:@amrood:1521:EMP";
    Properties info = new Properties( );
    info.put( "user", "username" );
    info.put( "password", "password" );
    
    Connection conn = DriverManager.getConnection(URL, info);

    八、关闭JDBC连接

    在JDBC程序的末尾,它必须明确关闭所有的连接到数据库的连接,以结束每个数据库会话。但是,如果忘了,Java垃圾收集器也会关闭连接,它会完全清除过期的对象。

    依托垃圾收集器,特别是在数据库编程,是非常差的编程习惯。应该养成用close()方法关闭连接对象的习惯。

    为了确保连接被关闭,可以在代码中的'finally'程序块中执行。 无论异常是否发生,finally程序是肯定会被执行的。

    要关闭上面打开的连接,应该调用close()方法,如下所示:

    conn.close();

    对数据库管理员来说,明确的关闭连接到DBMS的连接,是相当开心的事。

    示例:

    //STEP 1. Import required packages
    import java.sql.*;
    
    public class FirstExample {
        // JDBC driver name and database URL
        static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        static final String DB_URL = "jdbc:mysql://localhost/Test?serverTimezone=UTC";
    
        // Database credentials
        static final String USER = "root";
        static final String PASS = "root";
    
        public static void main(String[] args) {
            Connection conn = null;
            Statement stmt = null;
            try {
                // STEP 2: Register JDBC driver
                Class.forName("com.mysql.jdbc.Driver");
    
                // STEP 3: Open a connection
                System.out.println("Connecting to database...");
                conn = DriverManager.getConnection(DB_URL, USER, PASS);
    
                // STEP 4: Execute a query
                System.out.println("Creating statement...");
                stmt = conn.createStatement();
                String sql;
                sql = "SELECT id, first, last, age FROM Employees";
                ResultSet rs = stmt.executeQuery(sql);
    
                // STEP 5: Extract data from result set
                while (rs.next()) {
                    // Retrieve by column name
                    int id = rs.getInt("id");
                    int age = rs.getInt("age");
                    String first = rs.getString("first");
                    String last = rs.getString("last");
    
                    // Display values
                    System.out.print("ID: " + id);
                    System.out.print(", Age: " + age);
                    System.out.print(", First: " + first);
                    System.out.println(", Last: " + last);
                }
                // STEP 6: Clean-up environment
                rs.close();
                stmt.close();
                conn.close();
            } catch (SQLException se) {
                // Handle errors for JDBC
                se.printStackTrace();
            } catch (Exception e) {
                // Handle errors for Class.forName
                e.printStackTrace();
            } finally {
                // finally block used to close resources
                try {
                    if (stmt != null)
                        stmt.close();
                } catch (SQLException se2) {
                } // nothing we can do
                try {
                    if (conn != null)
                        conn.close();
                } catch (SQLException se) {
                    se.printStackTrace();
                } // end finally try
            } // end try
            System.out.println("Goodbye!");
        }// end main
    }// end FirstExample

    这将产生如下所示结果:

  • 相关阅读:
    MSP430F149学习之路——蓝牙模块
    MSP430F149学习之路——SPI
    MSP430推荐网站
    MSP430F149学习之路——UART
    MSP430F149学习之路——比较器Comparaor_A
    MSP430F149学习之路——PWM信号
    MSP430F149学习之路——捕获/比较模式
    MSP430F149学习之路——时钟1
    CUDA学习笔记(三)——CUDA内存
    CUDA学习笔记(一)——CUDA编程模型
  • 原文地址:https://www.cnblogs.com/EasonJim/p/6993598.html
Copyright © 2020-2023  润新知