Java中使用JDBC连接数据库

  1. 加载驱动(告诉Java程序,即将要链接的是哪中类型的数据库)
  2. 获取链接【创建数据库连接】(表示JVM的进程和数据库进程之间的通道打开了,数据进程之间通信,重量级的,使用完成之后一定要关闭进程)
  3. 获取数据库操作对象【创建执行sql的对象】
  4. 执行语句【DQL,DML...】
  5. 处理执行结果【数据结果集】(只用在执行查询SELECT语句时,才会处理查询结果集)
  6. 释放资源(使用完资源后一i定要关闭资源)

pox.xml文件配置(下载驱动)

1     <dependencies>
2         <dependency>
3             <groupId>mysql</groupId>
4             <artifactId>mysql-connector-java</artifactId>
5             <version>5.1.46</version>
6         </dependency>
7     </dependencies>

 

代码示例一:

直接注册驱动操作数据库

此方法操作链接数据库不推荐使用,操作不方便,更不好维护,数据库之间切换繁琐

import java.sql.*;

public class ChengDatebaseInsert {

    public static void main(String[] arge) {
        Connection coon = null;
        PreparedStatement statement = null;
        try {
            //注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //获取数据库连接(里面依次是jdbc:mysql://主机号:端口号/数据库名),用户名,用户密码
            try {
                coon = DriverManager.getConnection("jdbc:mysql://localhost:3306/center?serverTimezone=UTC&userSSL=false"
                        , "root", "123456");
                System.out.println(coon + "获取成功!");
                //需要执行的sql语句
                String sql = "insert INTO center_user(CENTER_NAME,CENTER_AGE,CENTER_SEX) VALUES(?,?,?) ";
                //获取预处理对象
                statement = coon.prepareCall(sql);
                statement.setString(1, "王老虎");
                statement.setInt(2, 12);
                statement.setString(3, "男");
                //执行sql(执行几行,返回几条记录)
                int updatecont = statement.executeUpdate();
                System.out.println("更新数据总数据是:" + updatecont);

            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            //关闭jdbc连接
            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (coon != null) {
                try {
                    coon.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    }
}

第二种(新手推荐,实际框架中我们不建议这么定义):

package com.guisha.JDBC;
import java.sql.*;

public class JDBCTest {
    public static void main(String[] agre) throws SQLException {
        PreparedStatement stam = null;
        Connection conn = null;
        try {
            //注册驱动(常用,不需要接受返回值,我们只需要这个类加载动作)
            Class.forName("com.mysql.jdbc.Driver");
            //获取链接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/user", "root", "guisha");
            //许哟啊执行的sql语句
            String sql = "update center_user set user_name='王老头' where user_age='21' ";
            //创建数据库操作对象
            stam = conn.prepareStatement(sql);
            // executeUpdate 执行数据SQL更新
            //count 返回执行的条数
            int count = stam.executeUpdate();
            System.out.println(count == 1 ? "修改成功!" : "修改失败!");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            //关闭资源
            if (stam != null) {
                stam.close();
            }
            if (conn != null) {
                conn.close();
            }
        }
    }
}

先了解下简单的DELETE和UPDATE操作

JDBC操作Delete:

package com.guisha.JDBC;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcDeleteTest {
    public static void main(String[] args) {

        //将数据库配置定义为变量(开发中我们定义到properties配置文件中去)
        String Driver = "jdbc:mysql://localhost:3306/user";
        String name = "root";
        String password = "guisha";

        Connection coon = null;
        Statement strm = null;
        try {
            //注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //获取链接
            try {
                coon = DriverManager.getConnection(Driver, name, password);
                //创建数据库对象操作对象
                strm = coon.createStatement();
                //创建需要执行的sql语句
                String sql = "delete from center_user where USER_NAME='王琳'";
                //执行更新操作
                int count = strm.executeUpdate(sql);
                System.out.println(count == 1 ? "删除成功!" : "删除失败!");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (strm != null) {
                try {
                    strm.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (coon != null) {
                try {
                    coon.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

JDBC操作Update:

package com.guisha.JDBC;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcDeleteTest {
    public static void main(String[] args) {

        //将数据库配置定义为变量(开发中我们定义到properties配置文件中去)
        String Driver = "jdbc:mysql://localhost:3306/user";
        String name = "root";
        String password = "guisha";

        Connection coon = null;
        Statement strm = null;
        try {
            //注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //获取链接
            try {
                coon = DriverManager.getConnection(Driver, name, password);
                //创建数据库对象操作对象
                strm = coon.createStatement();
                //创建需要执行的sql语句
                String sql = "Update center_user set USER_AGE='19' where USER_NAME='王老头'";
                //执行更新操作
                int count = strm.executeUpdate(sql);
                System.out.println(count == 1 ? "更新成功!" : "更新失败!");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (strm != null) {
                try {
                    strm.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (coon != null) {
                try {
                    coon.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

  

 

代码示例二:

新建数据库配置文件,获取配置文件信息后注册数据库驱动

利用反射获取新建的数据库配置文件db.properties里的配置信息

示例一:

1 driver=com.mysql.jdbc.Driver
2 url=jdbc:mysql://localhost:3306/user
3 user=root
4 password=guisha

 

package com.guisha.JDBC;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;

/**
 * 方法描述
 *      注意:实际开发中不建议把数据库链接数据库的信息写死到程序中
 * @since: 1.0.0
 * @author: Mr.cheng
 */
public class Properties {
    public static void main(String[] args) {

        //使用资源绑定器绑定属性配置文件
        ResourceBundle bundle = ResourceBundle.getBundle("db");
        String driver = bundle.getString("driver");
        String url = bundle.getString("url");
        String user = bundle.getString("user");
        String password = bundle.getString("password");

        Connection coon = null;
        Statement strm = null;
        try {
            //注册驱动
            Class.forName(driver);
            //获取链接
            try {
                coon = DriverManager.getConnection(url, user, password);
                //创建数据库对象操作对象
                strm = coon.createStatement();
                //创建需要执行的sql语句
                String sql = "Update center_user set USER_AGE='18' where USER_NAME='王老头'";
                //执行更新操作
                int count = strm.executeUpdate(sql);
                System.out.println(count == 1 ? "更新成功!" : "更新失败!");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (strm != null) {
                try {
                    strm.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (coon != null) {
                try {
                    coon.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

  

示例二:

driver=com.mysql.jdbc.Driver
mysql_url=jdbc:mysql://localhost:3306/center
mysql_user=root
mysql_password=123456

 

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class ChengJdbcTest {
    private static String driver;
    private static String mysql_url;
    private static String mysql_user;
    private static String mysql_password;

    static {

        //新建属性对象
        Properties property = new Properties();
        //通过反射,新建字符输入流,读取mysql.properties文件
        InputStream input = ChengJdbcTest.class.getClassLoader().getResourceAsStream("db.properties");
        //将输入流中读取到的属性,加载到properties属性及对象中
        try {
            //将input 加载到property对象中
            property.load(input);
            //根据键,获取properties中对应的值赋值
            driver = property.getProperty("driver");
            mysql_url = property.getProperty("mysql_url");
            mysql_user = property.getProperty("mysql_user");
            mysql_password = property.getProperty("mysql_password");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //返回数据库连接
    public static Connection getConnection(){
        try {
            //加载驱动
            Class.forName(driver);
            try {
                //连接数据库
               Connection connection = DriverManager.getConnection(mysql_url, mysql_user, mysql_password);
               //返回值
                return connection;
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
}

  

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class TestMysql {
    public static void main(String[] args) throws SQLException {
        //获取数据库连接
        Connection connection = ChengJdbcTest.getConnection();
        //SQL语句
        String sql = "insert INTO center_user(CENTER_NAME,CENTER_AGE,CENTER_SEX) VALUES(?,?,?) ";
        //执行SQL
        PreparedStatement statement = connection.prepareCall(sql);
        //数据库传值
        statement.setString(1, "小程");
        statement.setInt(2, 12);
        statement.setString(3, "男");
        //更新返回的条数,返回Integer
        int update = statement.executeUpdate();
        System.out.println("更新完成:" + update);
        //关闭资源
        if (statement != null) {
            statement.close();
        }
        if (connection != null) {
            connection.close();
        }
    }
}

  

 

下一篇: JDBC实现简单登录功能