java 增删 工具类_JDBC的增删改写成一个方法,调用一个工具类

packagecom.hx.jdbc.connection;importjava.sql.Connection;importjava.sql.Statement;importcom.mysql.jdbc.UpdatableResultSet;importjunit.framework.TestCase;public class JDBCText extendsTestCase {/*** 创建一个insert,update,delete通用的方法

*@paramsql*/

public voidupDate(String sql){

Connection conn=null;

Statement statement=null;try{

conn=JDBCTools.getConnection2();//调用工具类中的getConnection2()方法完成数据库连接

statement=conn.createStatement();

statement.executeUpdate(sql);//执行sql语句

}catch(Exception e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{

JDBCTools.guanbi(statement, conn);//调用工具类中的guanbi()方法来完成关闭statement和conn

}

}

以上是一个JDBC访问数据库的增加,修改,删除通用的方法。其中完成数据库连接和关闭数据库的***重复且通用***的操作写在了工具类JDBCTools.java中,如下:

packagecom.hx.jdbc.connection;importjava.io.InputStream;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.Properties;public classJDBCTools {/*** 这是连接数据库的方法,放到此工具类中

*@return*@throwsException*/

public static Connection getConnection2() throwsException{//1.创建数据库的4个字符串//2.创建Properties对象

Properties properties=newProperties();//3.获取jdbc.pro对应的输入流

InputStream in=JDBCTools.class.getClassLoader().getResourceAsStream("com/hx/jdbc/connection/jdbc.properties");

//******此处重点关注******

//**********************

//******因为我出错了******

//**********************

System.out.println(in);//当时我报错上面一行代码空指针异常,此处打印in,输出null,

//知道上面一句代码并没访问到jdbc.properties配置文件,开始我直接写的jdbc.properties

//应该写根目录下的jdbc.properties//4.加载输入流

properties.load(in);//5.具体决定4个字符串的值

String driver=properties.getProperty("driver");

String jdbcUrl=properties.getProperty("jdbcUrl");

String user=properties.getProperty("user");

String password=properties.getProperty("password");//6.加载数据库驱动程序

Class.forName(driver);//7.通过DriverManager的getConnection()方法获取数据库连接

Connection conn=DriverManager.getConnection(jdbcUrl, user, password);returnconn;

}

/**

*这是关闭数据库的工具方法,因为曾删改都需要用,所以写在此工具方法中

*/public static voidguanbi(Statement statement,Connection conn){if(statement!=null){try{

statement.close();

}catch(Exception e2) {//TODO Auto-generated catch block

e2.printStackTrace();

}

}if(conn!=null){try{

conn.close();

}catch(Exception e2) {//TODO Auto-generated catch block

e2.printStackTrace();

}

}

}

}

以上的工具代码中我出错了,出错的原因如下:

首先用类加载资源文件的方式可以有以下三种: (包结构图)

3027258053c013e92ca1c5cc86eae588.png

1)InputStreaminStream=DaoFactory.class.getResourceAsStream("dao.properties");

​2)inStream=DaoFactory.class.getResourceAsStream("/com/jdbc/dao/dao.properties")

3)inStream=DaoFactory.class.getClassLoader().getResourceAsStream("com/jdbc/dao/dao.properties");

第一种和第二种方式是采用Class对象去加载,第三种采用ClassLoader对象去加载资源文件,之所以Class对象也可以加载资源文件是因为Class类封装的ClassLoader的getResourceAsStream方法。从Class类中的源码中可以看出:

601bfa5dbfe6435e9d329d541be4c6a8.png

​​之所以这样做无疑还是方便客户端的调用,省的每次获取ClassLoader才能加载资源文件的麻烦。

路径问题:

1. 第三种是最本质的做法,前两种也是基于第三种去实现的。JVM会使BootstrapLoader去加载资源文件。所以路径还是这种相对于工程的根目录即"com/jdbc/dao/dao.properties"(不需要“/”)。

2. 第一种是采用的相对路径,资源文件相对于当前这个类即(DaoFactory类)的位置,这种方式Class对象做了一些处理。即resloveName(name)这个方法。最终name还是会转换成适合第三方式的name参数

3. 第二种是采用绝对路径,绝对路径是相对于classpath根目录的路径(工程里src目录对应bin目录(存放.class文件的目录))。

然后下面是我的jdbc.properties配置文件

driver=com.mysql.jdbc.Driver

jdbcUrl=jdbc:mysql://localhost:3306/students

user=root

password=5678

下面是调用upDate()方法进行增删改操作:

packagecom.hx.jdbc.connection;public classTest {public static voidmain(String[] args) {

String sql="INSERT INTO t_student(NAME,age,email) VALUES('78878','22','999999999')";//String sql="DELETE FROM t_student where id=3";//String sql="UPDATE t_student set name='66666',age='100',email='000' where id=3";

JDBCText j=newJDBCText();

j.upDate(sql);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值