首先我们先创建一个类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方法结束,整个程序结束
}