JDBC连接数据库的代码及笔记

JDBC连接数据库笔记

JDBC: java database conectivity的缩写

连接数据库的基本代码:

  public static final String URL = "jdbc:mysql://localhost:3306/数据库名";//数据库地址
   public static final String USER = "xxxx";//用户名
    public static final String PASSWORD = "123456";//密码

    public static void main(String[] args) throws Exception {
     
        //1.加载驱动程序
        Class.forName("com.mysql.jdbc.Driver");
        //2. 获得数据库连接
        Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
        //3.操作数据库,实现增删改查
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");
        //如果有数据,rs.next()返回true
        while(rs.next()){
     
            System.out.println(rs.getString("user_name")+" 年龄:"+rs.getInt("age"));
        }
        //关闭连接(后用先关原则)
        stmt.close();
        conn.close();
    }

加载驱动

加载驱动就是要将需要的类加载到内存中,有4种方式

  1. new 对象
  2. 加载子类(加载子类的同时,父类也加载进来了)
  3. 调用类中的静态成员
  4. 通过反射

使用new 对象的不足:

DriverManager.deregisterDriver(new Driver());//使用new 对象方式的代码
  1. 依赖性太强,属于编译期加载,如果编译期间该类不存在,则直接报编译错误;

  2. 导致Drive类创建了两遍,效率太低(要根据源码理解源码)

JDBC连接数据库的代码及笔记_第1张图片

一般采用反射的方式加载类

Class.forName("com.mysql.jdbc.Driver");

获取数据库连接

获取数据库连接的代码

Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);

getConnection方法有多种重载方法

  1. getConnection(URL)//直接填写完整的url地址,
    如jdbc:mysql://localhost:3306/database?user=username&password=password

  2. getConnection(URL,USER,PASSWORD)//分别填写数据库地址,用户名,密码

  3. 使用配置文件
    JDBC连接数据库的代码及笔记_第2张图片

执行增删改查

 //3.操作数据库,实现增删改查
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");
        //如果有数据,rs.next()返回true
        while(rs.next()){
     
            System.out.println(rs.getString("user_name")+" 年龄:"+rs.getInt("age"));
        }
  1. Resultset获得查询的结果集,rs.next()可以获取每一行的结果

    rs.getString(“列名(数据表中的字段名)”)、

    rs.getString(列数):如 rs.getString(1)表示获取该行的第一列的值

    除了getString,还有getInt、getDate、getObject。。。。。

  2. Statement 和 PrepareStatement

    1. 使用Statement:
    Statement stmt = conn.createStatement();
    String Sql = "select * from users where username="+username+"and password="+password;
     ResultSet rs = stmt.executeQuery(sql);
    
    1. 使用PrepareStatement
    	private static Connection conn = null;
    	private PreparedStatement pre =null;
    	private ResultSet rs = null;
    	public int login(User users){
           //登录操作
    		try{
           
    			conn = JDBCUtill.getConn();
                //编写sql语句
    			String sql = "select count(*) from hybigwork where username=? and password=?";
                //获取命令对象,并且预编译
    			pre = conn.prepareStatement(sql);
                //设置占位符的值
    			pre.setString(1, username);
    			pre.setString(2, password);
                //执行命令
    			rs = pre.executeQuery();
    			if(rs.next()){
           
    				return rs.getInt(1);
    			}
    		}catch(Exception e){
           
    			e.printStackTrace();
    		}
    

推荐使用PrepareStatement

理由:

  1. 不再使用 + 拼接sql语句,减少了语法错误,语义性强

  2. 将模版sql(固定的部分)与参数进行分离,提高维护性

  3. 有效地解决了sql注入问题(使用Statement会被输入的特殊字符影响,可能被恶意攻击)

  4. 效率高,减少了编译次数(因为有预编译,可以重复使用)

你可能感兴趣的:(数据学习笔记,数据库,jdbc,mysql,sql,java)