package cn.zhouzhou; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import com.mysql.jdbc.PreparedStatement; /*一、接口的概念和想相关静态方法?--------建议自己去查手册! * * 1.connection? * 接口 * 与特定数据库的连接(会话)。 执行SQL语句并在连接的上下文中返回结果。 该信息是用getMetaData方法获得的。 *2. Driver? * 每个驱动程序类必须实现的接口。 * 每个驱动程序都应该提供一个实现Driver接口的类。 * *5.DriverManager? * 用于管理一组JDBC驱动程序的基本服务。 * DriverManager将尝试加载尽可能多的驱动程序,然后对于任何给定的连接请求,它会依次要求每个驱动程序尝试连接到目标URL。 3. Connection? * 与特定数据库的连接(会话)。 执行SQL语句并在连接的上下文中返回结果。 * 4.getConnection? * 尝试建立与给定数据库URL的连接。DriverManager的静态方法 返回值类型 Connection * *6.Statement? * 创建一个 Statement对象,将产生 ResultSet对象具有给定类型,并发性和可保存性。 * 返回值类型是statement; * execute方法查找名称与 methodName属性相同的方法,并调用目标方法。 * *7.ResultSet? * 表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。 * ResultSet对象保持一个光标指向其当前的数据行。 * getInt? * 将此 ResultSet对象的当前行中指定列的值作为Java编程语言中的 Array对象检索。 * *8.设置SQL语句的执行平台? * Connection con= DriverManager.getConnection(url,use,password) * Statement star=con.createStatemtn(); * *9.对数据库的操作? * 1.int ------------->适用于 增删改! insert update delete * int i= star.executeUpdate(""); * * 2.String -------------用于SQL查询语句 select * String s=""; * ResultSet rs= star.excuteQuery(s); 执行SQL中的select查询 * while(rs.next()){----------------------->处理结果集,并获取每列数据。 * System.out.println(rs.getInt("id")+""+rs.getString("name")+" "+rs.getDouble("price")); *} *10.结束资源? * * *二、SQL注入攻击简单的案 * 换个接口,解决风险!preparestatement * 使用Statement接口 容易容易被注入攻击。 * Statement接口实现类,作用执行SQL语句,返回结果集 * 有一个子接口PreparedStatement (SQL预编译存储,多次高效的执行SQL) * * 记着!使用PrepareStatement接口 * 方法? * PreparedStatement xx=con.prepareStatement(String sql) * * * */ public class JdbcDmo { public static void main(String[] args) throws Exception { // run(); //数据库的注册、连接、设置语句执行平台、执行SQL语句、处理结果、结束资源。 show(); } private static void show() throws Exception { Class.forName("com.mysql.jdbc.Driver"); String url="jdbc:mysql://localhost:3306/qy66"; String use="root"; String password="root"; Connection con01=DriverManager.getConnection(url, use, password); // Statement star01=con01.createStatement(); 之前的statement接口 String s="select * from shop"; java.sql.PreparedStatement star01=con01.prepareStatement(s); //换个接口preparestatement ResultSet rs=star01.executeQuery(s); while (rs.next()) { System.out.println(rs.getInt(1)+" "+rs.getString(2)); } rs.close(); star01.close(); con01.close(); } private static void run() throws Exception{ Class.forName("com.mysql.jdbc.Driver"); //1.注册 5.0版本后可以省略不写 String url="jdbc:mysql://localhost:3306/qy66"; //定义各自的 连接地址 用户名 密码 String use="root"; String password="root"; Connection con=DriverManager.getConnection(url, use, password); //2.连接数据库 System.out.println(con); //3.打印的是地址! Statement a1=con.createStatement(); System.out.println(a1); //获得语句执行平台 String a3="select * from shop"; //执行SQL中的select查询 【注意String】查询sql语句 ResultSet rs= a1.executeQuery(a3); //while 可以获取数据库表格中的每一列数据! while (rs.next()) { System.out.println(rs.getInt("id")+""+rs.getString("name")+" "+rs.getDouble("price")); } // insert update delete int a2=a1.executeUpdate("insert into shop(id,name,price)values (101,'003',5000)");//执行sql语句 int 适用于增删改 System.out.println(a2); con.close(); a1.close(); rs.close(); } }