1.PreparedStatement接口
PreparedStatement表示预编译的SQL语句对象。SQL语句被预编译并存储在PreparedStatement对象中,然后可以使用此对象多次高效地执行该语句。数据库是将编译的SQL写入到缓存中,如果下次执行的SQL存在于缓存中则直接取出使用以达到高效率的目的。
2.使用PreparedStatement实现数据库的增删改查操作
在对SQL进行预处理时可以使用通配符“?”来代替字段的值,只要在预处理语句执行之前设置通配符索表示的具体值即可。例如:
sql = con.preparedStatemen("select * from mytable where id < ?");
那么sql对象执行之前,必须调用相应的方法设置通配符“?”代表的具体值,例如:
sql.setInt(1,18);
Java实现PreparedStatement接口对数据库的增删改查操作,mytable数据信息:
package cn.nwsuaf.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 用PreparedStatement接口实现数据库的增删改查操作
*
* @author 刘永浪
*
*/
public class PreparedStatementDemo {
// 数据库连接地址
public static String URL = "jdbc:mysql://localhost:3306/test";
// 驱动程序包
public static String PATH = "com.mysql.jdbc.Driver";
// 用户名
public static String USE = "root";
// 密码
public static String PASSWORD = "root";
private Connection conn;
PreparedStatement ps;
ResultSet rs;
public PreparedStatementDemo() {
try {
// 加载数据库驱动程序
Class.forName(PATH);
// 连接数据库
conn = DriverManager.getConnection(URL, USE, PASSWORD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 插入操作
public void insert(String name) {
String sql = "insert into mytable (name) values (?)";
try {
// 执行SQL查询语句
ps = conn.prepareStatement(sql);
// 给占位符赋值
ps.setString(1, name);
ps.executeUpdate();
System.out.println("succeed");
} catch (SQLException e) {
e.printStackTrace();
}
}
// 根据id删除数据
public void delete(int id) {
String sql = "delete from mytable where id = ?";
try {
ps = conn.prepareStatement(sql);
ps.setInt(1, id);
;
ps.executeUpdate();
System.out.println("succeed");
} catch (SQLException e) {
e.printStackTrace();
}
}
// 更改指定id的数据,name为新的姓名
public void update(int id, String name) {
String sql = "update mytable set name = ? where id = ?";
try {
ps = conn.prepareStatement(sql);
ps.setString(1, name);
ps.setInt(2, id);
ps.executeUpdate();
System.out.println("succeed");
} catch (SQLException e) {
e.printStackTrace();
}
}
// 根据id查找相应的数据
public void findById(int id) {
String sql = "select name from mytable where id = ?";
try {
ps = conn.prepareStatement(sql);
ps.setInt(1, id);
rs = ps.executeQuery();
while (rs.next()) {
System.out.println(rs.getString(1));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 关闭所有的对象
public void close() {
try {
conn.close();
ps.close();
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
PreparedStatementDemo prepared = new PreparedStatementDemo();
prepared.insert("老子");
prepared.delete(1);
prepared.update(3, "孟子");
prepared.findById(2);
prepared.close();
}
}
结果为:
数据库结果为: