首先说下我就一个菜鸡,只是记录下自己的学习过程,大佬们无视我就好。。。
---------------------------------------------------------------------------------------------------------
今天学习了JDBC,下午就做了一个经典的增删改查的案例,教务管理系统
自己也试着封装了一下,面向对象思想嘛
原来一直用的eclipse,直到今天接触到idea才知道啥叫真正的好用,但对于idea还是比较陌生,还得摸索一段时间。
这边就只记录我在进行数据库连接时产生的一些问题,其他的都太简单了,没有记录必要。
关于JDBC我单独写了一个类,先贴上我最开始写的一个版本
package org.lanqiao.jwgl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Jdbc {
static String url = "jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8";
static String user = "root";
static String pwd = "123456";
//连接数据库,并返回连接对象
public static void connetcDatabase() throws Exception {
//导入驱动类
Class.forName("com.mysql.jdbc.Driver");
//创建连接对象
Connection conn = DriverManager.getConnection(url,user,pwd);
//返回连接对象
return conn;
}
//数据库查询操作
public static ResultSet executeQueryDatabase(String sql) throws Exception {
//调用连接数据库方法连接数据库
Connection conn = connetcDatabase();
//创建命令行
Statement stt = conn.createStatement();
//执行sql语句
ResultSet result = stt.executeQuery(sql);
//关闭数据库连接
conn.close();
stt.close();
//返回操作结果
return result;
}
//数据库增删改操作
public static int executeUpdateDatabase(String sql) throws Exception {
//调用连接数据库方法连接数据库
Connection conn = connetcDatabase();
//创建命令行
Statement stt = conn.createStatement();
//执行sql语句
int line = stt.executeUpdate(sql);
//关闭数据库连接
conn.close();
stt.close();
//返回影响行数
return line;
}
}
这样写的话,增删改没啥问题,都能正常操作,但唯独查询的时候报异常了
Operation not allowed after ResultSet closed
后来百度查询了一番,发现是因为在result进行遍历操作之前就把数据库连接给关闭了
就下面这段代码
//数据库查询操作
public static ResultSet executeQueryDatabase(String sql) throws Exception {
//调用连接数据库方法连接数据库
Connection conn = connetcDatabase();
//创建命令行
Statement stt = conn.createStatement();
//执行sql语句
ResultSet result = stt.executeQuery(sql);
//就是下面这段的锅,导致在返回操作结果进行遍历之前关闭了数据库连接
conn.close();
stt.close();
//返回操作结果
return result;
}
后来左思右想,我干脆把Connection和Statement对象都创建成全局的,然后单独写个关闭数据库的方法
//关闭数据库连接
public static void closeDatabase() throws Exception {
//关闭数据库连接
conn.close();
stt.close();
}
然后每次增删改查操作后都调用这个方法关闭数据库连接,这样就解决了
然后其它的问题倒是没出现,最后贴上没有任何问题的代码
package org.lanqiao.jwgl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Jdbc {
static String url = "jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8";
static String user = "root";
static String pwd = "123456";
//定义成全局变量方便关闭
static Connection conn;
static Statement stt;
//连接数据库
public static void connetcDatabase() throws Exception {
//导入驱动类
Class.forName("com.mysql.jdbc.Driver");
//创建连接对象
conn = DriverManager.getConnection(url,user,pwd);
}
//数据库查询操作
public static ResultSet executeQueryDatabase(String sql) throws Exception {
//调用连接数据库方法连接数据库
connetcDatabase();
//创建命令行
stt = conn.createStatement();
//执行sql语句
ResultSet result = stt.executeQuery(sql);
//返回操作结果
return result;
}
//数据库增删改操作
public static int executeUpdateDatabase(String sql) throws Exception {
//调用连接数据库方法连接数据库
connetcDatabase();
//创建命令行
stt = conn.createStatement();
//执行sql语句
int line = stt.executeUpdate(sql);
//返回影响行数
return line;
}
//关闭数据库连接
public static void closeDatabase() throws Exception {
//关闭数据库连接
conn.close();
stt.close();
}
}
最后提一下,idea导出jar包是真蛋疼,开始导出一个,运行报错误,jar包损坏
再查了许久的资料后,发现选择jar后不要选择那个Empty,而是选另外一个,但是也得和mysql架包放在一起才能运行
第一次用idea不太熟练,希望有大佬知道如何正确导出jar包,还望指出,万分感谢!!!