面向对象程序设计课程学习中,使用Java教材有一章是介绍数据库编程的,很多同学在编写测试代码后,发现很多数据库环境方面的问题。
本文提出了基于mini-server软件的数据库环境的配置方案。
mini-server是基于 5.0.67-community-nt MySQL Community Edition (GPL) 版本的服务器软件,具有体积小,安装配置方便等优点。完整安装MySQL数据库需要500MB左右,而mini-server安装包只需要4MB,且保留了MySQL数据库引擎和常见功能,完全满足一般的教学使用。
本次安装配置的操作系统环境为Windows11,命令行操作使用系统自带Windows Terminal。
注意:mini Server中MySQL版本是5.0.67,因此需要下载的connector是5.x版本,高版本不适合。
从以上的链接分别下载需要的2个文件。
mini-server可以通过修改udrive文件夹中的my.cnf配置文件。这里全部使用默认参数即可。
mini-server软件的安装目录中包含了mysql_start.bat和mysql_stop.bat两个脚本,分别对应启动和关闭数据库引擎服务。通过双击以上脚本可以实现对数据库引擎的启动和关闭。第一次启动数据库时,如果操作系统开启了自带的防火墙,会要求允许服务器进程对网络的访问,需要设置为允许!
mini-server软件启动后会开启多个终端控制台窗口,直接关闭所有窗口不一定能关闭服务器进程,因此需要双击mysql_stop.bat脚本执行数据库停止操作。
注意: Windows版本的不同造成启动后的界面有所不同,本实验测试环境是Windows 11,使用Windows Terminal作为系统默认终端。
双击启动脚本后会打开3个控制台窗口,如果系统环境不同可能略有不同,请参考以下情况处理。
以上三个窗口中,除了最后一个窗口可以关闭外,第一个窗口是服务程序程序窗口,第二个是用于命令行访问的控制台窗口,在其中输入以下命令可以连接MySQL进行操作。
mysql --user=root --password=root --default-character-set=gbk
以上连接中使用了默认的root用户名,密码也是root。
以下sql语句建立test数据库,并设置默认中文编码为gbk。
mysql> create database test DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
mysql> use test
Database changed
mysql> create table users( uid int primary key, uname varchar(10), uphone varchar(12));
Query OK, 0 rows affected (0.02 sec)
mysql> insert into users values(1, '无糖咖啡', '13912973300');
Query OK, 1 row affected (0.01 sec)
mysql> select * from users;
+-----+----------+-------------+
| uid | uname | uphone |
+-----+----------+-------------+
| 1 | 无糖咖啡 | 13912973300 |
+-----+----------+-------------+
1 row in set (0.00 sec)
以下代码建立url变量存储了连接到本地的test数据库的连接字符串,characterEncoding指定了gbk中文编码。
String url = "jdbc:mysql://127.0.0.1:3311/test?characterEncoding=gbk";
新建rabbit.java源程序如下:
import java.sql.*;
public class rabbit{
public static void main (String [] args)
{
System.out.println("MySQL数据库测试");
String url = "jdbc:mysql://127.0.0.1:3311/test?characterEncoding=gbk";
String sql_select = "select * from users";
String sql_insert = "insert into users values(2, '太阳花', '18951652150')";
try{
Connection conn = DriverManager.getConnection(url, "root", "root");
Statement stmt = conn.createStatement();
ResultSet rst = stmt.executeQuery(sql_select);
while(rst.next())
System.out.println(rst.getInt(1)+ "\t" + rst.getString(2) + "\t" + rst.getString(3));
stmt.executeUpdate(sql_insert);//插入一行数据
rst = stmt.executeQuery(sql_select);
while(rst.next())
System.out.println(rst.getInt(1)+ "\t" + rst.getString(2) + "\t" + rst.getString(3));
}catch(SQLException se){
se.printStackTrace();
}
}
}
注意:
①源代码使用gbk编码保存。
②编译使用javac.exe $(Path) -encoding gbk
命令,$(Path)是java代码文件完整路径。
③运行class文件,需要在其所在目录的命令行中执行
java -cp “.;C:\Program Files\Java\jdbc-drivers\mysql-connector-java-5.1.49.jar” rabbit
以上的环境搭建包括实验代码均采用了gbk编码,也就是Windows Terminal的CP936,GB2312的环境。总结一下需要注意以下几方面:
数据库连接
直接操作MySQL数据库时,需要指定和数据库连接的编码,例如这里使用mysql命令行客户端连接,使用*–default-character-set=gbk*参数指定了连接编码,如果使用utf8编码,只需将以上参数的gbk进行替换。
数据库默认编码
一般在新建数据库时,可以通过create database命令的 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci 参数指定数据库的编码和内部排序的编码格式。
如果使用utf8,请将gbk改成utf8mb4;将gbk_chinese_ci改成utf8mb4_zh_0900_as_cs。
Java源程序编码及编译
Java源代码编写可以使用gbk或utf8等,但需要注意的是使用javac编译时,如果时utf8的编码,需要在最后增加**-encoding utf8**参数才能正确编译。
代码运行终端编码
默认Windows环境下直接使用java命令运行采用的是gbk编码,如果使用utf8,建议首先命令行执行 chcp 65001命令切换一下终端的编码格式。
所有的软件脚本在运行前必须先解压缩,部分同学习惯于直接双击,很多情况下直接打开压缩包就执行程序,会出现很多错误。
Java的字节码运行时,需要使用java.exe加上“类”名的方式执行,初学者往往会在这里弄错,而使用完整的字节代码文件名。
在运行程序时,需要指定代码中调用的第三方类库的位置,如果在命令行中运行,比较简单的方式时使用 -cp参数,将类库的路径添加进去。例如本实验中,java -cp ".;C:\Program Files\Java\jdbc-drivers\mysql-connector-java-5.1.49.jar" rabbit
,指定了本地路径和包含mysql连接库jar文件路径。