JavaWeb——教你写db数据库连接类

db连接类

db就是database(数据库),下面我讲演示如何通过java语言通过jdbc的方式来连接到你所要的数据库,本例中以oracle为参考。

代码实现

首先我们先创造几个等会会用到的对象

  1. 创造一个数据库连接对象(Connection对象,代表与数据源进行的唯一会话。)。
  2. 创建编译语句对象(Statement对象,建立了到特定数据库的连接之后,就可用该连接发送 SQL 语句。)。
  3. 创建预编译语句对象(PreparedStatement对象, 实例包含已编译的 SQL 语句。这就是使语句“准备好”)。
  4. 创建结果集对象(ResultSet对象, 结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等.)
    ps:结果集对象在oracle中如果是查询会返回一个resultset,但是当插入,删除和更新值的时候返回的是被影响的行数,所以这时候需要用int类型来接收这个值。
    // 创建一个数据库连接
    Connection connection = null;
    // 创建编译语句对象
    Statement stat =null;
    // 创建预编译语句对象
    PreparedStatement pstat = null;
    // 创建结果集对象
    ResultSet rs1 = null;
    int rs2 ;

接着我们编写我们的第一个连接方法,这是整个db数据库连接类的基础。

我们需要4个参数:

  1. driverName,这个是你驱动的名称。
  2. URL,你数据库的地址,比如我jdbc:oracle:thin:@localhost:1521:stulibrary中,localhost表示在本机,1521表示数据库的端口号,stulibrary表示数据库的名称。
  3. userName,表示你的数据库登录名。
  4. pwd,表示登录名的登录密码
    //驱动名称
    private static final String driverName="oracle.jdbc.driver.OracleDriver";
    //数据库的地址(通过端口和SID找到对应的数据库)
    private static final String URL="jdbc:oracle:thin:@localhost:1521:stulibrary";
    //数据库登录用户名
    private static final String userName="ADMIN"; 
    //数据库登录密码
    private static final String pwd="123456";

下面是具体的连接类,定义好变量之后我们的操作将会很简单。

这个类返回的是connetion对象,这是整个连接类最基础的对象,所有操作都要围绕这个对象展开。我们需要传入刚才定义的驱动,URL,用户名和密码,如果连接成功将会在命令行输出连接成功。(如果想测试记得写主类哦,或者在JUNIT内测试也可行,建议后者)

    public Connection getConnection(){
        try {
            //加载oracle驱动
            Class.forName(driverName);
            //通过驱动获取数据库的连接
            connection = DriverManager.getConnection(URL,userName,pwd);
            System.out.println("连接成功");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return connection;
    }

下面我们来写具体的操作的方法

查询

在查询方法中要求输入的sql语句,这个是用String类型定义的数据库PL/SQL语句。
executeQuery(sql)方法就是用来用sql查询的。

public ResultSet query(String sql){
        try {
            //通过刚才的getConnection方法获得一个连接的对象。
            connection = getConnection();
            //向数据库中发送你的sql语句
            stat = connection.createStatement();
            //获得所查询的结果,返回的是Resultset对象
            rs1 = stat.executeQuery(sql);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return rs1;
    }

更新

executeUpdate(sql)可以用来插入,删除和更新值。
其他操作与查询相同,见查询注释

public int update(String sql){
        try {
            connection = getConnection();
            stat = connection.createStatement();
            rs2 = stat.executeUpdate(sql);  
        } 
        catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return rs2;
    }

替换

替换类中需要sql语句和一个字符串。
prepareStatement时sql语句可以这样写
UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?
用问号代替所需要填入的值,然后通过pstat.setString方法再把值赋给它,具体实现是pstat.setString(?的位置),需要替换的字符串值)。
ps:需要注意的是?的位置从第一个开始,不是第0个,比如上条语句需要给第一个?赋值1时就需要这样写pstat.setString(1,“1”);

public void update(String sql, String[] args){
        try {
            connection = getConnection();
            pstat = connection.prepareStatement(sql);
            System.out.println(sql);
            System.out.println(args.length);
            for (int i = 0; i < args.length; i++) {
                pstat.setString(i+1, args[i]);
                System.out.println(pstat);
            }

            pstat.executeUpdate();
            connection.commit();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

删除

值得注意的是,这里就是我刚才所讲的,返回的受影响的行数,所以这里人返回的是int类型的rs2。在之后的编写中可以通过这个rs2判断是否删除成功。

        public int delete(String sql){
            try {
                connection = getConnection();
                stat = connection.createStatement();
                rs2 = stat.executeUpdate(sql);
                return rs2;
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return 0;
        }

最后很重要的一步,关闭数据库连接,释放资源

    public void close(){

        try {
            if(rs1!=null) {
                rs1.close();
            }
            if(stat!=null) {
                rs1.close();
            }
            if(pstat!=null) {
                rs1.close();
            }
            if(connection!=null) {
                rs1.close();
            }

        } catch (SQLException e) {
            // TODO: handle exception
        }
    }

至此这个db数据库连接类就完成了,你可以通过更换中间连接类所讲的一些变量来适应你的数据库,这样一个万能的数据库连接类就完成了。

最后注意

请先保证你的数据库可正常连接,并且一些驱动及URL地址等信息填写正确,不然就会出现连接不上的问题。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章