JDBC

 

 

 

 

 

 

 

 

 

        Connection conn=DriverManager.getConnection(url,user,password);  //上面那句写错了

 

 

 

 

 

 

 

 

 

 

 

 conn和stmt的声明要写在try的外面

 

第四步中的Sql查询语句怎么写?

 

 

 

 

 

 

 

import java.sql.*;

public class JDBCTest {
    public static void main(String[] args) {
        Statement stmt=null;
        Connection conn=null;
        ResultSet rs=null;
        try {
            //1.注册驱动
//            Driver driver=new com.mysql.cj.jdbc.Driver();     //注册驱动方式一
//            DriverManager.registerDriver(driver);
            Class.forName("com.mysql.cj.jdbc.Driver");          //注册驱动方式二
            //2.数据库连接
            String url="jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useSSL=false";
            String user="root";
            String pwd="1234";
            conn=DriverManager.getConnection(url,user,pwd);
            //3.获取数据库操作对象
            stmt=conn.createStatement();
            //4.执行sql语句
            String sql="select * from user";
            rs=stmt.executeQuery(sql);
            //5.对查询结果进行处理
            while(rs.next()){
                String username=rs.getString("username");
                String sex=rs.getString("sex");
                System.out.println(username+","+sex);
            }
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        } finally {
            //6.释放资源
            if(rs!=null){
                try {
                    rs.close();
                }
                catch (SQLException e){
                    e.printStackTrace();
                }
            }
            if(stmt!=null){
                try {
                    stmt.close();
                }
                catch (SQLException e){
                    e.printStackTrace();
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                }
                catch (SQLException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

 

使用配置文件来连接数据库,先创建一个db.properties配置文件,里面输入driver、user、pwd、url等信息

如图:

 

 

然后使用ResourceBundle读取配置文件中的信息

import java.sql.*;
import java.util.ResourceBundle;

public class JDBCTest {
    public static void main(String[] args) {
        ResourceBundle bundle=ResourceBundle.getBundle("resources/db");
        String driver=bundle.getString("driver");
        String url=bundle.getString("url");
        String user=bundle.getString("user");
        String pwd=bundle.getString("pwd");
        Statement stmt=null;
        Connection conn=null;
        ResultSet rs=null;
        try {
            //1.注册驱动
//            Driver driver=new com.mysql.cj.jdbc.Driver();     //注册驱动方式一
//            DriverManager.registerDriver(driver);
            Class.forName(driver);          //注册驱动方式二
            //2.数据库连接
//            String url="jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useSSL=false";
//            String user="root";
//            String pwd="1234";
            conn=DriverManager.getConnection(url,user,pwd);
            //3.获取数据库操作对象
            stmt=conn.createStatement();
            //4.执行sql语句
            String sql="select * from user";
            rs=stmt.executeQuery(sql);
            //5.对查询结果进行处理
            while(rs.next()){
                String username=rs.getString("username");
                String sex=rs.getString("sex");
                System.out.println(username+","+sex);
            }
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        } finally {
            //6.释放资源
            if(rs!=null){
                try {
                    rs.close();
                }
                catch (SQLException e){
                    e.printStackTrace();
                }
            }
            if(stmt!=null){
                try {
                    stmt.close();
                }
                catch (SQLException e){
                    e.printStackTrace();
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                }
                catch (SQLException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

 

 

 

////运用PreparedStatement解决sql注入问题
import java.sql.*;
import java.util.ResourceBundle;

public class JDBCTest {
    public static void main(String[] args) {
        ResourceBundle bundle=ResourceBundle.getBundle("resources/db");
        String driver=bundle.getString("driver");
        String url=bundle.getString("url");
        String user=bundle.getString("user");
        String pwd=bundle.getString("pwd");
        PreparedStatement stmt=null;
        Connection conn=null;
        ResultSet rs=null;
        try {
            //1.注册驱动
//            Driver driver=new com.mysql.cj.jdbc.Driver();     //注册驱动方式一
//            DriverManager.registerDriver(driver);
            Class.forName(driver);          //注册驱动方式二
            //2.数据库连接
//            String url="jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useSSL=false";
//            String user="root";
//            String pwd="1234";
            conn=DriverManager.getConnection(url,user,pwd);
            //3.获取数据库操作对象
            //?表示占位符,一个占位符只能接收一个值/数据
            String sql="select * from user where username=?";   //主义?不要加单引号
            stmt=conn.prepareStatement(sql); //此时会发送sql给DBMS,进行sql语句编译
            //给占位符?传值,JDBC中所有下标都是从1开始
            //怎么解决sql注入的?在往sql语句中传递参数 的时候,sql语句以及被编译过了
            stmt.setString(1,"小二王");    //第一个参数表示占位符的序号(从1开始),第二个是实参
            // 4.执行sql语句,此时执行的时候不需要传入sql语句了
            rs=stmt.executeQuery();
            //5.对查询结果进行处理
            while(rs.next()){
                String username=rs.getString("username");
                String sex=rs.getString("sex");
                System.out.println(username+","+sex);
            }
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        } finally {
            //6.释放资源
            if(rs!=null){
                try {
                    rs.close();
                }
                catch (SQLException e){
                    e.printStackTrace();
                }
            }
            if(stmt!=null){
                try {
                    stmt.close();
                }
                catch (SQLException e){
                    e.printStackTrace();
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                }
                catch (SQLException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

 

posted @ 2021-01-05 16:00  9761滴  阅读(68)  评论(0编辑  收藏  举报