/* 01 连接池版本的 数据库 连接管理工具,适合于并发场合 */

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;
        }
    }

[02-02 ]Java数据库链接范列的更多相关文章

  1. Java JDBC 数据库链接小结随笔

    Java JDBC 数据库链接小结随笔 一.链接数据库的步骤 二.关于Statement  和  PrepareStatement 两者区别 用法 三.关于 ResultSet 的一些小结 四.自定义 ...

  2. [原创] 【2014.12.02更新网盘链接】基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装

    [原创] [2014.12.02更新网盘链接]基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装 joinlidong 发表于 2014-11-29 14:25:50 ...

  3. 【全网最全的博客美化系列教程】02.添加QQ交谈链接

    全网最全的博客美化系列教程相关文章目录 [全网最全的博客美化系列教程]01.添加Github项目链接 [全网最全的博客美化系列教程]02.添加QQ交谈链接 [全网最全的博客美化系列教程]03.给博客添 ...

  4. 关于在Java中链接SQLServer数据库中失败的原因分析

    首先声明:笔者是Java的初学者,并且一值是走在自学的道路上,长久以来只有“度娘”相伴.(加入了各种Java学习群,基本没有热心帮人解决问题的.可以理解-_-!!!)大神级的人物就不必看拙文了,没有什 ...

  5. Java JDBC链接Oracle数据库

    package com.test.test; import java.io.FileInputStream;import java.io.FileNotFoundException;import ja ...

  6. java jdbc 链接mysq 测试l 云服务器 和云数据库 mysql DB

    话不多说直接上效果图 下面给出参考代码: package com.humi.db; import java.sql.Connection; import java.sql.DriverManager; ...

  7. MySQL学习02(操作数据库)

    操作数据库 结构化查询语句分类 名称 解释 命令 DDL(数据库定义语言) 定义和管理数据对象,例如数据库和数据表 create.drop.alter DML(数据操作语言) 用于操作数据库对象中所包 ...

  8. Java数据库操作(MySQL与SQLserver)

    在java编程开发中,数据库的开发是重头戏. MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品: SQL Server是由Microsoft开发 ...

  9. EntityFramework 多数据库链接,MySql,SqlServer,Oracel等

    环境:EntityFramework5.0,MySql5.6,MSSQL2012 EF是强大的ORM工具,真正意义上的多数据库链接指的是不同类型的数据库,以及同种类型的数据库多个库,EF很好的支持这一 ...

随机推荐

  1. Notepad++崩溃后文件内容找不到问题

    也许是因为Ctrl + s 摁太多太频繁,一不小心Notepad++崩溃了 重启后发现原来的文件还在,但是文件内容全部都被清空了 我没有手动备份这个文件, 如何找回??? 点击设置,首选项,里面有个备 ...

  2. 第六章 接口,lamda表达式与内部类

    接口 接口可以包含常量, 且不需要publish static final修饰, 接口的域会自动添加该修饰符. Java建议不要写多余的代码,因此省略修饰符更简洁. 全部都是常量的接口背离了接口的初衷 ...

  3. CENTOS 7 安装 TINYPROXY 代理服务器

    https://www.cnblogs.com/new_2050/p/7658508.html

  4. elementui+vue修改elementUi默认样式不生效

    重写,覆盖都不行, ! important  也不行. 原因是 在style标签加了 scoped 的原因.

  5. Restful风格

    今天看到一个比较好的文章,记录一下: Restful风格API中用put还是post做新增操作有什么区别? 1 HTTP协议详解 HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层 ...

  6. vue-resource post请求后台接口报400(跨域问题解决方法)

    1.打开config/index.js,在proxyTable中添写如下代码 proxyTable: { '/api': { //使用"/api"来代替"http://f ...

  7. Python编码规范(PEP8)

    Introduction 介绍 本文提供的Python代码编码规范基于Python主要发行版本的标准库.Python的C语言实现的C代码规范请查看相应的PEP指南1. 这篇文档以及PEP 257(文档 ...

  8. SpringBoot图片上传(五) 上一篇的新版本,样式修改后的

    简单描述:一次上传N张图片(N可自定义):上传完后图片回显,鼠标放到已经上传的图片上后,显示删除,点击后可以删除图片,鼠标离开后,图片恢复. 效果:一次上传多个图片后的效果 上传成功: 鼠标悬浮到图片 ...

  9. SpringBoot系列三:SpringBoot自定义Starter

    在前面两章 SpringBoot入门 .SpringBoot自动配置原理 的学习后,我们对如何创建一个 SpringBoot 项目.SpringBoot 的运行原理以及自动配置等都有了一定的了解.如果 ...

  10. vs调试的时候,指定的参数已超出有效值的范围。参数名:sit ,先仔细看看错误和我的一样不一样

    https://www.cnblogs.com/pei123/p/7694947.html 指定的参数已超出有效值的范围.参数名:sit ,先仔细看看错误和我的一样不一样 更新了1709就这样了,的确 ...