Java数据库的连接JDBC

1、JDBC

开发步骤
(1)注册驱动.
告知JVM使用的是哪一个数据库的驱动
(2)获得连接.
使用JDBC中的类,完成对MySQL数据库的连接
(3)获得语句执行平台
通过连接对象获取对SQL语句的执行者对象
(4)执行sql语句
使用执行者对象,向数据库执行SQL语句
获取到数据库的执行后的结果
(5)处理结果
(6)释放资源.(先开的后关)
调用一堆close()方法

package com.oracle.demo01;

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


public class demo01 {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.注册驱动.
        //告知JVM使用的是哪一个数据库的驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.获得连接.
        //使用JDBC中的类,完成对MySQL数据库的连接
        Connection  conn = DriverManager.getConnection
                ("jdbc:mysql://localhost:3306/ceshi?characterEncoding=utf-8","root","123");
        //3.获得语句执行平台
        //通过连接对象获取对SQL语句的执行者对象
        Statement sta = conn.createStatement();
        //4.执行sql语句
        //使用执行者对象,向数据库执行SQL语句
        //获取到数据库的执行后的结果
        String sql = "insert into sort(sname) values ('护手霜')";
        int row = sta.executeUpdate(sql);
        System.out.println(row);
        //5.处理结果
        //6.释放资源(先开的后关)
        //调用一堆close()方法
        sta.close();
        conn.close();
    }

}

再举一个例子:

package com.oracle.difficult;
//插入数据
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class demo01 {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1、注册驱动、告知JVM使用的是哪一个数据库的驱动
        //异常ClassNotFoundException
        Class.forName("com.mysql.jdbc.Driver");
        //2、获得连接
        //导包
        String  url = "jdbc:mysql://localhost:3306/ceshi?characterEncoding=gbk";//这里ceshi是数据库
        String root = "root";
        String password = "123";
        //异常SQLException
        //DriverManager:管理一组 JDBC 驱动程序的基本服务
        //Connection:与特定数据库的连接
        Connection  con = DriverManager.getConnection(url,root,password);
        //3.获得语句执行平台
        //创建一个 Statement 对象来将 SQL 语句发送到数据库
        Statement sta = con.createStatement();
        //4、执行sql语句
        //使用执行者对象 /Statement 对象/ ,向数据库执行SQL语句
        //写SQL语句;
        String sql = "insert into ceshi1(id,sname) values (10,'剑魂')";
        //int executeUpdate(String sql)
        //执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,
        //或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)如:CREATE TABLE和DROP TABLE等。
        int row = sta.executeUpdate(sql);
        System.out.println(row);
        //5、处理结果
        //执行insert、update、delete无需处理
        //6、释放资源(先开的后关,后开的先关)
        //调用一堆close()方法
        sta.close();
        con.close();
    }

}
 

需要处理结果集:

package com.oracle.difficult;

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

public class demo03 {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1、注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2、获得连接
        String url = "jdbc:mysql://localhost:3306/ceshi?characterEncoding=gbk";
        String root = "root";
        String  password = "123";
        Connection  con =  DriverManager.getConnection(url, root, password);
        //3、获得语句执行平台
        Statement  sta  =  con.createStatement();
        //4、执行sql语句
        String sql = "select * from ceshi1 where sname = '狂战士'";
        //需要导包   import java.sql.ResultSet;
        ResultSet rs = sta.executeQuery(sql);
        //5、处理结果
        while(rs.next()){
            System.out.println(rs.getString("id")+".."+rs.getString("sname"));
        }
        //6、释放资源
        rs.close();
        sta.close();
        con.close();
    }

}

 

2、数据库的连接
(1)select 查询操作:
执行语句:ResultSet executeQuery(sql);
处理结果集:rs.next();rs.getXxx();
释放资源:ResultSet.close();
(2)预处理对象 PreparedStatement:解决SQL注入问题
sql语句:? 占位符;
获得执行对象:prepareStatement(sql);
执行语句:setXxx(int, Obj);executeQuery();
释放资源:PreparedStatement.close();

举个例子:

package com.oracle.difficult;

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

public class demo04 {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1、注册驱动
                Class.forName("com.mysql.jdbc.Driver");
                //2、获得连接
                String url = "jdbc:mysql://localhost:3306/ceshi?characterEncoding=gbk";
                String root = "root";
                String  password = "123";
                Connection  con =  DriverManager.getConnection(url, root, password);
                
                //3、获得语句执行平台
                Statement  sta  =  con.createStatement();
                //4、执行sql语句
                Scanner  sc = new Scanner(System.in);
                System.out.println("请输入用户名:");
                String  user = sc.next();
                System.out.println("请输入密码:");
                String   pass = sc.next();
                String sql = "select count(*) from user where uname = '"+user+"' "+"and pwd = '"+pass+"'";
                //需要导包   import java.sql.ResultSet;
                ResultSet rs = sta.executeQuery(sql);
                /*//3、获得语句执行平台(预处理对象,解决SQL注入问题)
                String  sql = "select count(*) from ceshi1 where id = ? and sname = ?";
                PreparedStatement past = con.prepareStatement(sql);
                //4、执行SQL语句
                Scanner  sc = new Scanner(System.in);
                System.out.println("请输入用户名:");
                int  user = sc.nextInt();
                System.out.println("请输入密码:");
                String   pass = sc.next();
                past.setInt(1, user);
                past.setString(2, pass);
                ResultSet  rs = past.executeQuery();*/
                //5、处理结果集
                int count = 0;
                while(rs.next()){
                    count = rs.getInt(1);
                }
                if(count > 0){
                    System.out.println("登录成功!!");
                }else{
                    System.out.println("登录失败");
                }
                //6、释放资源
                rs.close();
                sta.close();
                con.close();

    }

}

SQL语句注入问题:

(3)JDBCUtils工具类:
将注册驱动、获得连接和释放资源(方法重载)封装起来;

package com.oracle.tools;

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

public class JDBCUtils {

    public static  Connection get() {
                //1、注册驱动
                try {
                    Class.forName("com.mysql.jdbc.Driver");
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
                //2、获得连接
                String url = "jdbc:mysql://localhost:3306/ceshi?characterEncoding=gbk";
                String root = "root";
                String pwd = "123";
                Connection conn = null;
                try {
                     conn = DriverManager.getConnection(url,root,pwd);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                return conn;
       }
        public static void  close(Connection conn,PreparedStatement pst){
            if(pst != null){
                try {
                    pst.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        public static void  close(Connection conn,PreparedStatement pst,ResultSet rs){
            if(rs != null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(pst != null){
                try {
                    pst.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
}

 

posted @ 2018-10-29 16:28  元气满满01  阅读(205)  评论(0编辑  收藏  举报