java jdbc sqlhelper

package com.shop.util;

import java.sql.*;

//SqlHelper类
//定义了数据库连接函数,关闭查询结果集,关闭Statement对象,关闭数据库连接
//这样的做法是执行上述4个操作时可以直接调用函数(面向对象的思想),可以好好理解一下
public class SqlHelper {
    public static Connection getConnection() {
        Connection conn = null;
        String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";// 驱动
        String url = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Shopping";// SqlServer链接地址
        String username = "sa";// 用户名
        String password = "sa";// 密码
        try {
            Class.forName(driver);// 加载驱动类
            conn = DriverManager.getConnection(url, username, password);
        } catch (ClassNotFoundException e) {
            System.out.println("找不到驱动程序类 ,加载驱动失败!");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("数据库连接失败!");
            e.printStackTrace();
        }
        // System.out.println("连接成功");
        return conn;
    }
    //关闭连接
    public static void closeConn(Connection conn){
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    //关闭执行对象
    public static void closeStatement(Statement stmt){
        if(stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    //关闭结果集
    public static void closeResultSet(ResultSet rs){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

SqlHelper

商品dao方法的实现。

package com.shop.dao;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

import com.shop.po.Goods;
import com.shop.util.SqlHelper;

/**
 * GoodsDao接口实现类
 *
 * @author HP-Developer
 *
 */
public class GoodsDaoImpl implements GoodsDao {

    public int insertGoods(Goods goods) {
        Connection conn = null;
        //PreparedStatement和Statement的区别在于
        //PreparedStatement接口继承Statement,
        //PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象。
        //作为 Statement 的子类,PreparedStatement 继承了 Statement 的所有功能。
        //三种方法 execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要参数
        //PreparedStatement性能更优,建议使用,但是比较复杂一点

        //Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句
        //使用 Statement 对象执行语句
        Statement stmt = null;
        int result = 0;
        String name=goods.getName();
        String kind=goods.getKind();
        double price=goods.getPrice();
        int stock=goods.getStock();
        String des=goods.getDescription();
        String sql = "insert into Goods values(‘"+name+"‘,‘"+kind+"‘,‘"+price+"‘,‘"+stock+"‘,‘"+des+"‘)";
        // 访问数据库
        try {
            // 1获得连接
            conn = SqlHelper.getConnection();
            // 2执行对象
            stmt = conn.createStatement();
            // 3执行
            result = stmt.executeUpdate(sql);

        } catch (Exception e) {
            //捕捉错误
            e.printStackTrace();
        } finally {
            //关闭操作对象
            SqlHelper.closeStatement(stmt);
            //关闭连接
            SqlHelper.closeConn(conn);
        }
        //返回受影响的行数
        return result;
        //try catch finally是一种语句结构
        //就我个人的理解,在try中执行操作,catch捕捉错误,finally进行收尾
    }

    //删除和更新与插入类似 ,我就不加注释了
    public int deleteGoods(int id) {
        Connection conn = null;
        Statement stmt = null;
        int result = 0;
        String sql = "delete from Goods where gID=‘"+id+"‘";
        try {
            conn = SqlHelper.getConnection();
            stmt = conn.createStatement();
            result = stmt.executeUpdate(sql);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            SqlHelper.closeStatement(stmt);
            SqlHelper.closeConn(conn);
        }

        return result;
    }

    public int updateGoods(int id, Goods goods) {
        // TODO Auto-generated method stub
        Connection conn = null;
        Statement stmt = null;
        int result = 0;
        String name=goods.getName();
        String kind=goods.getKind();
        double price=goods.getPrice();
        int stock=goods.getStock();
        String des=goods.getDescription();
        String sql = "update Goods set gName=‘"+name+"‘,gKind=‘"+kind+"‘,gPrice=‘"+price+"‘,gNum=‘"+stock+"‘,gDes=‘"+des+"‘ where gID=‘"+id+"‘";
        try {
            conn = SqlHelper.getConnection();
            stmt = conn.createStatement();
            result = stmt.executeUpdate(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            SqlHelper.closeStatement(stmt);
            SqlHelper.closeConn(conn);
        }
        return result;
    }

    //查询全部商品
    //因为是多个对象,采用返回List的方式,返回Goods对象的集合
    public List<Goods> findAll() {
        Connection conn=null;
        Statement stmt=null;
        //创建对象集合
        List gdList = new ArrayList();
        ResultSet rs=null;
        String sql="select * from Goods";
        try{
            conn=SqlHelper.getConnection();
            stmt=conn.createStatement();
            rs=stmt.executeQuery(sql);
            while(rs.next()){
                //创建单个对象
                Goods gd = new Goods();
                gd.setId(rs.getInt("gID"));
                gd.setName(rs.getString("gName"));
                gd.setKind(rs.getString("gKind"));
                gd.setPrice(rs.getDouble("gPrice"));
                gd.setStock(rs.getInt("gNum"));
                gd.setDescription(rs.getString("gDes"));
                //将此对象存入集合中,昨天闫老师带我们学习了ArrayList,add方法大家应该不陌生
                gdList.add(gd);
            }
        }
        catch(SQLException e){
            e.printStackTrace();
        }
        finally{
            SqlHelper.closeResultSet(rs);//关闭结果集
            SqlHelper.closeStatement(stmt);//关闭Statement对象
            SqlHelper.closeConn(conn);//关闭连接
            //注意关闭的顺序不能
        }
        return gdList;
    }

    public Goods findById(int id) {
        Connection conn=null;
        Statement stmt=null;
        //在判断商品存在后再new对象,这样规范
        Goods gd = null;
        ResultSet rs=null;//定义数据集ResultSet 接受stmt.executeQuery(sql)的返回值
        String sql="select * from Goods where gID=‘"+id+"‘";
        try{
            conn=SqlHelper.getConnection();
            stmt=conn.createStatement();
            //gd=(Goods)stmt.executeQuery(sql);stmt.executeQuery(sql)的返回值是一个结果集ResultSet
            //因为返回的记录是一条,之前想用强制转换的方法实现返回一个商品(Goods)对象,但是不可行,这条代码错误,下面给出正确的操作
            rs=stmt.executeQuery(sql);
            if(rs.next()){
                gd=new Goods();
                gd.setId(rs.getInt("gID"));
                gd.setName(rs.getString("gName"));
                gd.setKind(rs.getString("gKind"));
                gd.setPrice(rs.getDouble("gPrice"));
                gd.setStock(rs.getInt("gNum"));
                gd.setDescription(rs.getString("gDes"));
            }
            else{
                //这样返回一个空商品对象,节省了即使对象为空还赋值的多余操作
                return gd;
            }
        }
        catch(SQLException e){
            e.printStackTrace();
        }
        finally{
            SqlHelper.closeResultSet(rs);//关闭结果集
            SqlHelper.closeStatement(stmt);//关闭
            SqlHelper.closeConn(conn);//关闭数据库连接
        }
        return gd;
    }
}

GoodsDaoImpl

代码转载于:http://www.cnblogs.com/wangkaipeng/p/4725548.html。

不做讲解,仅用于使用。

时间: 2024-08-02 19:03:35

java jdbc sqlhelper的相关文章

JAVA WEB SQLHelper类的封装

在这次做项目中,我对自己最满意的就是封装了一下SQLHelper类,我对自己感到骄傲主要是 我是初学者,我刚开始不知道可以这样做,我只是想着试着去这样做了,结果真的可以,所以我 在我的模块就自己封装了一个SQLHelper,虽然下面用的这个不是很好,但是基本上满足需求, 因为似乎所有类都能转换为String,所以就用String数组来补充sql语句中的可变参数,但是有 一个问题,就是在调用的时候第二个参数必须为null,或者String数组,如果只有一个参数,也 要用String数组的形式传进去

Java JDBC高级特性

1.JDBC批处理 实际开发中需要向数据库发送多条SQL语句,这时,如果逐条执行SQL语句,效率会很低,因此可以使用JDBC提供的批处理机制.Statement和PreparedStatemen都实现了批处理.测试表结构如下: Statement批处理程序示例 1 package server; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 impor

Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败 及sql2008外围服务器

转载:Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败 错误原因如下: Exception in thread "main" org.hibernate.exception.JDBCConnectionException: Cannot open connection at org.hibernate.exception.SQLStateConverter.convert(SQLStateConver

java jdbc 连接mysql数据库 实现增删改查

好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打交道非常基础的一个知识,也是比较接近底层的,在实际的工作中大家用得更多的其实还是比较成熟的框架,例如Hibernate.Mybatis. 但是作为这些成熟框架的底层的jdbc却也是我们应该去掌握的,只有了解了jdbc的增删改查,这样在以后如果有兴趣去研究Hibernate或者Mybatis的源代码的

第15篇-JAVA JDBC编程

第15篇-JAVA JDBC编程 每篇一句 :对于勇敢者,尝试是一条崭新的生活之路 初学心得: 但对于坎坷与泥泞,能以平常之心视之,就非常不容易 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-05-08| JAVA JDBC编程 ] 1.JDBC概述 通过使用JDBC API,Java程序可以非常方便地操作各种主流数据库,这是是Java语言的巨大魅力所在 由于Java语言的跨平台特性,所以使用JDBC API所编写的程序不仅可以实现跨数据库,还可以跨平台,具有非常优秀的可移植性

java JDBC 数据库链接

1.准备环境搭建: myeclipse,sql2005,jdbc. 2.都下载完之后开始进行安装 ,前两个是属于数据库软件,正常安装即可(注意数据库登陆不要使用windows验证) <1> 将JDBC解压缩到任意位置,比如解压到C盘program files下面,并在安装目录里找到sqljdbc.jar文件,得到其路径开始配置环境变量 在环境变量classpath 后面追加 C:\Program Files\Microsoft SQL Server2005 JDBC Driver\sqljdb

java jdbc操作SQLServer数据库

public static void main(String args[]){         System.out.println(321);         PreparedStatement ps = null;         ResultSet rs = null;         Connection ct = null;         try{             Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDri

java jdbc操作mysql

import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet; public class test {    public static final String DBDRIVER = "com.mysql.jdbc.Driver";    // 定义MySQL数据库的连接地址    public static fi

Java JDBC批处理插入数据操作

在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据.此外,我们将努力探索一些场景,如在内存不足时正常运行,以及如何优化批量操作. 首先,使用Java JDBC基本的API批量插入数据到数据库中. Simple Batch - 简单批处理    我把它叫做简单批处理.要求很简单,执行批量插入列表,而不是为每个INSERT语句每次提交数据库,我们将使用JDBC批处理操作和优化性能. 想想一下下面的代码: Bad