【Java】连接MySQL之简单的代码实现
1.操作数据库有以下步骤:
-
(1)建立与数据库的连接Connection
-
(2)建立Statement
-
(3)建立ResultSet
-
(4)执行SQL操作 捕获异常 抛出异常
-
(5)使用ResultSet
-
(6)关闭ResultSet
-
(7)关闭Statement
-
(8)关闭Connection
2.具体步骤:
- (1)建立与数据库的连接Connection
Connection con; //定义一个连接
想要连接我们的数据库,需要知道我们数据库的url,例如,之前创建的mydb数据库的url就是:
jdbc:mysql://localhost:3306/mydb (3306是我们数据库的端口)
我们还需要数据库的用户名和密码,定义这些字符串:
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "123456";
在建立连接之前,我们需要注册我们的Driver:
用到Class.forName(String)函数。
Class.forName("com.mysql.jdbc.Driver"); //注意这个方法会抛出异常
所以我们改写为:
try {
Class.forName("com.mysql.jdbc.Driver");
}catch (ClassNotFoundException e) { //捕获 “ 没有找到这个类 ” 的异常
System.out.println("没有找到Driver!");
e.printStackTrace();
}
接下来我们才可以建立连接:
建立连接用到 DriverManager.getConnection(String,String,String) 函数。
这个函数的参数分别是数据库的url,username,password,返回值为一个Connection连接:
con = DriverManager.getConnection(url,user,password); //建立连接并存储在con中
注意这个方法也会抛出一种异常,这个异常是SQL异常,当我们数据库连接失败的时候就会抛出SQL异常。
try {
con = DriverManager.getConnection(url,user,password); //建立连接并存储在con中
}catch (SQLException e) { //捕获SQL异常
System.out.println("数据库连接失败!");
e.printStackTrace();
}
连接建立成功!
- (2)建立Statement
Statement是对SQL执行操作的主要对象,通过以下方法通过建立好的连接创建Statement:
statement = con.createStatement(); //通过连接创建Statement
现在只是局部代码,完整的代码将在最后给出~
- (3)建立ResultSet
ResultSet rst;
ResultSet是对数据库进行一些SQL语句的操作后,得到的结果集合,我们先创建它,将在下一步中使用它。
- (4)执行SQL操作
我们之前提到Statement是对SQL执行操作的主要对象,所以我们用Statement执行SQL语句。
Statement有几个调用SQL语句的方法:
statement.execute(String sql); //执行一条任意的SQL语句,返回值为boolean,是否执行成功
statement.executeQuery(Stirng sql_query);//执行一条SQL查找语句,返回ResultSet
statement.executeUpdate(String sql_update);//执行一条SQL更新语句(包括删除语句),返回int类型
//,更改的位置
例如我们要执行一条插入语句如下:
String sql = "INSERT into student(id,name) values(1,'小明')";
statement.executeUpdate(sql);
即可将 [1 小明] 信息插入表中。
下面完整的建立连接以及插入数据的代码:
String url = "jdbc:mysql://localhost:3306/mydb"; //数据库连接url
//记得修改成你的数据库的用户名和密码
String user = "root";
String password = "123456";
Connection con; //创建Connection 对象
Statement statement; //创建Statement 对象
//注意这里还没有用到ResultSet,所以我们先不建立此对象
try {
Class.forName("com.mysql.jdbc.Driver"); //注册Driver 类
con = DriverManager.getConnection(url,user,password); //建立连接并存储在con中
statement = con.createStatement(); //通过连接创建Statement
String sql = "INSERT into student(id,name) values(1,'小明')";//插入操作
statement.executeUpdate(sql); //执行语句
//关闭所有对象,将在下面介绍,注意不能改变关闭的顺序
if(statement!=null) statement.close(); //关闭statement
if(con!=null) con.close(); //关闭con
}catch (ClassNotFoundException e) { //捕获 “ 没有找到这个类 ” 的异常
System.out.println("没有找到Driver");
e.printStackTrace();
}catch (SQLException e) //捕获SQL异常
{
System.out.println("数据库连接失败或SQL语句操作失败!");
e.printStackTrace();
}
可以直接复制到主函数中运行。
程序退出返回,我们还看不到任何结果,因为没有输出,证明没有抛出异常,操作成功,我们可以去数据库控制台查看我们插入后的表数据:(如图)
在控制台输入
use mydb;
select * from student;
然后执行,可以查看到表中插入的数据。
- (5)使用ResultSet
ResultSet常常使用在我们查找的时候,可以将查找的集合存入ResultSet,方便我们调用和管理。
例如以下简单的查找调用方法:
String sql = "select * from student"; //查找全表
rst = statement.executeQuery(sql); //将表数据存入集合
接下来我们打印输出我们查找到的内容:
ResultSet存储表中一行的数据,我们可以通过next()方法向下一行读取,
我们想获得每一列的的信息,可以用get方法来获取:
get方法使用如下:
例如,我们的第一列是int类型的id,我们可以使用 srt.getInt(1); 来获取第一列的整数,同理我们想要获取第二列字符串类型的name,可以通过 rst.getString(2); 方法获取。
用下列方法来输出全表信息:
//如果下一行数据存在(遍历查找到的每一行数据)
while (rst.next())
{
//输出每一行的第一列和第二列数据
System.out.println(rst.getInt(1)+" "+rst.getString(2));
}
在完成完整的查找实例之前,我们先向数据库中再添加一些数据,目前数据太少体现不出查找的作用。
在数据库控制台写入以下语句,并执行。
use mydb;
INSERT into student(id,name) values(2,‘小王’);
INSERT into student(id,name) values(3,‘小李’);
INSERT into student(id,name) values(4,‘小张’);
select * from student;
我们添加了三行数据,可以看到表中数据已经更新:
接下来在已有的代码上添加:
String url = "jdbc:mysql://localhost:3306/mydb"; //数据库连接url
//记得修改成你的数据库的用户名和密码
String user = "root";
String password = "123456";
Connection con; //创建Connection 对象
Statement statement; //创建Statement 对象
//注意这里添加创建了ResultSet对象
ResultSet rst;
try {
Class.forName("com.mysql.jdbc.Driver"); //注册Driver 类
con = DriverManager.getConnection(url,user,password); //建立连接并存储在con中
statement = con.createStatement(); //通过连接创建Statement
//String sql = "INSERT into student(id,name) values(1,'小明')";//插入操作
//statement.executeUpdate(sql); //执行语句
String sql = "select * from student"; //查找全表
rst = statement.executeQuery(sql); //将表数据存入集合
//如果下一行数据存在(遍历查找到的每一行数据)
while (rst.next())
{
//输出每一行的第一列和第二列数据
System.out.println(rst.getInt(1)+" "+rst.getString(2));
}
//关闭所有对象,将在下面介绍,注意不能改变关闭的顺序
if(rst!=null) rst.close(); //关闭rst
if(statement!=null) statement.close(); //关闭statement
if(con!=null) con.close(); //关闭con
}catch (ClassNotFoundException e) { //捕获 “ 没有找到这个类 ” 的异常
System.out.println("没有找到Driver");
e.printStackTrace();
}catch (SQLException e) //捕获SQL异常
{
System.out.println("数据库连接失败或SQL语句操作失败!");
e.printStackTrace();
}
运行查看输出结果:(输出的结果在红字上面)
事实证明,调用成功了~
接下来是收尾工作了:
- (6)关闭ResultSet
- (7)关闭Statement
- (8)关闭Connection
之前的代码中已经展露出了这些对象的关闭方法,他们都有自己的Close()方法,直接调用即可,代码在这里不重复展示。
有必要说明的是他们的顺序:
在使用他们的时候,是这样的顺序:
先建立Connection连接,然后创建Statement,最后使用ResultSet,那么我们关闭他们的顺序应该正好相反,最后使用的应当最先关闭,最早使用的要最后关闭。
道理很简单,他们有层层依赖的关系:
Statement依赖于Connection,ResultSet依赖于Statement,如果没有关闭Statement,便直接关闭Connection,那么Statement就会失去依赖,抛出异常,导致程序错误。
- 鸣谢!如有错误望指正!
上一篇【Java】连接MySQL之IDEA环境配置 https://blog.csdn.net/C1550153993/article/details/89350415