zoukankan      html  css  js  c++  java
  • JDBC + MySQL 示例

    jdbc mysql connection 教程

    翻译自:JDBC MySQL Connection Tutorial

    Java Database Connectivity (JDBC) 是一个基于Java的数据访问技术,它定义了用户入户访问一个数据库。它提供了一组在数据库查询、修改数据的方法。JDBC类包含在java.sqljavax.sql包中。

    按照如下步骤建立一个JDBC开发环境,并在这个环境上运行JDBC MYSQL示例程序。

    1. 安装 Java

    确认你已经安装了Java SE。安装参考 Windows Ubuntu

    2. 下载并安装Eclipse IDE

    Eclipse安装参考链接

    3. 下载并安装MySQL数据库

    MySQL安装参考链接

    • 此Java数据库应用程序以MySQL为例,参考次链接在MySQL上创建database、tables,插入数据等等。

    4. Java MySQL连接器

    JDBC API几乎包含了任意一个数据库的可独立工作的接口。每一种数据库都需要一个特有的驱动,该驱动实现了JDBC API。

    JDBC数据库连接器提供了访问数据库的入口,为了能通过JDBC访问数据库,我们需要数据库厂商提供的JDBC驱动。这个驱动通常是以jar或zip文件或其它有效形式同数据库产品一起在官网发布的。这些文件必须放在classpath中(后面的“在Eclipse中配置JDBC驱动”步骤中会讲到),否则会出现class-not-found-exceptions,表示未在classpath中发现驱动。

    • MySQL Connector/J是官方的MySQL JDBC驱动。
    • 可以通过此链接下载Java语言访问MySQL的连接器的jar文件:http://dev.mysql.com/downloads/connector/j/。此教程使用JDBC MySQL连接器5.1版本,将下载文件解压。

    5. JDBC MySQL示例数据库

    此示例使用的database为"jdbcdb",其中包含下面的表;

    • 在MySQL中创建一个名为"jdbcdb"的database.
    • 在该database里创建下面的表.

    代码:

    sudo service mysql
    mysql -u [此处username] -p
    [此处password]
    create database jdbcdb;
    use jdbcdb;
    

    5.1 Department Table:

    Field Type Key Extra
    dept_id int Primary Key auto_increment
    dept_name varchar(50)
    location varchar(50)

    代码:

    CREATE TABLE Department (
    	dept_id int PRIMARY KEY AUTO_INCREMENT,
        dept_name varchar(50),
        location varchar(50)
    );
    

    5.2 Employee Table:

    Field Type Key Extra
    emp_id int Primary Key auto_increment
    emp_name varchar(50)
    dob date
    salary double
    dept_id int Foreign key references department(dept_id)

    代码:

    CREATE TABLE Employee (
    	emp_id int PRIMARY KEY AUTO_increment,
        emp_name varchar(50),
        dob date,
        salary double,
        dept_id int,
        FOREIGN KEY (dept_id) REFERENCES Department(dept_id)
    );
    

    最后,我们分别向两个表插入一些数据,比如:

    insert into Department value(1, 'Finace', 'Service Building');
    insert into Department value(2, 'Technology', 'Center Building');
    insert into Employee value(1, 'wcb', '2088-08-08', 2888.8, 2);
    

    6. 在Eclipse IDE中建立Java项目

    • 打开Eclipse IDE
    • 建立一个新的Java项目,命名为”JDBCMySQLSample“。如果你是新手,参考此链接了解Java和Eclipse.

    7. JDBC MySQL连接URL字符串

    我们写一个类 (JDBCMySQLConnection) 来定义数据库连接的配置声明和方法,使JDBC连接到MySQL数据库。

    7.1 使用java.sql 包的接口

    你需要从java.sql.*包中导入需要的类/接口,它们是Java Application和数据库之间的桥梁。

    7.2 加载MySQL Java的驱动

    Java MySQL驱动(com.mysql.jdbc.Driver)可从下载的Java MySQL连接器的JAR文件中获得。这个连接器JAR文件要被包含到工程的classpath,后面的”在Eclipse中配置JDBC驱动“中会讲。
    语句Class.forName("com.mysql.jdbc.driver")会使MySQL Java驱动被加载到内存。
    在下面的代码中,我们创建一个静态字符串常量作为参数传递给Class.forName方法

    public static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
    Class.forName(DRIVER_CLASS);
    

    7.3 建立Java MySQL连接

    我们通过DriverManager类的getConnection()方法获取从Java到MySQL的连接对象,此方法需要JDBC MySQL连接URL字符串,MySQL数据库的用户名和密码作为参数。在此示例中,我们已将这些参数作为常量传递给getConnection()方法。

    public static final String URL = "jdbc:mysql://localhost/jdbcdb";
    public static final String USER = "YOUR_DATABASE_USERNAME";
    public static final String PASSWORD = "YOUR_DATABASE_PASSWORD";
    . . .
    . . .
    Connection connection = DriverManager.getConnection(URL, USER, PASSWORD);
    
    7.3.1 Java-数据库连接URL字符串

    jdbc:<DBMS>://<HOSTNAME>:<PORT_NUMBER>/YOUR_DATABASE_NAME
    例如,Java-MySQL连接URL字符串:
    jdbc:mysql://localhost:3306/jdbcdb
    其中,

    • "jdbc" - 所有数据库都需要有的
    • "mysql" - 任何关系型数据库需要。此数据库是 mysql
    • "localhost" - 你的数据库的服务器主机名
    • 3306 - MySQL的默认端口号,如果没有改为其它端口可以省略
    • YOUR_DATABASE_NAME - MySQL database的名称,在此示例中就是"jdbcdb"

    为了完成上面的步骤,新建一个类JDBCMySQLConnection,并放在包com.theopentutorials.jdbc.db中,然后复制下面的代码:

    package com.theopentutorials.jdbc.db;
     
    //Step 1: Use interfaces from java.sql package 
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
     
    public class JDBCMySQLConnection {
        //static reference to itself
        private static JDBCMySQLConnection instance = new JDBCMySQLConnection();
        public static final String URL = "jdbc:mysql://localhost/jdbcdb";
        public static final String USER = "YOUR_DATABASE_USERNAME";
        public static final String PASSWORD = "YOUR_DATABASE_PASSWORD";
        public static final String DRIVER_CLASS = "com.mysql.jdbc.Driver"; 
         
        //private constructor
        private JDBCMySQLConnection() {
            try {
                //Step 2: Load MySQL Java driver
                Class.forName(DRIVER_CLASS);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
         
        private Connection createConnection() {
     
            Connection connection = null;
            try {
                //Step 3: Establish Java MySQL connection
                connection = DriverManager.getConnection(URL, USER, PASSWORD);
            } catch (SQLException e) {
                System.out.println("ERROR: Unable to Connect to Database.");
            }
            return connection;
        }   
         
        public static Connection getConnection() {
            return instance.createConnection();
        }
    }
    

    8. Employee类

    我们写一个类Employee,其属性为数据库中Employee表的属性。
    例如,为了查询Employee表,我们用下面代码实现Employee类;

    package com.theopentutorials.jdbc.to;
     
    import java.util.Date;
     
    public class Employee {
         
        private int empId;
        private String empName;
        private Date dob;
        private double salary;
        private int deptId;
         
        public int getEmpId() {
            return empId;
        }
        public void setEmpId(int empId) {
            this.empId = empId;
        }
        public String getEmpName() {
            return empName;
        }
        public void setEmpName(String empName) {
            this.empName = empName;
        }
        public Date getDob() {
            return dob;
        }
        public void setDob(Date dob) {
            this.dob = dob;
        }
        public double getSalary() {
            return salary;
        }
        public void setSalary(double salary) {
            this.salary = salary;
        }
        public void setDeptId(int deptId) {
            this.deptId = deptId;
        }
        public int getDeptId() {
            return deptId;
        }
         
        //toString()
        @Override
        public String toString() {
            return "Employee [empId=" + empId + ", empName=" + empName + ", dob="
                    + dob + ", salary=" + salary + ", deptId=" + deptId + "]";
        }       
    }
    

    9. Java Application Client (main())

    • 一个Java-数据库的Application处理任何的SQL语句必须经过以下几步:
      1. 建立一个连接。(上面提到的JDBCMySQLConnection类已经完成)
      2. 创建一个Statement对象(41行)
      3. 执行查询语句(execute(String sql)方法,42行)
      4. 处理ResultSet对象。仅在查询语句后需要。(44-51行)
      5. 关闭连接,立即释放Statement对象的数据库和JDBC资源。(57行)

    我们写一个 “JDBCMySQLDemo” 类放在“com.theopentutorials.jdbc.main” 包中,来测试JDBC MySQL连接并执行一个简单的查询语句。

    package com.theopentutorials.jdbc.main;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import com.theopentutorials.jdbc.db.JDBCMySQLConnection;
    import com.theopentutorials.jdbc.to.Employee;
     
    public class JDBCMySQLDemo {
        public static void main(String[] args) {        
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Enter the EmployeeID:");
             
            int employeeId;
            try {
                employeeId = Integer.parseInt(br.readLine()); //21行
                JDBCMySQLDemo demo = new JDBCMySQLDemo();
                Employee employee = demo.getEmployee(employeeId); //23行
                System.out.println(employee);           
            } catch (NumberFormatException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }       
        }
     
        public Employee getEmployee(int employeeId)  {      
            ResultSet rs = null;
            Connection connection = null;
            Statement statement = null; 
             
            Employee employee = null;
            String query = "SELECT * FROM Employee WHERE emp_id=" + employeeId; //38行
            try {           
                connection = JDBCMySQLConnection.getConnection();
                statement = connection.createStatement(); //41行
                rs = statement.executeQuery(query);  //42行
                 
                if (rs.next()) {       //44行
                    employee = new Employee();
                    employee.setEmpId(rs.getInt("emp_id"));
                    employee.setEmpName(rs.getString("emp_name"));
                    employee.setDob(rs.getDate("dob"));
                    employee.setSalary(rs.getDouble("salary"));
                    employee.setDeptId((rs.getInt("dept_id")));
                }    //51行
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                if (connection != null) {
                    try {
                        connection.close();    //57行
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
            return employee;
        }
    }
    

    这个JDBC MySQL示例得到用户输入的employee ID,在数据库中找到这个employee并且利用标准输出显示详情。
    这段程序步骤如下:

    • 21行根据用户输入得到employee ID
    • 23行调用getEmployee()方法,并传给参数employee ID
    • 38行为查询语句
    • 40行建立java-MySQL连接
    • 41行获得statement对象
    • 42行执行查询并返回ResultSet对象
    • 44-51行处理ResultSet对象
    • 57行关闭数据库连接

    10. 在Eclipse中配置JDBC驱动

    如果你此时运行JDBCMySQLDemo类会产生如下异常:
    java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    你需要将之前下载好的Java MySQL Connector JAR文件添加到工程的classpath中。
    右击工程名(JDBCMySQLSample) -> Properties -> Buildpath -> Libraries -> Add External JAR 然后选择 “mysql-connector-java-5.1.14-bin.jar” JAR 文件.

    11. 输出

    运行JDBCMySQLDemo类,将得到如下的输出结果:

    12. 文件结构

    此示例项目的完整的文件结构如下所示:

  • 相关阅读:
    防删没什么意思啊,直接写废你~
    绝大多数情况下,没有解决不了的问题,只有因为平时缺少练习而惧怕问题的复杂度,畏惧的心理让我们选择避让,采取并不那么好的方案去解决问题
    Java 模拟面试题
    Crossthread operation not valid: Control 'progressBar1' accessed from a thread other than the thread it was created on
    一步步从数据库备份恢复SharePoint Portal Server 2003
    【转】理解 JavaScript 闭包
    Just For Fun
    The database schema is too old to perform this operation in this SharePoint cluster. Please upgrade the database and...
    Hello World!
    使用filter筛选刚体碰撞
  • 原文地址:https://www.cnblogs.com/WCB-ACM/p/5352328.html
Copyright © 2011-2022 走看看