package cn.tedu.jdbc.day02;
import java.io.InputStream;
import java.sql.Connection;
/*接口 Connection ,Connection 对象的数据库能够提供描述其表、所支持的 SQL 语法、存储过程、此连接功能等等的信息。此信息是使用 getMetaData 方法获得的。 */
import java.util.Properties;
public class DBUtilsDay02 {
private static String driver; private static String url; private static String username; private static String password; private static String initSize; private static String maxActive; private static BasicDataSource ds; //静态代码块 static{ ds = new BasicDataSource(); Properties cfg = new Properties(); try{ //db.properties 是src/main/resources 下文件 // 这里的代码书写是模式,就这样谢 InputStream inputStream = DBUtilsDay02.class.getClassLoader().getResourceAsStream("db.properties"); cfg.load(inputStream); //初始化参数 driver = cfg.getProperty("jdbc.driver"); url = cfg.getProperty("jdbc.url"); username = cfg.getProperty("jdbc.username"); password = cfg.getProperty("jdbc.password"); //initSize = Integer.parseInt(cfg.getProperty("initSize")); initSize = cfg.getProperty("initSize"); //maxActive = Integer.parseInt(cfg.getProperty("maxActive")); maxActive = cfg.getProperty("maxActive"); inputStream.close(); //初始化连接池 ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(username); ds.setPassword(password); ds.setInitialSize(initSize); ds.setMaxAxtive(maxActive); }catch(Exception e){e.printStackTrace(); //e.printStackTrace( )是打印异常栈信息
throw new RuntimeException(e) //throw new RuntimeException(e)是把异常包在一个运行时异常中抛出。
} } public static Connection getConnection(){ try{ //getConnection() 从连接池中获取重用的链接,如果连接池满了,则等待,如果有链接归还,则获取重用的链接; Connection conn = ds.getConnection(); return conn; }catch(Exception e){ e.printStackTrace(); throw new RuntimeException(e); } } public static void close(Connection conn){ if(conn!=null){ try{ //将用过的链接归还到链接池 conn.close(); }catch(Exception e){ e.printStackTrace(); } } }}
/* 02 演示预编译的SQL执行计划 */
package cn.tedu.jdbc.day02;
import java.sql.Connection;import java.sql.PreparedStatement;import javax.print.attribute.standard.PageRanges;import cd.tedu.jdbc.DbUtils;public class DemoDay04 {
public static void main(String[] args) { Connection conn = null; try { /*创建连接*/ conn = DBUtilsDay02.getConnection(); /*getConnection方法在连接池中没有连接可以使用时候,会阻塞等待*/ String sql="insert into robin_demo"+"(id,nema) values(?,?)";/* String sql = "UPDATE biaom "+"SET name= ?"+"WHERE id=?" */
/*将sql发送到数据库,创建执行计划*/
//返回值ps就代表执行计划 PreparedStatement ps = conn.prepareStatement(sql); //替换执行计划中的参数,2个参数,按照序号发送参数 ps.setInt(1,8); ps.setString(2,"sjkdo"); //执行“执行计划” int n = ps.executeUpdate(); System.out.println(n); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally { DBUtilsDay02.class(conn); }}
}
/* 03 使用执行计划执行更新语句 */
package cn.tedu.jdbc.day02;
import java.sql.Connection;
import java.sql.PreparedStatement;
public class DemoDay05 {
public static void main(String[] args) {
Connection conn = null; try { conn =DBUtilsDay02.getConnection(); String sql = "UPDATE biaom "+"SET name= ?"+"WHERE id=?"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, "laowang");// 这里德 1 指参数的位置,name ps.setInt(2, 100); int n = ps.executeUpdate(); System.out.println(n);} catch (Exception e) {
// TODO: handle exception e.printStackTrace(); }finally { DBUtilsDay02.class(); } }}
/* 04 利用ps实现查询功能 */
package cn.tedu.jdbc.day02;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class DemoDay06 {
public static void main(String[] args) {
Connection conn = null; try { conn = DBUtilsDay02.getConnection();/*getConnection方法在连接池中没有连接可以使用时候,会阻塞等待*/ /*执行sql*/ String sql="select *"+"from cust_info_alon"+"where name like ?"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, "%w%"); /*执行参数*/ ResultSet rs = ps.executeQuery();
while(rs.next()){ //getInt(可以放列的序号),利用序号获取值 int id=rs.getInt(1); String name=rs.getString(2); System.out.println(id+","+name); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally { DBUtilsDay02.class(); } } }
/* 05 sql注入演示* create table robin_user(* id number(6), name varchar2(100),pwd varchar2(100)* );* insert into robin_user(id,name,pwd) valuse(1,'tom','123');* */
package cn.tedu.jdbc.day02;
import java.sql.Statement;
import java.util.Scanner;
import java.sql.Connection;
import java.sql.ResultSet;
public class DemoDay07 {
public static void main(String[] args) {
//获取用户输入 Scanner in = new Scanner(System.in); //输入用户名 System.out.println("用户名"); String name = in.nextLine(); //输入密码 System.out.println("密码"); String pwd = in.nextLine(); //检查登录情况 boolean pass = login(name, pwd); if(pass){ System.out.println("欢迎你!"+name); }else{ System.out.println("用户密码出问题了!"); } } //检查用户是否能够登录 public static boolean login(String name,String pwd) { /* \' 代表一个单引号(撇号)字符 */ String sql="select count(*) as c"+"from cust_info_alon"+"where neam=\'"+name+"\'"+"and pwd=\'"+pwd+"\'"; System.out.println(sql); Connection conn = null; try { conn = DBUtilsDay02.getConnection(); Statement st =conn.createStatement(); ResultSet rs = st.executeQuery(sql); while(rs.next()){ int n = rs.getInt("n"); return n >=1; } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally { DBUtilsDay02.close(conn); } return false; } }