看这一篇博文的童鞋,相信已经对数据库交互的基础(数据库连接)已经掌握了。
如果没有掌握,请前往Java JDBC 之 URL 与数据库连接进行学习掌握!
接下来我来介绍一下 Java JDBC 之 PreparedStatement
PreparedStatement 是一种比 Statement 更加安全的数据库操作接口
首先我们来介绍一下它常用的方法
PreparedStatement 的 executeQuery方法和 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"));
}
下面来说一下PreparedStatement 的 executeQuery方法和 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。。。。。。。