使用JDBC完成数据库的操作需要写很多的重复代码,写起来也很麻烦。
于是我将新增、删除、修改、查询的代码都封装了起来,包过了变量类型处理也直接进行了封装。
在使用时只需三四行代码就能完成一个操作。
public class JdbcPz {
private static String url="";
private static String username="";
private static String password="";
//加载
static{
System.out.println("-------JDBC_XT_1.0------\n");
System.out.println("》》》 开始加载配置……");
//配置存放在Properties中
Properties pro = new Properties();
try {
//读取配置
pro.load(new FileReader(new File("src\\jdbc.properties")));
url=pro.getProperty("url");
username=pro.getProperty("username");
password=pro.getProperty("password");
String driver = pro.getProperty("driver");
System.out.println("》》》 配置加载完成!");
//加载驱动
Class.forName(driver);
System.out.println("》》》 驱动加载完成!\n");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//连接数据库
public static Connection getConnection() throws SQLException{
System.out.println("✔ 数据库已连接!(ノ ̄▽ ̄)\n");
return DriverManager.getConnection(url, username, password);
}
//关闭连接
public void close(Connection conn,PreparedStatement ps,ResultSet rs){
try {
if (conn != null) {
conn.close();
}
if(ps !=null){
ps.close();
}
if(rs!=null){
rs.close();
}
System.out.println("* 所有连接已关闭 !");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
初始化:使用时调用LoadJdbc()即刻完成连接数据库的初始化
//实例JdbcPz
public static JdbcPz jdb = new JdbcPz();
//需用到的变量
private static Connection conn=null;
private static PreparedStatement ps=null;
private static ResultSet rs=null;
public static String SQLsen=null;
//参数数组,SQL语句的参数直接放入ArrayList
public static ArrayList<Object> parameter = new ArrayList<>();
//初始化
public static void LoadJdbc(){
try {
//调用配置JdbcPz 中的连接方法完成初始化
conn=JdbcPz.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
新增、删除、修改、删除
下面的方法封装了简单新增、删除、修改、删除的操作,使用时只需传入SQL语句及参数就能返回结果,参数类型的也能通过判断直接在封装中处理。
//afferentSQL() 接收出传入的SQL语句
public static void afferentSQL(String Sqlsentence){
try {
SQLsen = Sqlsentence;
ps = conn.prepareStatement(Sqlsentence,Statement.RETURN_GENERATED_KEYS);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* //增、修、删 一条数据并返回影响条数
* @Sqlsentence SQL语句
* @author JDBC_XT by 丘秋
*/
//变量赋值返回影响条数
public static int UpdatemoveXT(){
int a = 0;
try {
//遍历变量
for(int i=0;i<parameter.size();i++){
//下标从0开始,要加个1
int o = i + 1;
//取出变量元素
Object param = parameter.get(i);
//判断变量的类型并完成赋值 (只写三种,可以继续处理更多类型)
if (param instanceof Integer) {
ps.setInt(o,(int)param);
} else if (param instanceof Double) {
ps.setDouble(o,(double)param);
} else if (param instanceof String) {
ps.setString(o,(String)param);
}
}
//执行SQL,完成操作
a = ps.executeUpdate();
System.out.println("✔ 操作 "+ a +" 条数据成功 !");
} catch (SQLException e) {
e.printStackTrace();
}finally{
//关闭流
closeXT();
}
//返回影响条数
return a;
}
/**
* 查询数据
*/
public static List<Object> SelectXT(){
//要返回的List数组
List<Object> users = new ArrayList<Object>();
try {
//处理变量
for(int i=0;i<parameter.size();i++){
int o = i + 1;
Object param = parameter.get(i);
if (param instanceof Integer) {
ps.setInt(o,(int)param);
} else if (param instanceof Double) {
ps.setDouble(o,(double)param);
} else if (param instanceof String) {
ps.setString(o,(String)param);
}
}
//执行SQL
rs=ps.executeQuery();
int ts= 0;
//获取数据库表的属性
ResultSetMetaData rsmd = rs.getMetaData();
//遍历返回结果并存入List
while (rs.next()) {
ts++;
//使用Map集合保存每条数据
Map<String, Object> rowData = new HashMap<String, Object>();
//遍历当前条的每一列
for(int l=1;l<=rsmd.getColumnCount();l++){
rowData.put(rsmd.getColumnName(l),rs.getObject(l));
}
//追加到List中
users.add(rowData);
}
System.out.println("✔ 查询数据成功,共返回"+ts+" 条数据 !");
} catch (SQLException e) {
e.printStackTrace();
}finally{
//关闭
closeXT();
}
//返回数据
return users;
}
//关闭
private static void closeXT(){
parameter.clear();
try {
if(ps!=null){
ps.close();
}
if(rs!=null){
rs.close();
}
ps=null;rs=null;
} catch (SQLException e) {
e.printStackTrace();
}
}
//需先继承封装的操作类
public class demoxt extends Xt_Operate{
//初始化,直接完成JDBC的配置与数据库连接
LoadJdbc();
//新增一条数据并返回影响条数
//使用afferentSQL() 传入SQL语句
afferentSQL("insert into user(name,password) values(?,?)");
// parameter.add() 按顺序传入变量,**数据类型不需要管**
parameter.add(0,"sss");
parameter.add(1,888);
//UpdatemoveXT()执行并返回影响条数
int a = UpdatemoveXT();
//修改一条数据并返回影响条数
afferentSQL("update user set name=?,password=? where id=?");
parameter.add(0,"jxt");
parameter.add(1,"123456");
parameter.add(2,b);
int c = UpdatemoveXT();
//删除一条数据并返回影响条数
afferentSQL("delete from user where id=?");
parameter.add(0,b);
int d = UpdatemoveXT();
//查询数据并返回查询结果
afferentSQL("SELECT * from user");
//SelectXT()使用list接收返回结果
List<Object> usersa = SelectXT();
//数据读取示例
//获取第一条数据
Map<String, Object> rowData = (Map<String, Object>)usersa.get(0);
//获取第一条数据的name字段
rowData.get("name");
System.out.println("第1条数据的name字段:"+rowData.get("name"));
}