Java通过JDBC连接MySQL数据库

Java通过JDBC连接MySQL数据库


1.JDBC的使用

2.JDBC连接MySQL数据库

     1)加载驱动
     2)创建连接
     3)写SQL语句
     4)Statement 对象执行 SQL语句
     5)得到结果集
     6)处理结果集
     7)关闭资源

2.完整代码

3.常见问题


1. JDBC的使用

如果是用Eclipse的话,先将"JDBC"的"jar"文件放到项目目录下
在Eclipse下新建“Folder”,命名为"lib"用来存放,将"jar"文件"粘贴"至"lib"文件夹下
Java通过JDBC连接MySQL数据库_第1张图片
右键"jar"文件,选择
Java通过JDBC连接MySQL数据库_第2张图片
要是变成这样,表示使用JDBC驱动成功
Java通过JDBC连接MySQL数据库_第3张图片

2. JDBC连接MySQL数据库

  1. 加载驱动
	Class.forName("com.mysql.jdbc.Driver");
  1. 创建连接
	String url="jdbc:mysql://127.0.0.1:3306/workdb?useSSL=false&characterEncoding=utf-8&user=root&password=123456";
	//此处url中,workdb是连接的数据库名,root是MySQL的登录名,123456是MySQL的密码
	Connection connection= DriverManager.getConnection(url);

或者这样写

	String url="jdbc:mysql://127.0.0.1:3306/workdb?useSSL=false&characterEncoding=utf-8";
	Connection connection= DriverManager.getConnection(url,"root","123456");
  1. 写SQL语句

    只是简单的SQL语句可以这样写:
	String sql="select * from tb_book";
	//此处sql中,tb_book是表名,此处SQL语句作用是是列出tb_book表所有内容

要是想要带参数进行查询可以这样写:

	String sql="select * from tb_book where id="+id;
	//此处sql中,tb_book是表名,此处SQL语句作用是是列出tb_book表中id为变量id值的记录

或者这样:

	String sql="select * from tb_book where id=?";
	//此处sql中,tb_book是表名,此处SQL语句作用是是列出tb_book表中id为特定值的记录,?的值由后面执行SQL语句时传入
  1. Statement 对象执行 SQL语句
	PreparedStatement preparedStatement=connection.prepareStatement(sql);

当SQL语句中存在"?"的时候,除了执行语句还得导入参数:

	//之前的SQL语句
	String sql="select * from tb_book where id=?";
	//--------------------------分割线--------------------------
	preparedStatement=connection.prepareStatement(sql);
	preparedStatement.setInt(1,3);//通过preparedStatement.set数据类型(第几个?,数值)来传入数据
	//这里是想要查询id为3的书记录
  1. 得到结果集

    如果SQL语句是"SELECT(查询)"的操作的话,"preparedStatement.executeQuery()"获得结果集,返回的是"ResultSet"对象
	ResultSet resultSet=preparedStatement.executeQuery();

如果SQL语句是"INSERT(插入)",“DELETE(删除)”,"UPDATE(更新)"的操作的话,"preparedStatement.executeUpdate()“获得结果集,返回的是"修更改的记录条数”,是"int"类型

	int n=preparedStatement.executeUpdate();
  1. 处理结果集

    如果SQL语句是"SELECT(查询)"的操作的话,返回多条数据
	while(resultSet.next()){//resultSet.next()获取下一条返回的记录
	int id=resultSet.getInt(1);//假设我需要获取数据的第一列数据存到变量id中(第一列数据是int类型)
	int id=resultSet.getInt("id");//假设我需要获取数据表中"id"字段数据存到变量id中(第一列数据是int类型)
	//返回的一条记录所有列都在当前resultSet对象中,通过resultSet.get数据类型(列数/数据表字段名)来获得数据
	//代码体
	}

如果SQL语句是"INSERT(插入)",“DELETE(删除)”,"UPDATE(更新)"的操作的话,可以通过返回整形n的数值来反馈修改了数据表中几条记录。

  1. 关闭资源

    resultSet”,“preparedStatement”,"connection"都通过各自的close()方法关闭连接,会抛出异常,需要用"try/catch"捕捉异常
	try {
	resultSet.close();
	} catch (SQLException e) {
	e.printStackTrace();
	}

	try {
	preparedStatement.close();
	} catch (SQLException e) {
	e.printStackTrace();
	}
	
	try {
	connection.close();
	} catch (SQLException e) {
	e.printStackTrace();
	}	



2.完整代码

简单查询:

import java.sql.*;

public class Test {

    public static void main(String[] args){

        Connection connection=null;
        PreparedStatement preparedStatement=null;
        ResultSet resultSet=null;

        try {
            //1. 加载驱动
            Class.forName("com.mysql.jdbc.Driver");

            //2. 创建连接
            String url="jdbc:mysql://127.0.0.1:3306/jdbc?useSSL=false&characterEncoding=utf-8&user=root&password=123456";

            connection= DriverManager.getConnection(url);

            //3. 写SQL语句
            String sql="select * from tb_book";

            //4. Statement 对象执行 SQL语句
            preparedStatement=connection.prepareStatement(sql);

            //5. 得到结果集
            resultSet=preparedStatement.executeQuery();

            //6. 处理结果集
            while (resultSet.next()){
                int id=resultSet.getInt(1);
                System.out.println(id);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //7. 关闭连接
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

            try {
                preparedStatement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

带参数查询:

import java.sql.*;

public class Test {

    public static void main(String[] args){

        Connection connection=null;
        PreparedStatement preparedStatement=null;
        ResultSet resultSet=null;

        try {
            //1. 加载驱动
            Class.forName("com.mysql.jdbc.Driver");

            //2. 创建连接
            String url="jdbc:mysql://127.0.0.1:3306/jdbc?useSSL=false&characterEncoding=utf-8&user=root&password=123456";

            connection= DriverManager.getConnection(url);

            //3. 写SQL语句
            String sql="select * from tb_book where id=?";

            //4. Statement 对象执行 SQL语句
            preparedStatement=connection.prepareStatement(sql);
            preparedStatement.setInt(1,3);


            //5. 得到结果集
            resultSet=preparedStatement.executeQuery();

            //6. 处理结果集
            while (resultSet.next()){
                String bookname=resultSet.getString(2);
                System.out.println(bookname);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //7. 关闭连接
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

            try {
                preparedStatement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

3.常见问题

1.连接数据库前先检查有没有写错数据库的账号密码,数据库是否启动等问题。

2.要是重复使用加载驱动和创建连接代码或者关闭连接代码,可以新建一个类,在类中新建静态方法,方便调用。

你可能感兴趣的:(Java学习)