使用PrepareStatement编写通用的增删改方法, 通用的查询方法(返回一条记录 或者返回多条记录)
public class TestPrepateStatement {
//解决Statement的sql注入问题
@Test
public void test3(){
Scanner s = new Scanner(System.in);
System.out.println("请输入user:");
String user = s.nextLine();
System.out.println("请输入password:");
String password = s.nextLine();
//select user name,password,balance from user_table where user = '' and password = ''
//select user name,password,balance from user_table where user = 'a' or '1' = ' and password = ' or '1' = '1'
String sql = "select user name,password,balance from user_table where user = ? and password = ?";
User u = testSelect(sql, User.class,user,password);
if(u != null){
System.out.println("登录成功");
}else{
System.out.println("登录失败");
}
}
//解决Statement拼串的问题。
@Test
public void testInsert1(){
Scanner s = new Scanner(System.in);
System.out.println("id:");
int id = s.nextInt();
System.out.println("name:");
String name = s.next();
System.out.println("email:");
String email = s.next();
System.out.println("birth");
String birth = s.next();
String sql = "intsert into customers(id, name, email, birth) values(?,?,?,?)";
update(sql,id,name,email,birth);
}
@Test
public void test1(){
String sql = "select id, name, email,birth from customers where id <?";
List<Customer> list = query(sql, Customer.class, 10);
for(Customer c : list){
System.out.println(c);
}
}
// 使用PreparedStatement实现通用的查询的方法(version 2.0)
public <T> List<T> query(String sql, Class<T> clazz, Object ... args){
Connection connection = null;
PreparedStatement p = null;
ResultSet rs = null;
try {
connection = JDBCUtils.getConnection();
p = connection.prepareStatement(sql);
for(int i =0; i<args.length; i++){
p.setObject(i+1, args[i]);
}
rs = p.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int count = rsmd.getColumnCount();
List<T> list = new ArrayList<T>();
while(rs.next()){
T t = clazz.newInstance();
for(int i=0; i<count; i++){
Object columnValue = rs.getObject(i+1);
String columnLble = rsmd.getColumnLabel(i+1);
PropertyUtils.setProperty(t, columnLble , columnValue);
}
list.add(t);
}
return list;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBCUtils.close(rs, p, connection);
}
return null;
}
@Test
public void test(){
String sql = "select id,name,email,birth from customers where id = ?";
Customer cust = testSelect(sql, Customer.class, 20);
System.out.println(cust);
}
// 使用PreparedStatement实现通用的查询的方法(version 2.0)
public <T> T testSelect(String sql, Class<T> clazz, Object ... args){
Connection connection = null;
PreparedStatement p = null;
ResultSet rs = null;
try {
connection = JDBCUtils.getConnection();
p = connection.prepareStatement(sql);
for(int i=0;i<args.length; i++){
p.setObject(i+1, args[i]);
}
rs = p.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int count = rsmd.getColumnCount();
while(rs.next()){
T t = clazz.newInstance();
for(int i=0; i<count; i++){
Object columnValue = rs.getObject(i + 1);
String columnLable = rsmd.getColumnLabel(i+1);
PropertyUtils.setProperty(t, columnLable, columnValue);
}
return t;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBCUtils.close(rs, p, connection);
}
return null;
}
@Test
public void tesUpdate(){
String sql = "delete from customers where id = ?";
update(sql,24);
}
// 使用PreparedStatement实现通用的增删改的方法(version 2.0)
public void update(String sql, Object ... args){
Connection connection = null;
PreparedStatement p = null;
try {
connection = JDBCUtils.getConnection();
p = connection.prepareStatement(sql);
for(int i=0; i<args.length; i++){
p.setObject(i+1, args[i]);
}
p.execute();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBCUtils.close(null, p, connection);
}
}
// 向数据表中插入一条数据
@Test
public void testInsert(){
Connection connection = null;
PreparedStatement p = null;
try {
// 1.获取数据库的连接
connection = JDBCUtils.getConnection();
// 2.编写一个带占位符的sql语句。 占位符:?
String sql = "insert into customers(id, name, email, birth) values(?,?,?,?)";
// 3.预编译sql语句,生成PreparedStatement的对象
p = connection.prepareStatement(sql);
// 4.填充占位符p.setObject(1, 9);
p.setObject(1, 9);
p.setObject(2, "张国荣");
p.setObject(3, "zgr@163.com");
p.setObject(4, "1899-09-09");
// 5.执行
p.execute();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBCUtils.close(null, p, connection);
}
}
}
相关推荐
首先,从创建时的区别开始,Statement 需要通过 Connection 对象的 createStatement() 方法创建,而 PreparedStatement 需要通过 Connection 对象的 prepareStatement() 方法创建,并且需要带有 SQL 语句。...
4. 执行SQL:调用`Statement`对象的方法执行SQL语句,如`executeQuery()`(用于查询)、`executeUpdate()`(用于增删改)。 5. 处理结果:如果执行的是查询语句,可以获取`ResultSet`对象来遍历查询结果。如果是增...
本资源主要涵盖了使用JDBC PrepareStatement进行MySQL数据库操作的各种场景,包括基本的查询、更新以及批量处理。 首先,我们来看一下JDBC连接MySQL的步骤。在Java程序中,我们需要导入相应的JDBC驱动,例如`...
创建PreparedStatement对象需要通过Connection接口的prepareStatement()方法,传入SQL语句作为参数。例如: ```java Connection conn = DriverManager.getConnection(url, username, password); ...
要创建一个 `PreparedStatement` 对象,首先需要通过 `Connection` 对象调用 `prepareStatement` 方法,并传入一个 SQL 语句字符串。例如: ```java // 假设 con 是已建立的 Connection 对象 String sql = "UPDATE ...
PreparedStatement pstmt = conn.prepareStatement(sql); // 设置参数值 for (int i = 0; i ; i++) { pstmt.setObject(i + 1, params[i]); } // 执行更新操作 result = pstmt.executeUpdate(); } else {...
对于"增删改"模板,它通常包含一系列方法,如`add()`用于添加记录,`delete()`用于删除记录,以及`update()`用于修改记录。这些方法内部封装了与数据库交互的逻辑,如SQL语句的构造和执行。 接下来,我们讨论如何...
在Java编程语言中,"增删改"是数据库操作的核心部分,主要涉及到如何通过Java连接并操作数据库,实现数据的插入、更新和删除。这里我们将深入探讨这些知识点,并结合实际应用进行详细说明。 首先,要进行数据库操作...
- **增加(Insert)**:首先,我们需要建立一个数据库连接,然后创建Statement或PreparedStatement对象,编写插入数据的SQL语句,最后调用executeUpdate()方法执行插入操作。例如: ```java Connection conn = ...
PreparedStatement ps = connection.prepareStatement(sql); ps.setInt(1, 10); ``` 在这个例子中,我们想知道实际执行的SQL语句是"SELECT * FROM table WHERE id = 10"。为了实现这个需求,我们可以自定义一个辅助...
本篇将详细讲解如何使用JDBC进行增删改(CRUD)操作,以一个具体的示例为背景,涉及数据库的创建、jar包导入、配置文件设置以及JDBC连接工具类的编写。 首先,我们需要创建一个名为`jdbc_test`的数据库,并在其中...
PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, teacher.getName()); pstmt.setInt(2, teacher.getAge()); pstmt.setString(3, teacher.getPosition()); pstmt.executeUpdate();...
在Java中,我们可以使用Statement或PreparedStatement的`executeQuery()`方法来执行SQL查询,然后通过ResultSet对象遍历查询结果。例如: ```java Statement stmt = conn.createStatement(); ResultSet rs = stmt....
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO ..."); pstmt.setString(1, value1); pstmt.setString(2, value2); pstmt.executeUpdate(); ``` 4. **处理结果**:执行后,检查是否成功,并...
**JSP实现增删改功能详解** 在Web开发中,JavaServer Pages(JSP)是一种常用的服务器端脚本语言,用于生成动态网页。本篇将深入探讨如何利用JSP技术来实现用户管理系统的增删改功能,同时结合SQL2000数据库进行...
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO Users (name, email) VALUES (?, ?)"); pstmt.setString(1, "John Doe"); pstmt.setString(2, "john.doe@example.com"); pstmt.executeUpdate(); ```...
使用`prepareStatement`方法设置SQL语句,然后将`UserInfo`对象中的属性值赋给预编译的SQL语句中的参数。最后,执行`executeUpdate`方法完成插入操作。如果执行成功,返回值为受影响的行数,通常为1。 #### 2. 修改...
在本文中,我们将深入探讨如何使用JSP进行数据库的增删改操作,这对于初学者来说是一块重要的基石。JSP(JavaServer Pages)是Java平台上的动态网页技术,它允许开发者将HTML代码与Java代码结合在一起,从而实现...
PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, username); pstmt.executeUpdate(); } catch (Exception e) { System.out.println(e.getMessage()); } } ``` 查询数据时,...
本教程将重点讲解如何使用Java程序实现数据库的增删改(CRUD)操作,并结合JSP和Servlet技术进行Web交互。Oracle作为广泛使用的数据库管理系统,是我们实现这些功能的理想选择。 首先,我们需要了解Java中的JDBC...