Java 连接到 MySQL 数据库的代码及相关操作

时间:2022-12-15 13:01:52

在将 Java 程序连接到 MySQL 数据库的过程中,应先将程序驱动包导入External Libraries,其步骤是:Project Structure(Ctrl+Alt+Shift+S) → Modules → Dependencies → Add 驱动包。至于具体的程序驱动包,可以点击「Java 程序驱动包 」进行下载。

JDBC 代码模板

Class.forName(JDBC驱动类);
Connection con = DriverManager.get(Connection(JDBC URL, 数据库用户名, 密码));
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a,b FROM Table");
Whlie(rs.next()){
Int x = rs.getInt("a");
String s = rs.getString("b");
}
rs.close();
stmt.close();
con.close();

其中,a、b 的数据类型分别为整形和字符串型;实际应用中,随着 a、b 的数据类型的不同,while 语句中的语句类型也随之改变。当然,想要运行以下代码,需要在 MySQL 中建立相同名称的数据库(包含相同的用户名和密码)、表以及表的内容,例如本文中数据库名、用户名和密码皆为 test,表名为 student-info,表的内容为 student-name和student-id.

import java.sql.*;

public class LinkedMysql {
public static void main(String[] args) {
//声明Connection对象
Connection con;
//驱动程序名
String driver = "com.mysql.jdbc.Driver";
//URL指向要访问的数据库名test
String url = "jdbc:mysql://192.168.0.91:3306/test";
//MySQL配置时的用户名
String user = "test";
//MySQL配置时的密码
String password = "test";
//遍历查询结果集
try {
//加载驱动程序
Class.forName(driver);
//通过getConnection()方法,连接MySQL数据库
con = DriverManager.getConnection(url, user, password);
if (!con.isClosed())
System.out.println("Succeeded connecting to the Database!");
//创建statement类对象,用来执行SQL语句
Statement statement = con.createStatement();
//要执行的SQL语句
String sql = "select * from student_info";
//ResultSet类,用来存放获取的结果集
ResultSet rs = statement.executeQuery(sql);
System.out.println("-----------------");
System.out.println("执行结果如下所示:");
System.out.println("-----------------");
System.out.println(" 学号" + "\t" + " 姓名");
System.out.println("-----------------");

String name = null;
String id = null;
while (rs.next()) {
//获取stuname这列数据
name = rs.getString("student_name");
//获取stuid这列数据
id = rs.getString("student_id");
//首先使用ISO-8859-1字符集将name解码为字节序列并将结果存储新的字节数组中。
//然后使用GB2312字符集解码指定的字节数组。
name = new String(name.getBytes("ISO-8859-1"), "gb2312");
//输出结果
System.out.println(id + "\t" + name);
}
rs.close();
con.close();
} catch (ClassNotFoundException e) {
//数据库驱动类异常处理
System.out.println("Sorry,can`t find the Driver!");
e.printStackTrace();
} catch (SQLException e) {
//数据库连接失败异常处理
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("数据库数据成功获取!");
}
}
}

如果要进一步完成对数据库的添加、修改和删除操作,则只需要在上面 while 代码段后面添加以下代码段:

PreparedStatement psql;
ResultSet res;

psql = con.prepareStatement("insert into student_info values(?,?)"); //预处理添加数据,其中有两个参数--“?”
psql.setInt(1, 3); //设置参数1,创建id为5的数据
psql.setString(2, "xiaoming"); //设置参数2,name 为小明
psql.executeUpdate(); //执行更新

psql = con.prepareStatement("update student_info set student_name = ? where student_id = ?"); //预处理更新(修改)数据
psql.setString(1,"xiaowang"); //设置参数1,将name改为小王
psql.setInt(2,5); //设置参数2,将id为2的数据做修改
psql.executeUpdate();

psql = con.prepareStatement("delete from student_info where student_id = ?"); //预处理删除数据
psql.setInt(1,8);
psql.executeUpdate();

psql = con.prepareStatement("select * from student_info"); //查询修改数据后student表中的数据
res = psql.executeQuery(); //执行预处理sql语句
System.out.println("执行增加、修改、删除后的数据");
while(res.next()){
name = res.getString("student_name");
id = res.getString("student_id");
name = new String(name.getBytes("ISO-8859-1"),"gb2312");
System.out.println(id + "\t" + name);
}
res.close();
psql.close();

该代码段使用了预处理语句:con.prepareStatement(String sql);
这样生成数据库底层的内部命令,并将该命令封装在 prepareStatement 对象中,可以减轻数据库负担,提高访问数据库的速度。Java 连接到 MySQL 数据库及相关操作的完整代码如下:

import java.sql.*;

public class LinkedMysql {
public static void main(String[] args) {
//声明Connection对象
Connection con;
//驱动程序名
String driver = "com.mysql.jdbc.Driver";
//URL指向要访问的数据库名test
String url = "jdbc:mysql://192.168.0.91:3306/test";
//MySQL配置时的用户名
String user = "test";
//MySQL配置时的密码
String password = "test";
//遍历查询结果集
try {
//加载驱动程序
Class.forName(driver);
//通过getConnection()方法,连接MySQL数据库
con = DriverManager.getConnection(url, user, password);
if (!con.isClosed())
System.out.println("Succeeded connecting to the Database!");
//创建statement类对象,用来执行SQL语句
Statement statement = con.createStatement();
//要执行的SQL语句
String sql = "select * from student_info";
//ResultSet类,用来存放获取的结果集
ResultSet rs = statement.executeQuery(sql);
System.out.println("-----------------");
System.out.println("执行结果如下所示:");
System.out.println("-----------------");
System.out.println(" 学号" + "\t" + " 姓名");
System.out.println("-----------------");

String name = null;
String id = null;
while (rs.next()) {
//获取stuname这列数据
name = rs.getString("student_name");
//获取stuid这列数据
id = rs.getString("student_id");
//首先使用ISO-8859-1字符集将name解码为字节序列并将结果存储新的字节数组中。
//然后使用GB2312字符集解码指定的字节数组。
name = new String(name.getBytes("ISO-8859-1"), "gb2312");
//输出结果
System.out.println(id + "\t" + name);
}

PreparedStatement psql;
ResultSet res;

//预处理添加数据,其中有两个参数--“?”
psql = con.prepareStatement("insert into student_info values(?,?)");
psql.setInt(1, 3); //设置参数1,创建id为5的数据
psql.setString(2, "xiaoming"); //设置参数2,name 为小明
psql.executeUpdate(); //执行更新

//预处理更新(修改)数据
psql = con.prepareStatement("update student_info set student_name = ? where student_id = ?");
psql.setString(1,"xiaowang"); //设置参数1,将name改为小王
psql.setInt(2,5); //设置参数2,将id为2的数据做修改
psql.executeUpdate();

//预处理删除数据
psql = con.prepareStatement("delete from student_info where student_id = ?");
psql.setInt(1,8);
psql.executeUpdate();


//查询修改数据后student表中的数据
psql = con.prepareStatement("select * from student_info");
res = psql.executeQuery(); //执行预处理sql语句
System.out.println("执行增加、修改、删除后的数据");
while(res.next()){
name = res.getString("student_name");
id = res.getString("student_id");
name = new String(name.getBytes("ISO-8859-1"),"gb2312");
System.out.println(id + "\t" + name);
}
res.close();
psql.close();

rs.close();
con.close();
} catch (ClassNotFoundException e) {
//数据库驱动类异常处理
System.out.println("Sorry,can`t find the Driver!");
e.printStackTrace();
} catch (SQLException e) {
//数据库连接失败异常处理
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("数据库数据成功获取!");
}
}
}