详述JDBC查询方法执行过程

 首先我们先创建一个类Test。

package newtestjdbc;

public class test {

	public static void main(String[] args) {
		
	}
}

紧接着,我们在newjdbc包中创建一个名字叫做lib的文件夹,在里面放上如下jar文件,这个文件是需要自己下载的。

点击jar文件,右键Build Path,点击Add to Build Path,完成之后是如下场景——

 

点击配置好的jar包,里面有一个Drive.class的文件

即图中最下方这个文件,右键,点击Copy Qualified Name,完成。

这个时候让我们把目光转回Test类,首先我们要加载驱动类,用class.forName方法,再把复制的name填入,记得删去最后的.class,这个时候会报一个编译时异常,我们try catch一下就可以了。结果如下——

package newtestjdbc;

public class test {

	public static void main(String[] args) {
		try {
			Class.forName("com.mysql.jdbc.Driver");//加载驱动类
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

第二步,我们要创建连接

package newtestjdbc;

import java.sql.Connection;
import java.sql.DriverManager;

public class test {

	public static void main(String[] args) {
		try {
			Class.forName("com.mysql.jdbc.Driver");//加载驱动类
			Connection connection=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");//建立连接
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

这个时候我们要引入Connection和DriverManager包,并在后面输入"jdbc:mysql://127.0.0.1:3306/test", "root", "root"这行代码,其中root root是数据库的用户名和密码。

第三步,创建语句。第四步,执行语句。

package newtestjdbc;

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

public class test {

	public static void main(String[] args) {
		try {
			Class.forName("com.mysql.jdbc.Driver");//加载驱动类
			Connection connection=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");//建立连接
			Statement statement=connection.createStatement();//创建语句
			String sql = null;
			ResultSet resultSet=statement.executeQuery(sql);//执行语句
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 resultset是一个set类型的集合,存贮查询返回的结果。

package newtestjdbc;

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

public class test {

	public static void main(String[] args) {
		try {
			Class.forName("com.mysql.jdbc.Driver");//加载驱动类
			Connection connection=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");//建立连接
			Statement statement=connection.createStatement();//创建语句
			String sql = null;
			ResultSet resultSet=statement.executeQuery(sql);//执行语句
                         while(resultSet.next()) {//i 遍历结果
                        String id = resultSet.getString("id");
                        String address = resultSet.getString("address");
                        System.out.println(id);
                        System.out.println(address);
                    }
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

最后释放资源

package newtestjdbc;

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

public class test {

	public static void main(String[] args) {
		try {
			Class.forName("com.mysql.jdbc.Driver");//加载驱动类
			Connection connection=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");//建立连接
			Statement statement=connection.createStatement();//创建语句
			String sql = null;
			ResultSet resultSet=statement.executeQuery(sql);//执行语句
                         while(resultSet.next()) {//i 遍历结果
                        String id = resultSet.getString("id");
                        String address = resultSet.getString("address");
                        System.out.println(id);
                        System.out.println(address);
                    }
		} catch (Exception e) {
			e.printStackTrace();
		}finally {//k、释放资源
            if (resultSet!=null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                } 
            }
            
            if (statement!=null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                } 
            }
            
            if (connection!=null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                } 
            }
	}
}

但是实际上执行一遍sql语句之后就直接关闭了,所以我们用创建接口,在方法之中用内部类实现接口的办法。

如下

package jdbc; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; interface IRowMapper{
    void rowMapper(ResultSet resultSet);
} public class Select {
    //详述JDBC查询方法执行过程
    //目标:定义一个查询方法,能够实现对不同SQL语句做对应的结果
    public static void select(String sql,IRowMapper rowMapper) {
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet= null;
        try {
            Class.forName("com.mysql.jdbc.Driver");//d、加载驱动类
            connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");//e、获取连接
            statement = connection.createStatement();//f、创建语句
            resultSet= statement.executeQuery(sql);//g、执行语句
            rowMapper.rowMapper(resultSet);//h、处理结果,以为rowMapper变量存的是IRowMapper接口实现类对象,所以程序运行时调用该对象中的rowMapper方法
        } catch (Exception e) {
            e.printStackTrace();
        }finally {//k、释放资源
            if (resultSet!=null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                } 
            }
            
            if (statement!=null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                } 
            }
            
            if (connection!=null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                } 
            }
        }
    }//l select方法执行完毕,执行过程回到main方法
    
    public static void main(String[] args) {
        class RowMapper implements IRowMapper{
            @Override
            public void rowMapper(ResultSet resultSet) {
                try {
                    while(resultSet.next()) {//i 遍历结果
                        String id = resultSet.getString("id");
                        String address = resultSet.getString("address");
                        System.out.println(id);
                        System.out.println(address);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }//j 内部类中rowMapper执行完毕,则执行流程再次回到select方法
        }
        
        String sql = "select * from student";//a、sql存的是字符串地址
        IRowMapper rowMapper = new RowMapper();//b、上转型对象,rowMapper存的是对象地址
        select(sql,rowMapper);//c、开始调用select方法,执行过程切换到select方法,传入sql语句字符串地址,和IRowMapper实现类创建的对象的地址
    }//m 以为这main方法结束,整个程序结束    
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值