JDBC:mysql 增删改查+使用PreparedStatement+execute与executeUpdate的区别

目录

1.增、删、改

2.查询

3.使用PreparedStatement

4.execute与executeUpdate的区别

4.1相同点

4.2不同点:


1.增、删、改

CRUD是最常见的数据库操作,即增删改查
C 增加(Create)
R 读取查询(Retrieve)
U 更新(Update)
D 删除(Delete)

在JDBC中增加,删除,修改的操作都很类似,只是传递不同的SQL语句就行了。

但是查询就不一样。

String sql = "insert into hero values(null," + "'提莫'" + "," + 313.0f + "," + 50 + ")";

基本都是这句话。

但是sql的具体内容不一样。

String sql = "delete from hero where id = 5";
String sql = "update hero set name = 'name 5' where id = 3";

之后执行:

s.execute(sql);

完整代码:

package jdbc;
   
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
   
public class TestJDBC {
    public static void main(String[] args) {
   
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
   
        try (
            Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8",
                "root", "admin");
            Statement s = c.createStatement();             
        )
        {
            String sql = "insert into hero values(null," + "'提莫'" + "," + 313.0f + "," + 50 + ")";
            s.execute(sql);
               
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

2.查询

executeQuery 执行SQL查询语句

注意: 在取第二列的数据的时候,用的是rs.get(2) ,而不是get(1). 这个是整个Java自带的api里唯二的地方,即2就代表第二个。

要是查询第三列,就get(3) .  但是类型要一致。

String sql="select * from hero limit "+start+","+count;
            	ResultSet rs=s.executeQuery(sql);
            	while(rs.next())
            	{
            		int id=rs.getInt("id");
            		String name=rs.getString(2);
            		float hp=rs.getFloat(3);
            		int damage=rs.getInt(4);
            		System.out.printf("%d\t%s\t%f\t%d\n",id,name,hp,damage);
            	}

3.使用PreparedStatement

 

和 Statement一样,PreparedStatement也是用来执行sql语句的
与创建Statement不同的是,需要根据sql语句创建PreparedStatement
除此之外,还能够通过设置参数,指定相应的值

注: 这是JAVA里唯二的基1的地方。

所以,不能从0开始。

PreparedStatement有预编译机制,性能比Statement更快

PreparedStatement的优点3-防止SQL注入式攻击

而PreparedStatement使用的是参数设置,就不会有SQL注入式攻击

String name = "'盖伦' OR 1=1";
// 使用预编译Statement就可以杜绝SQL注入
  
            ps.setString(1, name);
  
            ResultSet rs = ps.executeQuery();
            // 查不出数据出来
            while (rs.next()) {
                String heroName = rs.getString("name");
                System.out.println(heroName);
            }

4.execute与executeUpdate的区别

4.1相同点

execute与executeUpdate的相同点:都可以执行增加,删除,修改

4.2不同点:

不同1:
execute可以执行查询语句
然后通过getResultSet,把结果集取出来
executeUpdate不能执行查询语句
不同2:
execute返回boolean类型,true表示执行的是查询语句,false表示执行的是insert,delete,update等等
executeUpdate返回的是int,表示有多少条数据受到了影响

package jdbc_test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class jdbcteset {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	    
		 try {
             Class.forName("com.mysql.jdbc.Driver");
         } catch (ClassNotFoundException e) {
             e.printStackTrace();
         }
		 String sql="insert into hero values(null,?,?,?)";
		 try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/sqltest?characterEncoding=UTF-8","root", "123456");
		            // 根据sql语句创建PreparedStatement
				 
		 PreparedStatement s = c.prepareStatement(sql);)
		 {
			// 不同1:execute可以执行查询语句
	            // 然后通过getResultSet,把结果集取出来
	            String sqlSelect = "select * from hero";
	  
	            s.execute(sqlSelect);
	            ResultSet rs = s.getResultSet();
	            while (rs.next()) {
	                System.out.println(rs.getInt("id"));
	            }
	  
	            // executeUpdate不能执行查询语句
	            // s.executeUpdate(sqlSelect);
	  
	            // 不同2:
	            // execute返回boolean类型,true表示执行的是查询语句,false表示执行的是insert,delete,update等等
	            boolean isSelect = s.execute(sqlSelect);
	            System.out.println(isSelect);
	  
	            // executeUpdate返回的是int,表示有多少条数据受到了影响
	            String sqlUpdate = "update Hero set hp = 300 where id < 100";
	            int number = s.executeUpdate(sqlUpdate);
	            System.out.println(number);
	            
	   
	        } catch ( SQLException e) {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
	        } 
	}
}

发布了374 篇原创文章 · 获赞 101 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/qq_41325698/article/details/103278721