java与sql数据库的使用记录(入门级)

1 篇文章 0 订阅

java和sql数据库的使用(入门级)

刚学完java语法,第一个练手项目是一个java和sql的数据库管理程序,项目做了一大半,现在来总结一下在java程序中使用sql数据库以及简单的防sql注入(我用mysql,因为免费!)

以下按照使用sql所需要的顺序依次说明,后面的说明可能会用到前面程序中创建的对象

关于Connection,PreparedStatement和ResultSet

Connection:与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。

  • 这是官方文档的说法,用普通话来说,就是用它保存与数据库连接的“钥匙”。

  • 与数据库连接需要知道数据库的user、password和url,程序员设定好以上之后,通过DriverManager.getConnection(url,user,passwd)这个方法,,返回一个Connection对象

    (PS:类DriverManager,管理一组 JDBC 驱动程序的基本服务。简单地说是创建Connection这个“钥匙”对象的方法)
    
  • 以下为创建数据库连接(应该叫驱动程序?)的代码段

    public static Connection getconn()
    {       
    Connection conn = null;
    String user = "";
    String passwd = "";
    String url = "";    
    //加载驱动
    try
    {
        Class.forName("com.mysql.jdbc.Driver");//这里需要拿出来讲一讲
        conn = DriverManager.getConnection(url,user,passwd);
    }
    catch (SQLException e)
    {
        e.printStackTrace();
    }
    catch (ClassNotFoundException e)
    {
        e.printStackTrace();
    }
    
    return conn;
    }
    

PreparedStatement:表示预编译的 SQL 语句的对象。

  • 这个对象一般用来储存sql语句,也就是要在接下去的程序里执行的sql语句

    SELECT * FROM TABLES WHERE ID=?;
    

    类似以上的SQL语句(一般都是大写,为了更好地兼容性)

  • 通过前面创建的conn对象中的prepareStatement(String sql)方法,可以返回一个PreparedStatement的对象。

  • 中间之所以用问号,是为了做一个简单的防sql注入,通过PreparedStatement.setX(int parameterIndex, X x)方法,(有setDouble、setString等等)选择类型相对应的方法,将相应的数据放到“?”所在的位置。

  • 以下是随便找了一段代码,用来对应PreparedStatement

    conn = DbConn.getconn();
    String sqlName = "UPDATE SALESMAN SET SNAME=? WHERE SID=?";
    pstmt = conn.prepareStatement(sqlName);
    pstmt.setString(1, sName.getSName());
    pstmt.setInt(2, sName.getSId());
    

    此时sql语句中的两个“?”都已放入对应的量,预编译的处理结束

ResultSet:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

  • 这个用来保存数据库操作之后的结果,由方法PreparedStatement.executeUpdate()或者PreparedStatement.executeQuery()生成。前一个用来实现插入更新删除等操作,后一个专门用来查询数据用。

  • 如果是 查询 操作则保存返回的一行行结果,如果是 插入更新删除 则保存

    1. (1) SQL 数据操作语言 (DML) 语句的行数
    2. (2) 对于无返回内容的 SQL 语句,返回 0

    暂时觉得并没有什么卵用,用到插入更新删除操作的时候只要 返回值 > 0 就表示操作OK。

  • 下面分别实现两类操作的代码

    //插入更新删除等操作
    int rs = pstmt.executeUpdate();
    
    //查询操作
    ResultSet rs = pstmt.executeQuery();
    

    在方法executeQuery()中,我们返回的是一个ResultSet对象,而在方法executeUpdate(),我们返回的是int类型的数据(行数?)。


到此为止,你已经可以通过java调用相应的SQL语句来获得数据了
然而数据库用完了还要关闭!

关闭数据库

通过前面的使用,我们把数据放在两种对象中:ResultSet和int,这也就意味着关闭数据库的方法不太一样

  • 如果我们使用了Resultset,那我们需要和前面用过的的Connection、PreparedStatement一起关闭。

  • 如果没有创建Resultset对象,那我们只需要关闭Connection和PreparedStatement。

  • 代码分别如下图

    public static void addClose(PreparedStatement pstmt, Connection conn)
    {
        try
        {
            if (pstmt != null)
            {
                pstmt.close();
            }
        }catch(SQLException e1)
        {
            e1.printStackTrace();
        }
        try
        {
            if(conn != null)
            {
                conn.close();
            }
        }catch(SQLException e)
        {
            e.printStackTrace();
        }
    }
    public static void queryClose(PreparedStatement pstmt, ResultSet rs, Connection conn)
    {
        try
        {
            if (pstmt != null)
            {
                pstmt.close();
            }
        }
        catch (SQLException e1)
        {
            e1.printStackTrace();
        }
        try
        {
            if(rs != null)
            {
                rs.close();
            }
        }
        catch (SQLException e2)
        {
            e2.printStackTrace();
        }
        try
        {
            if(conn != null)
            {
                conn.close();
            }
        }
        catch (SQLException e3)
        {
            e3.printStackTrace();
        }
        }   
    

你需要在每一个数据库操作方法结束的时候关闭它们

好像没什么需要说的了吧。。明天写一些关于上面的具体内容的东西

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值