Java JDBC 之 PreparedStatement

看这一篇博文的童鞋,相信已经对数据库交互的基础(数据库连接)已经掌握了。
如果没有掌握,请前往Java JDBC 之 URL 与数据库连接进行学习掌握!

接下来我来介绍一下 Java JDBC 之 PreparedStatement

PreparedStatement 是一种比 Statement 更加安全的数据库操作接口

首先我们来介绍一下它常用的方法

PreparedStatementexecuteQuery方法和 Statement 的一样,都是查询数据库数据的

//加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

//创建连接数据库的属性字符串
//url数据库地址
String url = "jdbc:sqlserver://localhost:1433;DatabaseName = DBDemo";
//登录名
String user = "sa";
//登录密码
String password = null;
//将写好的数据库连接字符串通过参数传入getConnection方法然后通过返回值获得与数据库的连接对象
Connection conn = DriverManager.getConnection(url, user, password);

//查询数据库数据的SQL语句
String sql = "select Id,Password,Name,Age from UserInfo where Name=?";

//通过参数化方式来将SQL语句传递进PreparedStatement对象中
//这里重点讲一下参数,参数就是你要使用的值,然后这个参数用?来表示,不管数据库中数据属于什么类型,都用?表示
//比如如果数据库中数据类型是varchar,我们用普通SQL语句传递值的时候就要用单引号括起来
//但是现在我们用的是参数化SQL语句,所以不管什么数据类型都使用?来表示,不用加上任何特殊符号
PreparedStatement pstmt = conn.prepareStatement(sql);

//参数的索引是从1开始的,从左往右数,每定义一个参数都要对其赋值,要不然运行时会报“索引超出范围”的错误信息
//接下来我们用setXXX的方法来给每个定义的参数赋值
//如果是varchar数据类型就用setString也可以用setObject
//如果是int数据类型就用setInt也可以用setObject
//其余数据类型类似,具体去查询数据库数据类型和java数据类型相应对照表
//setObject可以用于所有数据类型,一般情况下我们可以利用其来写操作数据库通用方法,接下来下面会描述
pstmt.setString(1, "小明");

//利用ResultSet对象来接收PreparedStatement对象executeQuery()方法返回的数据集
ResultSet rs = pstmt.executeQuery();

//迭代显示输出数据
while (rs.next()) {
    System.out.println("账号:" + rs.getInt("id") + 
                       "  密码:" + rs.getString("Password") + 
                       "  姓名:" + rs.getString("Name") + 
                       "  年龄:" + rs.getInt("age"));
}

下面来说一下PreparedStatementexecuteQuery方法和 Statement 的一样,都是对数据库进行(增、删、改)的

增加

//加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

//创建连接数据库的属性字符串
//url数据库地址
String url = "jdbc:sqlserver://localhost:1433;DatabaseName = DBDemo";
//登录名
String user = "sa";
//登录密码
String password = null;
//将写好的数据库连接字符串通过参数传入getConnection方法然后通过返回值获得与数据库的连接对象
Connection conn = DriverManager.getConnection(url, user, password);

//向数据库添加数据的SQL语句
String sql = "insert into UserInfo values(?,?,?,?)";

//将SQL语句以参数化传入PreparedStatement对象中
PreparedStatement pstmt = conn.prepareStatement(sql);

//用setXXX方法给参数赋值,不知道setXXX的往上重看一遍
pstmt.setInt(1, 131456);
pstmt.setString(2, "123456");
pstmt.setString(3, "大猫");
pstmt.setInt(4, 23);

//用rows变量来接收PreparedStatement对象的executeUpdate()方法返回的受影响行数
int rows = pstmt.executeUpdate();

//进行判断,如果返回的受影响行数大于0表示添加成功,否则失败
if (rows > 0) {
    System.out.println("添加成功!");
} else {
    System.out.println("添加失败!");
}

其余方法类似。。。。。。。。。

接下来是一个通用的(增、删、改)方法

/**
 * 数据库(增,删,改)操作
 * 
 * @param sql
 *            操作数据库的SQL语句
 * @param param
 *            用?代表参数的数组
 * @return 如果成功返回大于0的数字
 */
public int exceuteUpdate(String sql, Object[] param) {
    //创建一个PreparedStatement对象用来操作数据库
    PreparedStatement pstmt = null;
    try {
        //getConnection()方法为我自己定义的获取数据库连接的方法
        pstmt = getConnection().prepareStatement(sql);
        //判断param数组是否为空
        if (param != null) {
            //用for循环来给所有参数赋值
            for (int i = 0; i < param.length; i++) {
                pstmt.setObject((i + 1), param[i]);
            }
        }
        //用来返回受影响的行数
        return pstmt.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        closeAll(conn, pstmt, null);
    }
    //返回-1表示数据操作失败
    return -1;
}

好了,PreparedStatement 的简单介绍完了,加油VK。。。。。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值