这篇文章我们来讲一下eclipse(即编辑器)如何连接并实现对数据库的操作,这里以eclipse为主连讲解演示一下。
第一步:
查看我们本机安装的数据库的版本,即查看我们本机是否安装了数据库
在命令提示窗口输入:mysql --help
第二步:
打开eclipse,创建一个普通的java项目:
第三步:
在src下创建一个包(包名随便命名),在项目下,创建一个文件夹,命名为lib,然后在lib中导入jar包(这个jar包可以在CSDN上或者是Mysql官网上下载)
如下图所示:
第五步:
右击项目,点击Properties,选择java Build Path,点击Add JARs...,选择相应的文件,如下图所示:
第六步:
在包下面创建.java的类,并书写代码:
代码如下:
package com.qcby.db;
import java.sql.*;
import com.mysql.jdbc.Statement;
public class Dbutil {
static {
try {
System.out.println("开始加载驱动======");
Class.forName("com.mysql.jdbc.Driver");
System.out.println("加载驱动成功======");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("加载驱动失败!!!!!!");
}
}
private static Connection con;
private static String url = "jdbc:mysql://localhost:3306/hbu0516?useUnicode=true&characterEncoding=utf-8";
private static String user = "root";
private static String password = "2020";
public static Connection getConnection() {
System.out.println("连接获取开始======");
if(con==null) {
try {
System.out.println("连接为空,开始构建连接======");
con = DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("连接构建失败,请查看原因!!!!!!");
}
System.out.println("连接构建成功======");
}
System.out.println("连接获取成功======");
return con;
}
public static void execQuery(String sql) {
Connection connection = getConnection();
try {
Statement statement = (Statement) connection.createStatement();
ResultSet rs = statement.executeQuery(sql);
while(rs.next()) {
int id = rs.getInt("id");
String userName = rs.getString("user_name");
int userage = rs.getInt("user_age");
System.out.print(id+" ");
System.out.print(userName+" ");
System.out.println(userage);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void execUpadte() {
Connection connection = getConnection();
String Updatesql = "update t_user set user_name=? where id = ?";
try {
PreparedStatement statement = connection.prepareStatement(Updatesql);
statement.setString(1,"wangwu");
statement.setInt(2, 2);
int eu = statement.executeUpdate();
System.out.println(eu);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
String sql1 = "select * from t_user";
execQuery(sql1);
execUpadte();
}
}
下面通过截图来讲一下:
解析:
我们知道,数据是存储在硬盘上的,这与硬件有关,数据库是在操作系统之上的,可以调用操作系统来管理硬件,从而实现对数据的管理。我们用户和程序是无法直接操作硬件的,我们要实现某些功能必须要通过操作系统来调用硬件来实现。所以,我们要实现对数据库中的数据的管理,就必须调用可以操作数据库的jar包,也就是驱动程序,这个就是我们在lib文件夹中导入的包。
然后,我们对项目进行设置,使得我们项目在运行的时候,可以加载那个jar包,这就是我们第五步做的事情。
然后,我们开始写代码。
首先,我们写了一个静态代码块(第9-19行),静态代码块的特点是在程序执行的时候就会执行,并且只执行一次。然后,我们来看静态代码块中的内容,其实关键的就一句——第11行,这句话的作用是利用反射获取这个类的字节码文件,我们可以理解为加载这个类,而这个类就是我们的mysql的驱动程序,通过反射,我们调用了这个文件,然后加载了mysql的驱动,可以实现对mysql的操作了,其余的就是打印信息了,这个就不是重点了。
其实到这里,我们就可以运行一下,看是否是正确的。这里说两个运行类的方法。第一个就是在类里面写一个空的主方法,这样类就可以运行了,那么这个静态代码块也就可以运行了;第二个就是在方法上面加上@Test注解,不过这个是有要求的,@Test注解只能放在方法的上面,也就是说只能运行方法,而不能运行类,并且我们还要注意这个方法是否是独立的,即是否可以独立的运行。
我们前面调用了数据库的驱动程序,也就是说我们可以操作数据库了,但是,我们还没有与数据库建立连接,只有在我们与数据库建立连接之后,我们才能运行数据库。
java的sql类库里面,封装了一个Connection类,是专门用来建立与数据库的连接的。所以,我们在第21行创建了一个Connection类对象con,然后,我们继续思考,我们要与数据库建立连接,就必须知道数据库的一些信息,什么信息?至少应该知道url,用户名,密码;所以我们在第22,23,24分别定义了变量来存储数据库的url,用户名,密码。
然后,我们继续思考。我们java用一个类来承担与数据建立连接的功能,那么也就是说,我们所有与连接有关的内容都是放在这个类里面的,或而言之,这个类承担了与数据库连接的一切功能。那么就好理解了,我们调用Connection类里面的方法,传入数据库的url,用户名,密码等参数,然后这个类就帮我们完成了数据库的连接,然后我们把这个类返回回来,这样我们在别处要用的时候,就直接调用这个方法,利用这个返回回来的类,就能建立与数据库的连接啦。这就是第26——第41行的逻辑。当然,里面还有一些打印输出和抛异常等内容,这些都不是主要的东西。
然后,我们继续思考。此时此刻,我们可以驱动数据库了,然后与数据库的连接也建立了,那么我们就可以对数据库进行操作了,即对数据进行增删改查。怎么做?利用我们前面说的那个类Connection对象,我们利用这个类里面的方法来做。statement:报表,清单;我们利用Connection类里面的方法,创建一个statement类对象,我们用这个对象里面的具体方法来实现具体的SQL语句的执行。就比如,我们要执行查询所有人的信息,我们就用statement类里面的executeQuery方法,我们需要传入的就仅仅是SQL语句了。执行完成之后,肯定有返回值,它返回的是我们这个表里面的所有数据,我们用一个ResultSet类的对象来接收。接收完成之后呢,我们肯定就是要打印了,怎么打印呢?这个其实与我们接收数据的类型ResultSet的格式有关,这个具体的我也不是很清楚。反正,就是我们要把它打印出来。这个就是第43——第61行的主要逻辑。
然后后面的逻辑和上面的是类似的。主要的区别就在于类里面的方法的调用不同,但是主体逻辑和上面是一样的。
至此,我们通过eclipse连接到数据库,实现了对数据库中数据的操作,实现了通过程序才操作数据的功能。
其实后面的内容还比较多,比如SQL语句的拼接,比如如何实现动态SQL,比如前后端交互等等,都是比较麻烦的,但是,我们这个是基础。要能够理解。