六作者简介
首页:小罗のdiary的博客_CSDN博客-单片机原理,java基本常识领域博主
职业:在校大学生
爱好:写博客,听歌,学习单片机,java,跑步
擅长:单片机的基本原理,java基本原理
欢迎来首页阅读我的博客
主要内容
相较于未封装的JDBC,封装之后
的JDBC有什么优点,学会封装JD
BC的步骤和使用封装之后的SqlM
anager类
目录
❤️一、封装之后的JDBC优点
✨(1)减少代码量,使其操作数据库变得精简
✨(2)统一驱动程序和连接字
❤️二、封装Jdbc的步骤
✨(1)导入Sql包
✨(2)创建SqlManager封装类
✨(3)编写.properties后缀的文件
✨(4) 将properties文件导入到和SqlManager类同目录下
✨(5)编写SqlManager代码
1.定义变量
2.构造私有函数用于提取properties中数据库的信息,并赋值给SqlManager类中对应的成员属性
3. 初始化
4.创建数据库连接并执行SQL语句
5.执行无返回数据的数据查询,返回值是被改变的数据库项数或查询数据库的操作接口
6.断开数据库
7.完整代码如下
8.执行SqlManager类检验是否编写成功
❤️三、使用JDBC
✨(1)数据库有关信息以写入.properties文件中
✨(2)test数据库中student表的信息如下
✨(3).jsp文件中使用SqlManager类
✨(4) 结果
1.执行SQL语句:sqlQuery
2.执行SQL语句:sqlUpdate
❤️一、封装之后的JDBC优点
✨(1)减少代码量,使其操作数据库变得精简
在不同的文件当中(.java或.jsp等文件当中),我们操作数据库都需要有下面这些步骤:加载JDBC驱动程序->创建数据库连接->执行SQL语句->获取结果->关闭连接这些步骤。
而这些步骤的代码如下:
//利用Driver类数据库驱动加载代码如下
//MySQL数据库8.0版本以上驱动类为com.mysql.cj.jdbc.Driver
//MySQL数据库8.0版本以下驱动类为com.mysql.jdbc.Driver
Class.forName("com.mysql.cj.jdbc.Driver");
//利用DriverManager类连接数据库对象
Connection con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/sys","root","123456");
//Statement类对象执行SQL语句
Statement sta=con.createStatement();
//利用ResultSet类返回结果集
ResultSet res=sta.executeQuery("select * from login");
//遍历结果到网页
while(res.next()){
String Muser=res.getString("Muser");
String Mpassword=res.getString("Mpassword");
.out.print("用户名:"+Muser+"
"+"密"+" "+"码:"+Mpassword);
}
//关闭连接
con.close();
sta.close();
res.close();
每次我们都需要将数据库的信息输入进去,非常不方便,以上是.jsp文件部分代码。
✨(2)统一驱动程序和连接字
我们不单单只连接MySql这一个数据库,还要连接其他的数据库,而连接不同的数据库所对应的驱动程序和连接字都不相同,所以说,要查询对应的数据,才能正确连接数据库。
❤️二、封装Jdbc的步骤
✨(1)导入Sql包
步骤如下图所示
✨(2)创建SqlManager封装类
其中类名为SqlManager,包名为samples.util
✨(3)编写.properties后缀的文件
该文件是记录了要导入数据库的全部信息,该文件是一种属性文件,java封装了可以读取该文件里面内容的类 。
.txt文本文件输入你的数据库有关的信息,再将后缀名改成.properties即创建成功
#Sepecify the system type: window or unix
system-type=windows
#specify the database's type
database-type=mysql
#specify some parameters
DBhost=127.0.0.1
DBport=3306
DBname=test
DBuser=root
DBpasswd=123456
根据你的数据库来修改里面的内容
✨(4) 将properties文件导入到和SqlManager类同目录下
同在samples.util包下
✨(5)编写SqlManager代码
1.定义变量
private static SqlManager p = null; //静态成员,支持单态模式
private PropertyResourceBundle bundle = null; //配置资源文件
private static String jdbcDriver = null; //JDBC驱动类型
private static String split = null; //文件分隔符
private String DBType = null; //数据库类型
private String DBhost = "127.0.0.1"; //数据库主机地址
private String DBname = ""; //数据库名
private String DBport = ""; //数据库端口
private String DBuser = ""; //数据库用户名
private String DBpasswd = ""; //数据库密码
//处理连接的变量
private Connection Sqlconn = null;
private Statement Sqlstmt = null;
private String strCon = null; //连接字
2.构造私有函数用于提取properties中数据库的信息,并赋值给SqlManager类中对应的成员属性
private SqlManager() { //私有构造函数
try {
//导入properties文件
//不能写成"/sysConfig.properties"
bundle = new PropertyResourceBundle(SqlManager.class.
getResourceAsStream("sysConfig.properties"));
//给成员属性赋值
this.DBhost = getString("DBhost");
this.DBname = getString("DBname");
this.DBport = getString("DBport");
this.DBuser = getString("DBuser");
this.DBpasswd = getString("DBpasswd");
//读取操作系统的类型
String system_type = getString("system-type");
if(system_type != null) {
if(system_type.toLowerCase().equals("windows"))
split = ";";
else if(system_type.toLowerCase().equals("unix"))
split = ":";
}
//读取数据库类型
String database_type = getString("database-type");//读取数据库类型
if(database_type != null) {
if(database_type.toLowerCase().equals("mysql")) {
jdbcDriver = "com.mysql.cj.jdbc.Driver";
strCon = "jdbc:mysql://" + DBhost + ":" + DBport + "/"
+ DBname;
}
//后面可添加其他类型的数据库,例如:SqlServer,oracle等数据库,也是读取jdbcDriver和strCon
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3. 初始化
//下面2个函数为一个整体
//单态模式:Java程序运行时,一个类只有一个实例,
//多个实例化就有多个线程,会冲突
public static SqlManager createInstance() {
if(p == null) {
p = new SqlManager();
p.initDB();
}
return p;
}
//加载JDBC驱动程序
public void initDB() {
System.out.println(strCon);
System.out.println(jdbcDriver);
try {
Class.forName(jdbcDriver);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println("Can't Find Database Driver.");
}
}
4.创建数据库连接并执行SQL语句
public void connectDB() {
try {
System.out.println("SqlManager:Connecting to database ...");
//获取连接
Sqlconn = DriverManager.getConnection(strCon, DBuser, DBpasswd);
//执行SQL语句
Sqlstmt = Sqlconn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("ConnectDB" + e.getMessage());
}
System.out.println("SqlManager:Connect to database successful.");
}
5.执行无返回数据的数据查询,返回值是被改变的数据库项数或查询数据库的操作接口
//执行无返回数据的数据查询,返回值是被改变的数据库项数
//例如,对数据的添加删除修改等
public int executeUpdate(String sql) {
int ret = 0;
try {
//执行数据库项数步骤
ret = Sqlstmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeUpdate:" + e.getMessage());
}
return ret;
}
//查询数据库的操作接口
//例如,获取数据和查找数据等
public ResultSet executeQuery(String sql) {
ResultSet rs = null;
try {
//返回结果集,该结果集只能用next()函数,若要使用其它函数,需要用代码来编写可执行其它函数的代码
//而且while(next()){}只能被执行一个来回,即从头到尾,不能多次执行while(next()){}语句
rs = Sqlstmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeQuery" + e.getMessage());
}
return rs;
}
6.断开数据库
public void closeDB() {
try {
System.out.println("SqlManager:Close Connection to database ...");
Sqlstmt.close(); //关闭查询
Sqlconn.close(); //关闭连接
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("CloseDB" + e.getMessage());
}
System.out.println("SqlManager:Close connection successful.");
}
7.完整代码如下
package samples.util;
import java.sql.*;
import java.util.PropertyResourceBundle;
public class SqlManager {
//第一步,定义变量
private static SqlManager p = null; //静态成员,支持单态模式
private PropertyResourceBundle bundle = null; //配置资源文件
private static String jdbcDriver = null; //JDBC驱动类型
private static String split = null; //文件分隔符
private String DBType = null; //数据库类型
private String DBhost = "127.0.0.1"; //数据库主机地址
private String DBname = ""; //数据库名
private String DBport = ""; //数据库端口
private String DBuser = ""; //数据库用户名
private String DBpasswd = ""; //数据库密码
//处理连接的变量
private Connection Sqlconn = null;
private Statement Sqlstmt = null;
private String strCon = null;
//第二步,构造私有函数用于提取properties中数据库的信息,并赋值给SqlManager类中对应的成员属性
private SqlManager() { //私有构造函数
try {
//导入properties文件
//不能写成"/sysConfig.properties"
bundle = new PropertyResourceBundle(SqlManager.class.
getResourceAsStream("sysConfig.properties"));
//给成员属性赋值
this.DBhost = getString("DBhost");
this.DBname = getString("DBname");
this.DBport = getString("DBport");
this.DBuser = getString("DBuser");
this.DBpasswd = getString("DBpasswd");
//读取操作系统的类型
String system_type = getString("system-type");
if(system_type != null) {
if(system_type.toLowerCase().equals("windows"))
split = ";";
else if(system_type.toLowerCase().equals("unix"))
split = ":";
}
//读取数据库类型
String database_type = getString("database-type");//读取数据库类型
if(database_type != null) {
if(database_type.toLowerCase().equals("mysql")) {
jdbcDriver = "com.mysql.cj.jdbc.Driver";
strCon = "jdbc:mysql://" + DBhost + ":" + DBport + "/"
+ DBname;
}
//后面可添加其他类型的数据库,例如:SqlServer,oracle等数据库,也是读取jdbcDriver和strCon
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//第三步,初始化,下面2个函数为一个整体
//单态模式:Java程序运行时,一个类只有一个实例,
//多个实例化就有多个线程,会冲突
public static SqlManager createInstance() {
if(p == null) {
p = new SqlManager();
p.initDB();
}
return p;
}
//加载JDBC驱动程序
public void initDB() {
System.out.println(strCon);
System.out.println(jdbcDriver);
try {
Class.forName(jdbcDriver);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println("Can't Find Database Driver.");
}
}
//获取资源文件字符串函数
public String getString(String s) { //读取资源文件的字符串
return this.bundle.getString(s);
}
//第四步,创建数据库连接并执行SQL语句
public void connectDB() {
try {
System.out.println("SqlManager:Connecting to database ...");
//获取连接
Sqlconn = DriverManager.getConnection(strCon, DBuser, DBpasswd);
//执行SQL语句
Sqlstmt = Sqlconn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("ConnectDB" + e.getMessage());
}
System.out.println("SqlManager:Connect to database successful.");
}
//第5步,执行无返回数据的数据查询,返回值是被改变的数据库项数
//例如,对数据的添加删除修改等
public int executeUpdate(String sql) {
int ret = 0;
try {
//执行数据库项数步骤
ret = Sqlstmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeUpdate:" + e.getMessage());
}
return ret;
}
//第5步,查询数据库的操作接口
//例如,获取数据和查找数据等
public ResultSet executeQuery(String sql) {
ResultSet rs = null;
try {
//返回结果集,该结果集只能用next()函数,若要使用其它函数,需要用代码来编写可执行其它函数的代码
//而且while(next()){}只能被执行一个来回,即从头到尾,不能多次执行while(next()){}语句
rs = Sqlstmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeQuery" + e.getMessage());
}
return rs;
}
//第6步,断开数据库
public void closeDB() {
try {
System.out.println("SqlManager:Close Connection to database ...");
Sqlstmt.close(); //关闭查询
Sqlconn.close(); //关闭连接
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("CloseDB" + e.getMessage());
}
System.out.println("SqlManager:Close connection successful.");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//测试代码是否编写正确
SqlManager.createInstance().connectDB();
SqlManager.createInstance().closeDB();
}
}
8.执行SqlManager类检验是否编写成功
执行成功的截图如下
❤️三、使用JDBC
✨(1)数据库有关信息以写入.properties文件中
✨(2)test数据库中student表的信息如下
✨(1)减少代码量,使其操作数据库变得精简
在不同的文件当中(.java或.jsp等文件当中),我们操作数据库都需要有下面这些步骤:加载JDBC驱动程序->创建数据库连接->执行SQL语句->获取结果->关闭连接这些步骤。
而这些步骤的代码如下:
//利用Driver类数据库驱动加载代码如下
//MySQL数据库8.0版本以上驱动类为com.mysql.cj.jdbc.Driver
//MySQL数据库8.0版本以下驱动类为com.mysql.jdbc.Driver
Class.forName("com.mysql.cj.jdbc.Driver");
//利用DriverManager类连接数据库对象
Connection con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/sys","root","123456");
//Statement类对象执行SQL语句
Statement sta=con.createStatement();
//利用ResultSet类返回结果集
ResultSet res=sta.executeQuery("select * from login");
//遍历结果到网页
while(res.next()){
String Muser=res.getString("Muser");
String Mpassword=res.getString("Mpassword");
.out.print("用户名:"+Muser+"
"+"密"+" "+"码:"+Mpassword);
}
//关闭连接
con.close();
sta.close();
res.close();
每次我们都需要将数据库的信息输入进去,非常不方便,以上是.jsp文件部分代码。
✨(2)统一驱动程序和连接字
我们不单单只连接MySql这一个数据库,还要连接其他的数据库,而连接不同的数据库所对应的驱动程序和连接字都不相同,所以说,要查询对应的数据,才能正确连接数据库。
✨(1)导入Sql包
步骤如下图所示
✨(2)创建SqlManager封装类
其中类名为SqlManager,包名为samples.util
✨(3)编写.properties后缀的文件
该文件是记录了要导入数据库的全部信息,该文件是一种属性文件,java封装了可以读取该文件里面内容的类 。
.txt文本文件输入你的数据库有关的信息,再将后缀名改成.properties即创建成功
#Sepecify the system type: window or unix
system-type=windows
#specify the database's type
database-type=mysql
#specify some parameters
DBhost=127.0.0.1
DBport=3306
DBname=test
DBuser=root
DBpasswd=123456
根据你的数据库来修改里面的内容
✨(4) 将properties文件导入到和SqlManager类同目录下
同在samples.util包下
✨(5)编写SqlManager代码
1.定义变量
private static SqlManager p = null; //静态成员,支持单态模式
private PropertyResourceBundle bundle = null; //配置资源文件
private static String jdbcDriver = null; //JDBC驱动类型
private static String split = null; //文件分隔符
private String DBType = null; //数据库类型
private String DBhost = "127.0.0.1"; //数据库主机地址
private String DBname = ""; //数据库名
private String DBport = ""; //数据库端口
private String DBuser = ""; //数据库用户名
private String DBpasswd = ""; //数据库密码
//处理连接的变量
private Connection Sqlconn = null;
private Statement Sqlstmt = null;
private String strCon = null; //连接字
2.构造私有函数用于提取properties中数据库的信息,并赋值给SqlManager类中对应的成员属性
private SqlManager() { //私有构造函数
try {
//导入properties文件
//不能写成"/sysConfig.properties"
bundle = new PropertyResourceBundle(SqlManager.class.
getResourceAsStream("sysConfig.properties"));
//给成员属性赋值
this.DBhost = getString("DBhost");
this.DBname = getString("DBname");
this.DBport = getString("DBport");
this.DBuser = getString("DBuser");
this.DBpasswd = getString("DBpasswd");
//读取操作系统的类型
String system_type = getString("system-type");
if(system_type != null) {
if(system_type.toLowerCase().equals("windows"))
split = ";";
else if(system_type.toLowerCase().equals("unix"))
split = ":";
}
//读取数据库类型
String database_type = getString("database-type");//读取数据库类型
if(database_type != null) {
if(database_type.toLowerCase().equals("mysql")) {
jdbcDriver = "com.mysql.cj.jdbc.Driver";
strCon = "jdbc:mysql://" + DBhost + ":" + DBport + "/"
+ DBname;
}
//后面可添加其他类型的数据库,例如:SqlServer,oracle等数据库,也是读取jdbcDriver和strCon
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3. 初始化
//下面2个函数为一个整体
//单态模式:Java程序运行时,一个类只有一个实例,
//多个实例化就有多个线程,会冲突
public static SqlManager createInstance() {
if(p == null) {
p = new SqlManager();
p.initDB();
}
return p;
}
//加载JDBC驱动程序
public void initDB() {
System.out.println(strCon);
System.out.println(jdbcDriver);
try {
Class.forName(jdbcDriver);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println("Can't Find Database Driver.");
}
}
4.创建数据库连接并执行SQL语句
public void connectDB() {
try {
System.out.println("SqlManager:Connecting to database ...");
//获取连接
Sqlconn = DriverManager.getConnection(strCon, DBuser, DBpasswd);
//执行SQL语句
Sqlstmt = Sqlconn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("ConnectDB" + e.getMessage());
}
System.out.println("SqlManager:Connect to database successful.");
}
5.执行无返回数据的数据查询,返回值是被改变的数据库项数或查询数据库的操作接口
//执行无返回数据的数据查询,返回值是被改变的数据库项数
//例如,对数据的添加删除修改等
public int executeUpdate(String sql) {
int ret = 0;
try {
//执行数据库项数步骤
ret = Sqlstmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeUpdate:" + e.getMessage());
}
return ret;
}
//查询数据库的操作接口
//例如,获取数据和查找数据等
public ResultSet executeQuery(String sql) {
ResultSet rs = null;
try {
//返回结果集,该结果集只能用next()函数,若要使用其它函数,需要用代码来编写可执行其它函数的代码
//而且while(next()){}只能被执行一个来回,即从头到尾,不能多次执行while(next()){}语句
rs = Sqlstmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeQuery" + e.getMessage());
}
return rs;
}
6.断开数据库
public void closeDB() {
try {
System.out.println("SqlManager:Close Connection to database ...");
Sqlstmt.close(); //关闭查询
Sqlconn.close(); //关闭连接
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("CloseDB" + e.getMessage());
}
System.out.println("SqlManager:Close connection successful.");
}
7.完整代码如下
package samples.util;
import java.sql.*;
import java.util.PropertyResourceBundle;
public class SqlManager {
//第一步,定义变量
private static SqlManager p = null; //静态成员,支持单态模式
private PropertyResourceBundle bundle = null; //配置资源文件
private static String jdbcDriver = null; //JDBC驱动类型
private static String split = null; //文件分隔符
private String DBType = null; //数据库类型
private String DBhost = "127.0.0.1"; //数据库主机地址
private String DBname = ""; //数据库名
private String DBport = ""; //数据库端口
private String DBuser = ""; //数据库用户名
private String DBpasswd = ""; //数据库密码
//处理连接的变量
private Connection Sqlconn = null;
private Statement Sqlstmt = null;
private String strCon = null;
//第二步,构造私有函数用于提取properties中数据库的信息,并赋值给SqlManager类中对应的成员属性
private SqlManager() { //私有构造函数
try {
//导入properties文件
//不能写成"/sysConfig.properties"
bundle = new PropertyResourceBundle(SqlManager.class.
getResourceAsStream("sysConfig.properties"));
//给成员属性赋值
this.DBhost = getString("DBhost");
this.DBname = getString("DBname");
this.DBport = getString("DBport");
this.DBuser = getString("DBuser");
this.DBpasswd = getString("DBpasswd");
//读取操作系统的类型
String system_type = getString("system-type");
if(system_type != null) {
if(system_type.toLowerCase().equals("windows"))
split = ";";
else if(system_type.toLowerCase().equals("unix"))
split = ":";
}
//读取数据库类型
String database_type = getString("database-type");//读取数据库类型
if(database_type != null) {
if(database_type.toLowerCase().equals("mysql")) {
jdbcDriver = "com.mysql.cj.jdbc.Driver";
strCon = "jdbc:mysql://" + DBhost + ":" + DBport + "/"
+ DBname;
}
//后面可添加其他类型的数据库,例如:SqlServer,oracle等数据库,也是读取jdbcDriver和strCon
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//第三步,初始化,下面2个函数为一个整体
//单态模式:Java程序运行时,一个类只有一个实例,
//多个实例化就有多个线程,会冲突
public static SqlManager createInstance() {
if(p == null) {
p = new SqlManager();
p.initDB();
}
return p;
}
//加载JDBC驱动程序
public void initDB() {
System.out.println(strCon);
System.out.println(jdbcDriver);
try {
Class.forName(jdbcDriver);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println("Can't Find Database Driver.");
}
}
//获取资源文件字符串函数
public String getString(String s) { //读取资源文件的字符串
return this.bundle.getString(s);
}
//第四步,创建数据库连接并执行SQL语句
public void connectDB() {
try {
System.out.println("SqlManager:Connecting to database ...");
//获取连接
Sqlconn = DriverManager.getConnection(strCon, DBuser, DBpasswd);
//执行SQL语句
Sqlstmt = Sqlconn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("ConnectDB" + e.getMessage());
}
System.out.println("SqlManager:Connect to database successful.");
}
//第5步,执行无返回数据的数据查询,返回值是被改变的数据库项数
//例如,对数据的添加删除修改等
public int executeUpdate(String sql) {
int ret = 0;
try {
//执行数据库项数步骤
ret = Sqlstmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeUpdate:" + e.getMessage());
}
return ret;
}
//第5步,查询数据库的操作接口
//例如,获取数据和查找数据等
public ResultSet executeQuery(String sql) {
ResultSet rs = null;
try {
//返回结果集,该结果集只能用next()函数,若要使用其它函数,需要用代码来编写可执行其它函数的代码
//而且while(next()){}只能被执行一个来回,即从头到尾,不能多次执行while(next()){}语句
rs = Sqlstmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeQuery" + e.getMessage());
}
return rs;
}
//第6步,断开数据库
public void closeDB() {
try {
System.out.println("SqlManager:Close Connection to database ...");
Sqlstmt.close(); //关闭查询
Sqlconn.close(); //关闭连接
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("CloseDB" + e.getMessage());
}
System.out.println("SqlManager:Close connection successful.");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//测试代码是否编写正确
SqlManager.createInstance().connectDB();
SqlManager.createInstance().closeDB();
}
}
8.执行SqlManager类检验是否编写成功
执行成功的截图如下
❤️三、使用JDBC
✨(1)数据库有关信息以写入.properties文件中
✨(2)test数据库中student表的信息如下
步骤如下图所示
其中类名为SqlManager,包名为samples.util
✨(3)编写.properties后缀的文件
该文件是记录了要导入数据库的全部信息,该文件是一种属性文件,java封装了可以读取该文件里面内容的类 。
.txt文本文件输入你的数据库有关的信息,再将后缀名改成.properties即创建成功
#Sepecify the system type: window or unix
system-type=windows
#specify the database's type
database-type=mysql
#specify some parameters
DBhost=127.0.0.1
DBport=3306
DBname=test
DBuser=root
DBpasswd=123456
根据你的数据库来修改里面的内容
✨(4) 将properties文件导入到和SqlManager类同目录下
同在samples.util包下
✨(5)编写SqlManager代码
1.定义变量
private static SqlManager p = null; //静态成员,支持单态模式
private PropertyResourceBundle bundle = null; //配置资源文件
private static String jdbcDriver = null; //JDBC驱动类型
private static String split = null; //文件分隔符
private String DBType = null; //数据库类型
private String DBhost = "127.0.0.1"; //数据库主机地址
private String DBname = ""; //数据库名
private String DBport = ""; //数据库端口
private String DBuser = ""; //数据库用户名
private String DBpasswd = ""; //数据库密码
//处理连接的变量
private Connection Sqlconn = null;
private Statement Sqlstmt = null;
private String strCon = null; //连接字
2.构造私有函数用于提取properties中数据库的信息,并赋值给SqlManager类中对应的成员属性
private SqlManager() { //私有构造函数
try {
//导入properties文件
//不能写成"/sysConfig.properties"
bundle = new PropertyResourceBundle(SqlManager.class.
getResourceAsStream("sysConfig.properties"));
//给成员属性赋值
this.DBhost = getString("DBhost");
this.DBname = getString("DBname");
this.DBport = getString("DBport");
this.DBuser = getString("DBuser");
this.DBpasswd = getString("DBpasswd");
//读取操作系统的类型
String system_type = getString("system-type");
if(system_type != null) {
if(system_type.toLowerCase().equals("windows"))
split = ";";
else if(system_type.toLowerCase().equals("unix"))
split = ":";
}
//读取数据库类型
String database_type = getString("database-type");//读取数据库类型
if(database_type != null) {
if(database_type.toLowerCase().equals("mysql")) {
jdbcDriver = "com.mysql.cj.jdbc.Driver";
strCon = "jdbc:mysql://" + DBhost + ":" + DBport + "/"
+ DBname;
}
//后面可添加其他类型的数据库,例如:SqlServer,oracle等数据库,也是读取jdbcDriver和strCon
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3. 初始化
//下面2个函数为一个整体
//单态模式:Java程序运行时,一个类只有一个实例,
//多个实例化就有多个线程,会冲突
public static SqlManager createInstance() {
if(p == null) {
p = new SqlManager();
p.initDB();
}
return p;
}
//加载JDBC驱动程序
public void initDB() {
System.out.println(strCon);
System.out.println(jdbcDriver);
try {
Class.forName(jdbcDriver);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println("Can't Find Database Driver.");
}
}
4.创建数据库连接并执行SQL语句
public void connectDB() {
try {
System.out.println("SqlManager:Connecting to database ...");
//获取连接
Sqlconn = DriverManager.getConnection(strCon, DBuser, DBpasswd);
//执行SQL语句
Sqlstmt = Sqlconn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("ConnectDB" + e.getMessage());
}
System.out.println("SqlManager:Connect to database successful.");
}
5.执行无返回数据的数据查询,返回值是被改变的数据库项数或查询数据库的操作接口
//执行无返回数据的数据查询,返回值是被改变的数据库项数
//例如,对数据的添加删除修改等
public int executeUpdate(String sql) {
int ret = 0;
try {
//执行数据库项数步骤
ret = Sqlstmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeUpdate:" + e.getMessage());
}
return ret;
}
//查询数据库的操作接口
//例如,获取数据和查找数据等
public ResultSet executeQuery(String sql) {
ResultSet rs = null;
try {
//返回结果集,该结果集只能用next()函数,若要使用其它函数,需要用代码来编写可执行其它函数的代码
//而且while(next()){}只能被执行一个来回,即从头到尾,不能多次执行while(next()){}语句
rs = Sqlstmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeQuery" + e.getMessage());
}
return rs;
}
6.断开数据库
public void closeDB() {
try {
System.out.println("SqlManager:Close Connection to database ...");
Sqlstmt.close(); //关闭查询
Sqlconn.close(); //关闭连接
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("CloseDB" + e.getMessage());
}
System.out.println("SqlManager:Close connection successful.");
}
7.完整代码如下
package samples.util;
import java.sql.*;
import java.util.PropertyResourceBundle;
public class SqlManager {
//第一步,定义变量
private static SqlManager p = null; //静态成员,支持单态模式
private PropertyResourceBundle bundle = null; //配置资源文件
private static String jdbcDriver = null; //JDBC驱动类型
private static String split = null; //文件分隔符
private String DBType = null; //数据库类型
private String DBhost = "127.0.0.1"; //数据库主机地址
private String DBname = ""; //数据库名
private String DBport = ""; //数据库端口
private String DBuser = ""; //数据库用户名
private String DBpasswd = ""; //数据库密码
//处理连接的变量
private Connection Sqlconn = null;
private Statement Sqlstmt = null;
private String strCon = null;
//第二步,构造私有函数用于提取properties中数据库的信息,并赋值给SqlManager类中对应的成员属性
private SqlManager() { //私有构造函数
try {
//导入properties文件
//不能写成"/sysConfig.properties"
bundle = new PropertyResourceBundle(SqlManager.class.
getResourceAsStream("sysConfig.properties"));
//给成员属性赋值
this.DBhost = getString("DBhost");
this.DBname = getString("DBname");
this.DBport = getString("DBport");
this.DBuser = getString("DBuser");
this.DBpasswd = getString("DBpasswd");
//读取操作系统的类型
String system_type = getString("system-type");
if(system_type != null) {
if(system_type.toLowerCase().equals("windows"))
split = ";";
else if(system_type.toLowerCase().equals("unix"))
split = ":";
}
//读取数据库类型
String database_type = getString("database-type");//读取数据库类型
if(database_type != null) {
if(database_type.toLowerCase().equals("mysql")) {
jdbcDriver = "com.mysql.cj.jdbc.Driver";
strCon = "jdbc:mysql://" + DBhost + ":" + DBport + "/"
+ DBname;
}
//后面可添加其他类型的数据库,例如:SqlServer,oracle等数据库,也是读取jdbcDriver和strCon
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//第三步,初始化,下面2个函数为一个整体
//单态模式:Java程序运行时,一个类只有一个实例,
//多个实例化就有多个线程,会冲突
public static SqlManager createInstance() {
if(p == null) {
p = new SqlManager();
p.initDB();
}
return p;
}
//加载JDBC驱动程序
public void initDB() {
System.out.println(strCon);
System.out.println(jdbcDriver);
try {
Class.forName(jdbcDriver);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println("Can't Find Database Driver.");
}
}
//获取资源文件字符串函数
public String getString(String s) { //读取资源文件的字符串
return this.bundle.getString(s);
}
//第四步,创建数据库连接并执行SQL语句
public void connectDB() {
try {
System.out.println("SqlManager:Connecting to database ...");
//获取连接
Sqlconn = DriverManager.getConnection(strCon, DBuser, DBpasswd);
//执行SQL语句
Sqlstmt = Sqlconn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("ConnectDB" + e.getMessage());
}
System.out.println("SqlManager:Connect to database successful.");
}
//第5步,执行无返回数据的数据查询,返回值是被改变的数据库项数
//例如,对数据的添加删除修改等
public int executeUpdate(String sql) {
int ret = 0;
try {
//执行数据库项数步骤
ret = Sqlstmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeUpdate:" + e.getMessage());
}
return ret;
}
//第5步,查询数据库的操作接口
//例如,获取数据和查找数据等
public ResultSet executeQuery(String sql) {
ResultSet rs = null;
try {
//返回结果集,该结果集只能用next()函数,若要使用其它函数,需要用代码来编写可执行其它函数的代码
//而且while(next()){}只能被执行一个来回,即从头到尾,不能多次执行while(next()){}语句
rs = Sqlstmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeQuery" + e.getMessage());
}
return rs;
}
//第6步,断开数据库
public void closeDB() {
try {
System.out.println("SqlManager:Close Connection to database ...");
Sqlstmt.close(); //关闭查询
Sqlconn.close(); //关闭连接
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("CloseDB" + e.getMessage());
}
System.out.println("SqlManager:Close connection successful.");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//测试代码是否编写正确
SqlManager.createInstance().connectDB();
SqlManager.createInstance().closeDB();
}
}
8.执行SqlManager类检验是否编写成功
执行成功的截图如下
❤️三、使用JDBC
✨(1)数据库有关信息以写入.properties文件中
✨(2)test数据库中student表的信息如下
该文件是记录了要导入数据库的全部信息,该文件是一种属性文件,java封装了可以读取该文件里面内容的类 。
.txt文本文件输入你的数据库有关的信息,再将后缀名改成.properties即创建成功
#Sepecify the system type: window or unix system-type=windows #specify the database's type database-type=mysql #specify some parameters DBhost=127.0.0.1 DBport=3306 DBname=test DBuser=root DBpasswd=123456
根据你的数据库来修改里面的内容
同在samples.util包下
✨(5)编写SqlManager代码
1.定义变量
private static SqlManager p = null; //静态成员,支持单态模式
private PropertyResourceBundle bundle = null; //配置资源文件
private static String jdbcDriver = null; //JDBC驱动类型
private static String split = null; //文件分隔符
private String DBType = null; //数据库类型
private String DBhost = "127.0.0.1"; //数据库主机地址
private String DBname = ""; //数据库名
private String DBport = ""; //数据库端口
private String DBuser = ""; //数据库用户名
private String DBpasswd = ""; //数据库密码
//处理连接的变量
private Connection Sqlconn = null;
private Statement Sqlstmt = null;
private String strCon = null; //连接字
2.构造私有函数用于提取properties中数据库的信息,并赋值给SqlManager类中对应的成员属性
private SqlManager() { //私有构造函数
try {
//导入properties文件
//不能写成"/sysConfig.properties"
bundle = new PropertyResourceBundle(SqlManager.class.
getResourceAsStream("sysConfig.properties"));
//给成员属性赋值
this.DBhost = getString("DBhost");
this.DBname = getString("DBname");
this.DBport = getString("DBport");
this.DBuser = getString("DBuser");
this.DBpasswd = getString("DBpasswd");
//读取操作系统的类型
String system_type = getString("system-type");
if(system_type != null) {
if(system_type.toLowerCase().equals("windows"))
split = ";";
else if(system_type.toLowerCase().equals("unix"))
split = ":";
}
//读取数据库类型
String database_type = getString("database-type");//读取数据库类型
if(database_type != null) {
if(database_type.toLowerCase().equals("mysql")) {
jdbcDriver = "com.mysql.cj.jdbc.Driver";
strCon = "jdbc:mysql://" + DBhost + ":" + DBport + "/"
+ DBname;
}
//后面可添加其他类型的数据库,例如:SqlServer,oracle等数据库,也是读取jdbcDriver和strCon
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3. 初始化
//下面2个函数为一个整体
//单态模式:Java程序运行时,一个类只有一个实例,
//多个实例化就有多个线程,会冲突
public static SqlManager createInstance() {
if(p == null) {
p = new SqlManager();
p.initDB();
}
return p;
}
//加载JDBC驱动程序
public void initDB() {
System.out.println(strCon);
System.out.println(jdbcDriver);
try {
Class.forName(jdbcDriver);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println("Can't Find Database Driver.");
}
}
4.创建数据库连接并执行SQL语句
public void connectDB() {
try {
System.out.println("SqlManager:Connecting to database ...");
//获取连接
Sqlconn = DriverManager.getConnection(strCon, DBuser, DBpasswd);
//执行SQL语句
Sqlstmt = Sqlconn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("ConnectDB" + e.getMessage());
}
System.out.println("SqlManager:Connect to database successful.");
}
5.执行无返回数据的数据查询,返回值是被改变的数据库项数或查询数据库的操作接口
//执行无返回数据的数据查询,返回值是被改变的数据库项数
//例如,对数据的添加删除修改等
public int executeUpdate(String sql) {
int ret = 0;
try {
//执行数据库项数步骤
ret = Sqlstmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeUpdate:" + e.getMessage());
}
return ret;
}
//查询数据库的操作接口
//例如,获取数据和查找数据等
public ResultSet executeQuery(String sql) {
ResultSet rs = null;
try {
//返回结果集,该结果集只能用next()函数,若要使用其它函数,需要用代码来编写可执行其它函数的代码
//而且while(next()){}只能被执行一个来回,即从头到尾,不能多次执行while(next()){}语句
rs = Sqlstmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeQuery" + e.getMessage());
}
return rs;
}
6.断开数据库
public void closeDB() {
try {
System.out.println("SqlManager:Close Connection to database ...");
Sqlstmt.close(); //关闭查询
Sqlconn.close(); //关闭连接
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("CloseDB" + e.getMessage());
}
System.out.println("SqlManager:Close connection successful.");
}
7.完整代码如下
package samples.util;
import java.sql.*;
import java.util.PropertyResourceBundle;
public class SqlManager {
//第一步,定义变量
private static SqlManager p = null; //静态成员,支持单态模式
private PropertyResourceBundle bundle = null; //配置资源文件
private static String jdbcDriver = null; //JDBC驱动类型
private static String split = null; //文件分隔符
private String DBType = null; //数据库类型
private String DBhost = "127.0.0.1"; //数据库主机地址
private String DBname = ""; //数据库名
private String DBport = ""; //数据库端口
private String DBuser = ""; //数据库用户名
private String DBpasswd = ""; //数据库密码
//处理连接的变量
private Connection Sqlconn = null;
private Statement Sqlstmt = null;
private String strCon = null;
//第二步,构造私有函数用于提取properties中数据库的信息,并赋值给SqlManager类中对应的成员属性
private SqlManager() { //私有构造函数
try {
//导入properties文件
//不能写成"/sysConfig.properties"
bundle = new PropertyResourceBundle(SqlManager.class.
getResourceAsStream("sysConfig.properties"));
//给成员属性赋值
this.DBhost = getString("DBhost");
this.DBname = getString("DBname");
this.DBport = getString("DBport");
this.DBuser = getString("DBuser");
this.DBpasswd = getString("DBpasswd");
//读取操作系统的类型
String system_type = getString("system-type");
if(system_type != null) {
if(system_type.toLowerCase().equals("windows"))
split = ";";
else if(system_type.toLowerCase().equals("unix"))
split = ":";
}
//读取数据库类型
String database_type = getString("database-type");//读取数据库类型
if(database_type != null) {
if(database_type.toLowerCase().equals("mysql")) {
jdbcDriver = "com.mysql.cj.jdbc.Driver";
strCon = "jdbc:mysql://" + DBhost + ":" + DBport + "/"
+ DBname;
}
//后面可添加其他类型的数据库,例如:SqlServer,oracle等数据库,也是读取jdbcDriver和strCon
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//第三步,初始化,下面2个函数为一个整体
//单态模式:Java程序运行时,一个类只有一个实例,
//多个实例化就有多个线程,会冲突
public static SqlManager createInstance() {
if(p == null) {
p = new SqlManager();
p.initDB();
}
return p;
}
//加载JDBC驱动程序
public void initDB() {
System.out.println(strCon);
System.out.println(jdbcDriver);
try {
Class.forName(jdbcDriver);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println("Can't Find Database Driver.");
}
}
//获取资源文件字符串函数
public String getString(String s) { //读取资源文件的字符串
return this.bundle.getString(s);
}
//第四步,创建数据库连接并执行SQL语句
public void connectDB() {
try {
System.out.println("SqlManager:Connecting to database ...");
//获取连接
Sqlconn = DriverManager.getConnection(strCon, DBuser, DBpasswd);
//执行SQL语句
Sqlstmt = Sqlconn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("ConnectDB" + e.getMessage());
}
System.out.println("SqlManager:Connect to database successful.");
}
//第5步,执行无返回数据的数据查询,返回值是被改变的数据库项数
//例如,对数据的添加删除修改等
public int executeUpdate(String sql) {
int ret = 0;
try {
//执行数据库项数步骤
ret = Sqlstmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeUpdate:" + e.getMessage());
}
return ret;
}
//第5步,查询数据库的操作接口
//例如,获取数据和查找数据等
public ResultSet executeQuery(String sql) {
ResultSet rs = null;
try {
//返回结果集,该结果集只能用next()函数,若要使用其它函数,需要用代码来编写可执行其它函数的代码
//而且while(next()){}只能被执行一个来回,即从头到尾,不能多次执行while(next()){}语句
rs = Sqlstmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeQuery" + e.getMessage());
}
return rs;
}
//第6步,断开数据库
public void closeDB() {
try {
System.out.println("SqlManager:Close Connection to database ...");
Sqlstmt.close(); //关闭查询
Sqlconn.close(); //关闭连接
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("CloseDB" + e.getMessage());
}
System.out.println("SqlManager:Close connection successful.");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//测试代码是否编写正确
SqlManager.createInstance().connectDB();
SqlManager.createInstance().closeDB();
}
}
8.执行SqlManager类检验是否编写成功
执行成功的截图如下
❤️三、使用JDBC
✨(1)数据库有关信息以写入.properties文件中
✨(2)test数据库中student表的信息如下
private static SqlManager p = null; //静态成员,支持单态模式 private PropertyResourceBundle bundle = null; //配置资源文件 private static String jdbcDriver = null; //JDBC驱动类型 private static String split = null; //文件分隔符 private String DBType = null; //数据库类型 private String DBhost = "127.0.0.1"; //数据库主机地址 private String DBname = ""; //数据库名 private String DBport = ""; //数据库端口 private String DBuser = ""; //数据库用户名 private String DBpasswd = ""; //数据库密码 //处理连接的变量 private Connection Sqlconn = null; private Statement Sqlstmt = null; private String strCon = null; //连接字
2.构造私有函数用于提取properties中数据库的信息,并赋值给SqlManager类中对应的成员属性
private SqlManager() { //私有构造函数
try {
//导入properties文件
//不能写成"/sysConfig.properties"
bundle = new PropertyResourceBundle(SqlManager.class.
getResourceAsStream("sysConfig.properties"));
//给成员属性赋值
this.DBhost = getString("DBhost");
this.DBname = getString("DBname");
this.DBport = getString("DBport");
this.DBuser = getString("DBuser");
this.DBpasswd = getString("DBpasswd");
//读取操作系统的类型
String system_type = getString("system-type");
if(system_type != null) {
if(system_type.toLowerCase().equals("windows"))
split = ";";
else if(system_type.toLowerCase().equals("unix"))
split = ":";
}
//读取数据库类型
String database_type = getString("database-type");//读取数据库类型
if(database_type != null) {
if(database_type.toLowerCase().equals("mysql")) {
jdbcDriver = "com.mysql.cj.jdbc.Driver";
strCon = "jdbc:mysql://" + DBhost + ":" + DBport + "/"
+ DBname;
}
//后面可添加其他类型的数据库,例如:SqlServer,oracle等数据库,也是读取jdbcDriver和strCon
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3. 初始化
//下面2个函数为一个整体
//单态模式:Java程序运行时,一个类只有一个实例,
//多个实例化就有多个线程,会冲突
public static SqlManager createInstance() {
if(p == null) {
p = new SqlManager();
p.initDB();
}
return p;
}
//加载JDBC驱动程序
public void initDB() {
System.out.println(strCon);
System.out.println(jdbcDriver);
try {
Class.forName(jdbcDriver);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println("Can't Find Database Driver.");
}
}
4.创建数据库连接并执行SQL语句
public void connectDB() {
try {
System.out.println("SqlManager:Connecting to database ...");
//获取连接
Sqlconn = DriverManager.getConnection(strCon, DBuser, DBpasswd);
//执行SQL语句
Sqlstmt = Sqlconn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("ConnectDB" + e.getMessage());
}
System.out.println("SqlManager:Connect to database successful.");
}
5.执行无返回数据的数据查询,返回值是被改变的数据库项数或查询数据库的操作接口
//执行无返回数据的数据查询,返回值是被改变的数据库项数
//例如,对数据的添加删除修改等
public int executeUpdate(String sql) {
int ret = 0;
try {
//执行数据库项数步骤
ret = Sqlstmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeUpdate:" + e.getMessage());
}
return ret;
}
//查询数据库的操作接口
//例如,获取数据和查找数据等
public ResultSet executeQuery(String sql) {
ResultSet rs = null;
try {
//返回结果集,该结果集只能用next()函数,若要使用其它函数,需要用代码来编写可执行其它函数的代码
//而且while(next()){}只能被执行一个来回,即从头到尾,不能多次执行while(next()){}语句
rs = Sqlstmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeQuery" + e.getMessage());
}
return rs;
}
6.断开数据库
public void closeDB() {
try {
System.out.println("SqlManager:Close Connection to database ...");
Sqlstmt.close(); //关闭查询
Sqlconn.close(); //关闭连接
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("CloseDB" + e.getMessage());
}
System.out.println("SqlManager:Close connection successful.");
}
7.完整代码如下
package samples.util;
import java.sql.*;
import java.util.PropertyResourceBundle;
public class SqlManager {
//第一步,定义变量
private static SqlManager p = null; //静态成员,支持单态模式
private PropertyResourceBundle bundle = null; //配置资源文件
private static String jdbcDriver = null; //JDBC驱动类型
private static String split = null; //文件分隔符
private String DBType = null; //数据库类型
private String DBhost = "127.0.0.1"; //数据库主机地址
private String DBname = ""; //数据库名
private String DBport = ""; //数据库端口
private String DBuser = ""; //数据库用户名
private String DBpasswd = ""; //数据库密码
//处理连接的变量
private Connection Sqlconn = null;
private Statement Sqlstmt = null;
private String strCon = null;
//第二步,构造私有函数用于提取properties中数据库的信息,并赋值给SqlManager类中对应的成员属性
private SqlManager() { //私有构造函数
try {
//导入properties文件
//不能写成"/sysConfig.properties"
bundle = new PropertyResourceBundle(SqlManager.class.
getResourceAsStream("sysConfig.properties"));
//给成员属性赋值
this.DBhost = getString("DBhost");
this.DBname = getString("DBname");
this.DBport = getString("DBport");
this.DBuser = getString("DBuser");
this.DBpasswd = getString("DBpasswd");
//读取操作系统的类型
String system_type = getString("system-type");
if(system_type != null) {
if(system_type.toLowerCase().equals("windows"))
split = ";";
else if(system_type.toLowerCase().equals("unix"))
split = ":";
}
//读取数据库类型
String database_type = getString("database-type");//读取数据库类型
if(database_type != null) {
if(database_type.toLowerCase().equals("mysql")) {
jdbcDriver = "com.mysql.cj.jdbc.Driver";
strCon = "jdbc:mysql://" + DBhost + ":" + DBport + "/"
+ DBname;
}
//后面可添加其他类型的数据库,例如:SqlServer,oracle等数据库,也是读取jdbcDriver和strCon
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//第三步,初始化,下面2个函数为一个整体
//单态模式:Java程序运行时,一个类只有一个实例,
//多个实例化就有多个线程,会冲突
public static SqlManager createInstance() {
if(p == null) {
p = new SqlManager();
p.initDB();
}
return p;
}
//加载JDBC驱动程序
public void initDB() {
System.out.println(strCon);
System.out.println(jdbcDriver);
try {
Class.forName(jdbcDriver);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println("Can't Find Database Driver.");
}
}
//获取资源文件字符串函数
public String getString(String s) { //读取资源文件的字符串
return this.bundle.getString(s);
}
//第四步,创建数据库连接并执行SQL语句
public void connectDB() {
try {
System.out.println("SqlManager:Connecting to database ...");
//获取连接
Sqlconn = DriverManager.getConnection(strCon, DBuser, DBpasswd);
//执行SQL语句
Sqlstmt = Sqlconn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("ConnectDB" + e.getMessage());
}
System.out.println("SqlManager:Connect to database successful.");
}
//第5步,执行无返回数据的数据查询,返回值是被改变的数据库项数
//例如,对数据的添加删除修改等
public int executeUpdate(String sql) {
int ret = 0;
try {
//执行数据库项数步骤
ret = Sqlstmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeUpdate:" + e.getMessage());
}
return ret;
}
//第5步,查询数据库的操作接口
//例如,获取数据和查找数据等
public ResultSet executeQuery(String sql) {
ResultSet rs = null;
try {
//返回结果集,该结果集只能用next()函数,若要使用其它函数,需要用代码来编写可执行其它函数的代码
//而且while(next()){}只能被执行一个来回,即从头到尾,不能多次执行while(next()){}语句
rs = Sqlstmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeQuery" + e.getMessage());
}
return rs;
}
//第6步,断开数据库
public void closeDB() {
try {
System.out.println("SqlManager:Close Connection to database ...");
Sqlstmt.close(); //关闭查询
Sqlconn.close(); //关闭连接
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("CloseDB" + e.getMessage());
}
System.out.println("SqlManager:Close connection successful.");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//测试代码是否编写正确
SqlManager.createInstance().connectDB();
SqlManager.createInstance().closeDB();
}
}
8.执行SqlManager类检验是否编写成功
执行成功的截图如下
❤️三、使用JDBC
✨(1)数据库有关信息以写入.properties文件中
✨(2)test数据库中student表的信息如下
//下面2个函数为一个整体
//单态模式:Java程序运行时,一个类只有一个实例,
//多个实例化就有多个线程,会冲突
public static SqlManager createInstance() {
if(p == null) {
p = new SqlManager();
p.initDB();
}
return p;
}
//加载JDBC驱动程序
public void initDB() {
System.out.println(strCon);
System.out.println(jdbcDriver);
try {
Class.forName(jdbcDriver);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println("Can't Find Database Driver.");
}
}
4.创建数据库连接并执行SQL语句
public void connectDB() {
try {
System.out.println("SqlManager:Connecting to database ...");
//获取连接
Sqlconn = DriverManager.getConnection(strCon, DBuser, DBpasswd);
//执行SQL语句
Sqlstmt = Sqlconn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("ConnectDB" + e.getMessage());
}
System.out.println("SqlManager:Connect to database successful.");
}
5.执行无返回数据的数据查询,返回值是被改变的数据库项数或查询数据库的操作接口
//执行无返回数据的数据查询,返回值是被改变的数据库项数
//例如,对数据的添加删除修改等
public int executeUpdate(String sql) {
int ret = 0;
try {
//执行数据库项数步骤
ret = Sqlstmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeUpdate:" + e.getMessage());
}
return ret;
}
//查询数据库的操作接口
//例如,获取数据和查找数据等
public ResultSet executeQuery(String sql) {
ResultSet rs = null;
try {
//返回结果集,该结果集只能用next()函数,若要使用其它函数,需要用代码来编写可执行其它函数的代码
//而且while(next()){}只能被执行一个来回,即从头到尾,不能多次执行while(next()){}语句
rs = Sqlstmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeQuery" + e.getMessage());
}
return rs;
}
6.断开数据库
public void closeDB() {
try {
System.out.println("SqlManager:Close Connection to database ...");
Sqlstmt.close(); //关闭查询
Sqlconn.close(); //关闭连接
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("CloseDB" + e.getMessage());
}
System.out.println("SqlManager:Close connection successful.");
}
7.完整代码如下
package samples.util;
import java.sql.*;
import java.util.PropertyResourceBundle;
public class SqlManager {
//第一步,定义变量
private static SqlManager p = null; //静态成员,支持单态模式
private PropertyResourceBundle bundle = null; //配置资源文件
private static String jdbcDriver = null; //JDBC驱动类型
private static String split = null; //文件分隔符
private String DBType = null; //数据库类型
private String DBhost = "127.0.0.1"; //数据库主机地址
private String DBname = ""; //数据库名
private String DBport = ""; //数据库端口
private String DBuser = ""; //数据库用户名
private String DBpasswd = ""; //数据库密码
//处理连接的变量
private Connection Sqlconn = null;
private Statement Sqlstmt = null;
private String strCon = null;
//第二步,构造私有函数用于提取properties中数据库的信息,并赋值给SqlManager类中对应的成员属性
private SqlManager() { //私有构造函数
try {
//导入properties文件
//不能写成"/sysConfig.properties"
bundle = new PropertyResourceBundle(SqlManager.class.
getResourceAsStream("sysConfig.properties"));
//给成员属性赋值
this.DBhost = getString("DBhost");
this.DBname = getString("DBname");
this.DBport = getString("DBport");
this.DBuser = getString("DBuser");
this.DBpasswd = getString("DBpasswd");
//读取操作系统的类型
String system_type = getString("system-type");
if(system_type != null) {
if(system_type.toLowerCase().equals("windows"))
split = ";";
else if(system_type.toLowerCase().equals("unix"))
split = ":";
}
//读取数据库类型
String database_type = getString("database-type");//读取数据库类型
if(database_type != null) {
if(database_type.toLowerCase().equals("mysql")) {
jdbcDriver = "com.mysql.cj.jdbc.Driver";
strCon = "jdbc:mysql://" + DBhost + ":" + DBport + "/"
+ DBname;
}
//后面可添加其他类型的数据库,例如:SqlServer,oracle等数据库,也是读取jdbcDriver和strCon
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//第三步,初始化,下面2个函数为一个整体
//单态模式:Java程序运行时,一个类只有一个实例,
//多个实例化就有多个线程,会冲突
public static SqlManager createInstance() {
if(p == null) {
p = new SqlManager();
p.initDB();
}
return p;
}
//加载JDBC驱动程序
public void initDB() {
System.out.println(strCon);
System.out.println(jdbcDriver);
try {
Class.forName(jdbcDriver);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println("Can't Find Database Driver.");
}
}
//获取资源文件字符串函数
public String getString(String s) { //读取资源文件的字符串
return this.bundle.getString(s);
}
//第四步,创建数据库连接并执行SQL语句
public void connectDB() {
try {
System.out.println("SqlManager:Connecting to database ...");
//获取连接
Sqlconn = DriverManager.getConnection(strCon, DBuser, DBpasswd);
//执行SQL语句
Sqlstmt = Sqlconn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("ConnectDB" + e.getMessage());
}
System.out.println("SqlManager:Connect to database successful.");
}
//第5步,执行无返回数据的数据查询,返回值是被改变的数据库项数
//例如,对数据的添加删除修改等
public int executeUpdate(String sql) {
int ret = 0;
try {
//执行数据库项数步骤
ret = Sqlstmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeUpdate:" + e.getMessage());
}
return ret;
}
//第5步,查询数据库的操作接口
//例如,获取数据和查找数据等
public ResultSet executeQuery(String sql) {
ResultSet rs = null;
try {
//返回结果集,该结果集只能用next()函数,若要使用其它函数,需要用代码来编写可执行其它函数的代码
//而且while(next()){}只能被执行一个来回,即从头到尾,不能多次执行while(next()){}语句
rs = Sqlstmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeQuery" + e.getMessage());
}
return rs;
}
//第6步,断开数据库
public void closeDB() {
try {
System.out.println("SqlManager:Close Connection to database ...");
Sqlstmt.close(); //关闭查询
Sqlconn.close(); //关闭连接
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("CloseDB" + e.getMessage());
}
System.out.println("SqlManager:Close connection successful.");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//测试代码是否编写正确
SqlManager.createInstance().connectDB();
SqlManager.createInstance().closeDB();
}
}
8.执行SqlManager类检验是否编写成功
执行成功的截图如下
❤️三、使用JDBC
✨(1)数据库有关信息以写入.properties文件中
✨(2)test数据库中student表的信息如下
//执行无返回数据的数据查询,返回值是被改变的数据库项数
//例如,对数据的添加删除修改等
public int executeUpdate(String sql) {
int ret = 0;
try {
//执行数据库项数步骤
ret = Sqlstmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeUpdate:" + e.getMessage());
}
return ret;
}
//查询数据库的操作接口
//例如,获取数据和查找数据等
public ResultSet executeQuery(String sql) {
ResultSet rs = null;
try {
//返回结果集,该结果集只能用next()函数,若要使用其它函数,需要用代码来编写可执行其它函数的代码
//而且while(next()){}只能被执行一个来回,即从头到尾,不能多次执行while(next()){}语句
rs = Sqlstmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeQuery" + e.getMessage());
}
return rs;
}
6.断开数据库
public void closeDB() {
try {
System.out.println("SqlManager:Close Connection to database ...");
Sqlstmt.close(); //关闭查询
Sqlconn.close(); //关闭连接
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("CloseDB" + e.getMessage());
}
System.out.println("SqlManager:Close connection successful.");
}
7.完整代码如下
package samples.util;
import java.sql.*;
import java.util.PropertyResourceBundle;
public class SqlManager {
//第一步,定义变量
private static SqlManager p = null; //静态成员,支持单态模式
private PropertyResourceBundle bundle = null; //配置资源文件
private static String jdbcDriver = null; //JDBC驱动类型
private static String split = null; //文件分隔符
private String DBType = null; //数据库类型
private String DBhost = "127.0.0.1"; //数据库主机地址
private String DBname = ""; //数据库名
private String DBport = ""; //数据库端口
private String DBuser = ""; //数据库用户名
private String DBpasswd = ""; //数据库密码
//处理连接的变量
private Connection Sqlconn = null;
private Statement Sqlstmt = null;
private String strCon = null;
//第二步,构造私有函数用于提取properties中数据库的信息,并赋值给SqlManager类中对应的成员属性
private SqlManager() { //私有构造函数
try {
//导入properties文件
//不能写成"/sysConfig.properties"
bundle = new PropertyResourceBundle(SqlManager.class.
getResourceAsStream("sysConfig.properties"));
//给成员属性赋值
this.DBhost = getString("DBhost");
this.DBname = getString("DBname");
this.DBport = getString("DBport");
this.DBuser = getString("DBuser");
this.DBpasswd = getString("DBpasswd");
//读取操作系统的类型
String system_type = getString("system-type");
if(system_type != null) {
if(system_type.toLowerCase().equals("windows"))
split = ";";
else if(system_type.toLowerCase().equals("unix"))
split = ":";
}
//读取数据库类型
String database_type = getString("database-type");//读取数据库类型
if(database_type != null) {
if(database_type.toLowerCase().equals("mysql")) {
jdbcDriver = "com.mysql.cj.jdbc.Driver";
strCon = "jdbc:mysql://" + DBhost + ":" + DBport + "/"
+ DBname;
}
//后面可添加其他类型的数据库,例如:SqlServer,oracle等数据库,也是读取jdbcDriver和strCon
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//第三步,初始化,下面2个函数为一个整体
//单态模式:Java程序运行时,一个类只有一个实例,
//多个实例化就有多个线程,会冲突
public static SqlManager createInstance() {
if(p == null) {
p = new SqlManager();
p.initDB();
}
return p;
}
//加载JDBC驱动程序
public void initDB() {
System.out.println(strCon);
System.out.println(jdbcDriver);
try {
Class.forName(jdbcDriver);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println("Can't Find Database Driver.");
}
}
//获取资源文件字符串函数
public String getString(String s) { //读取资源文件的字符串
return this.bundle.getString(s);
}
//第四步,创建数据库连接并执行SQL语句
public void connectDB() {
try {
System.out.println("SqlManager:Connecting to database ...");
//获取连接
Sqlconn = DriverManager.getConnection(strCon, DBuser, DBpasswd);
//执行SQL语句
Sqlstmt = Sqlconn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("ConnectDB" + e.getMessage());
}
System.out.println("SqlManager:Connect to database successful.");
}
//第5步,执行无返回数据的数据查询,返回值是被改变的数据库项数
//例如,对数据的添加删除修改等
public int executeUpdate(String sql) {
int ret = 0;
try {
//执行数据库项数步骤
ret = Sqlstmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeUpdate:" + e.getMessage());
}
return ret;
}
//第5步,查询数据库的操作接口
//例如,获取数据和查找数据等
public ResultSet executeQuery(String sql) {
ResultSet rs = null;
try {
//返回结果集,该结果集只能用next()函数,若要使用其它函数,需要用代码来编写可执行其它函数的代码
//而且while(next()){}只能被执行一个来回,即从头到尾,不能多次执行while(next()){}语句
rs = Sqlstmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeQuery" + e.getMessage());
}
return rs;
}
//第6步,断开数据库
public void closeDB() {
try {
System.out.println("SqlManager:Close Connection to database ...");
Sqlstmt.close(); //关闭查询
Sqlconn.close(); //关闭连接
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("CloseDB" + e.getMessage());
}
System.out.println("SqlManager:Close connection successful.");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//测试代码是否编写正确
SqlManager.createInstance().connectDB();
SqlManager.createInstance().closeDB();
}
}
8.执行SqlManager类检验是否编写成功
执行成功的截图如下
❤️三、使用JDBC
✨(1)数据库有关信息以写入.properties文件中
✨(2)test数据库中student表的信息如下
package samples.util;
import java.sql.*;
import java.util.PropertyResourceBundle;
public class SqlManager {
//第一步,定义变量
private static SqlManager p = null; //静态成员,支持单态模式
private PropertyResourceBundle bundle = null; //配置资源文件
private static String jdbcDriver = null; //JDBC驱动类型
private static String split = null; //文件分隔符
private String DBType = null; //数据库类型
private String DBhost = "127.0.0.1"; //数据库主机地址
private String DBname = ""; //数据库名
private String DBport = ""; //数据库端口
private String DBuser = ""; //数据库用户名
private String DBpasswd = ""; //数据库密码
//处理连接的变量
private Connection Sqlconn = null;
private Statement Sqlstmt = null;
private String strCon = null;
//第二步,构造私有函数用于提取properties中数据库的信息,并赋值给SqlManager类中对应的成员属性
private SqlManager() { //私有构造函数
try {
//导入properties文件
//不能写成"/sysConfig.properties"
bundle = new PropertyResourceBundle(SqlManager.class.
getResourceAsStream("sysConfig.properties"));
//给成员属性赋值
this.DBhost = getString("DBhost");
this.DBname = getString("DBname");
this.DBport = getString("DBport");
this.DBuser = getString("DBuser");
this.DBpasswd = getString("DBpasswd");
//读取操作系统的类型
String system_type = getString("system-type");
if(system_type != null) {
if(system_type.toLowerCase().equals("windows"))
split = ";";
else if(system_type.toLowerCase().equals("unix"))
split = ":";
}
//读取数据库类型
String database_type = getString("database-type");//读取数据库类型
if(database_type != null) {
if(database_type.toLowerCase().equals("mysql")) {
jdbcDriver = "com.mysql.cj.jdbc.Driver";
strCon = "jdbc:mysql://" + DBhost + ":" + DBport + "/"
+ DBname;
}
//后面可添加其他类型的数据库,例如:SqlServer,oracle等数据库,也是读取jdbcDriver和strCon
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//第三步,初始化,下面2个函数为一个整体
//单态模式:Java程序运行时,一个类只有一个实例,
//多个实例化就有多个线程,会冲突
public static SqlManager createInstance() {
if(p == null) {
p = new SqlManager();
p.initDB();
}
return p;
}
//加载JDBC驱动程序
public void initDB() {
System.out.println(strCon);
System.out.println(jdbcDriver);
try {
Class.forName(jdbcDriver);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println("Can't Find Database Driver.");
}
}
//获取资源文件字符串函数
public String getString(String s) { //读取资源文件的字符串
return this.bundle.getString(s);
}
//第四步,创建数据库连接并执行SQL语句
public void connectDB() {
try {
System.out.println("SqlManager:Connecting to database ...");
//获取连接
Sqlconn = DriverManager.getConnection(strCon, DBuser, DBpasswd);
//执行SQL语句
Sqlstmt = Sqlconn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("ConnectDB" + e.getMessage());
}
System.out.println("SqlManager:Connect to database successful.");
}
//第5步,执行无返回数据的数据查询,返回值是被改变的数据库项数
//例如,对数据的添加删除修改等
public int executeUpdate(String sql) {
int ret = 0;
try {
//执行数据库项数步骤
ret = Sqlstmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeUpdate:" + e.getMessage());
}
return ret;
}
//第5步,查询数据库的操作接口
//例如,获取数据和查找数据等
public ResultSet executeQuery(String sql) {
ResultSet rs = null;
try {
//返回结果集,该结果集只能用next()函数,若要使用其它函数,需要用代码来编写可执行其它函数的代码
//而且while(next()){}只能被执行一个来回,即从头到尾,不能多次执行while(next()){}语句
rs = Sqlstmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("executeQuery" + e.getMessage());
}
return rs;
}
//第6步,断开数据库
public void closeDB() {
try {
System.out.println("SqlManager:Close Connection to database ...");
Sqlstmt.close(); //关闭查询
Sqlconn.close(); //关闭连接
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("CloseDB" + e.getMessage());
}
System.out.println("SqlManager:Close connection successful.");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//测试代码是否编写正确
SqlManager.createInstance().connectDB();
SqlManager.createInstance().closeDB();
}
}
8.执行SqlManager类检验是否编写成功
执行成功的截图如下
❤️三、使用JDBC
✨(1)数据库有关信息以写入.properties文件中
✨(2)test数据库中student表的信息如下
执行成功的截图如下
✨(1)数据库有关信息以写入.properties文件中
✨(2)test数据库中student表的信息如下
✨(3).jsp文件中使用SqlManager类
在编写代码之前我们还要将mysql包导入到以下目录,要让.jsp文件和mysql包都在WEB-INF文件夹下,如果是.java使用SqlManager类则省略这个步骤
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="samples.util.*" %>
封装jdbc
在编写代码之前我们还要将mysql包导入到以下目录,要让.jsp文件和mysql包都在WEB-INF文件夹下,如果是.java使用SqlManager类则省略这个步骤
| id | name | sex | score |
|---|---|---|---|
| <%= rs.getInt("id") %> | <%= rs.getString("name") %> | <%= rs.getString("sex") %> | <%= rs.getInt("score") %> |
✨(4) 结果
1.执行SQL语句:sqlQuery
2.执行SQL语句:sqlUpdate
代码参考文献:[1]彭超,马丁.新一代JSP网络编程入门实践[J].清华大学出版社2007(1):128-133



