JDBC编程基础

JDBC编程基础

什么是JDBC编程?
JDBC全称叫Java数据库连接(Java Database Connectivity),是一种利用Java API(Java抽象接口)进而执行数据库SQL语句的一种数据库连接规范。
什么是Java API?
它是java.sql.*或者javax.sql.*中一些抽象类和接口组成,它为关系型数据库的操作提供了统一规范。
什么是数据库驱动包?
不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提供了Java的驱动“mysql-connector-java”,需要基于Java操作MySQL即需要该驱动包。同样的,要基于Java操作Oracle数据库则需要Oracle的数据库驱动包。
JDBC的工作原理
导入数据库驱动包(每种数据库对每种语言都有专门的数据库驱动包)——>加载驱动程序(使Java确定操作对象)——>建立与客户端的连接——>执行SQL语句。
具体过程如下:
(导包):在项目的src同级目录下建立一个名为lib的文件,并将依赖包mysql-connector-java-5.1.47.jar制到lib中。再配置该jar包到本项目的依赖中:右键点击项目Open Module Settings,在Modules中,点击项目,配置Dependencies,点击+,JARS or Directories,将该lib文件夹配置进依赖中,表示该文件夹下的jar包都引入作为依赖。
(加载驱动程序):

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

(建立与客户端的连接):

 String url="jdbc:mysql://127.0.0.1:3306/mydatabase?useSSL=false";//定位数据库所在的客户端的表
 String name="***";//用户名(自己的数据库账户名)
 String password="*****";//密码 (自己数据库的密码)
Connection connection=DriverManager.getConnection(url,name,password);//建立连接

在url中127.0.0.1代表本地主机IP地址,3306代表当前sql服务器的进程号。
(执行sql语句):

 String sql="select * from user";//容易出现sql注入
        Statement statement=connection.createStatement();
        ResultSet resultset=statement.executeQuery(sql);
        while(resultset.next()){
    
    //resultset此时指向数据行的上一行,它会自行进行判断,如果下一行
        //没有数据返回false否则返回true
            System.out.print("id="+resultset.getInt(1)+" ");
            System.out.print("acount="+resultset.getString(2)+" ");
            System.out.println("amount="+resultset.getInt(3));
            //上面三行是指我访问表中一行的对应字段值
        }

以上只是以执行查询作为例子进行执行的,并且是有对应优化的,如下:

 String url="jdbc:mysql://127.0.0.1:3306/mydatabase?useSSL=false";//定位数据库所在的客户端
        String name="***";//用户名
        String password="******";//密码
        DataSource dataSource=new MysqlDataSource();//获取连接(DataSourse具有数据库连接池)
        /*数据源*/
        ((MysqlDataSource)dataSource).setUrl(url);
        ((MysqlDataSource)dataSource).setUser(name);
        ((MysqlDataSource)dataSource).setPassword(password);
        
        Connection connection=dataSource.getConnection();
        /*
         * 执行sql语句
         * */
        String sql="select * from user where id=? or id=?";//进一步解决sql注入,其中?为占位符,编译时会进行变量替换
        PreparedStatement statement=connection.prepareStatement(sql);//直接执行,不用Statement对象
        statement.setInt(1,1);//第一个参数是字段号,第二个参数是数据值
        statement.setInt(2,250);
        ResultSet resultset=statement.executeQuery();//对sql语句进行优化,减少sql注入的可能
        while(resultset.next()){
    
    
            System.out.print("id="+resultset.getInt(1)+" ");
            System.out.print("acount="+resultset.getString(2)+" ");
            System.out.println("amount="+resultset.getInt(3));
        }
        resultset.close();//这些都是资源用完一定要关闭
        statement.close();//这些都是资源用完一定要关闭
        connection.close();//这些都是资源用完一定要关闭

那有人就问了,飞哥,为什么没有驱动加载这一步呢,因为在DataSourse中已经封装好了。

猜你喜欢

转载自blog.csdn.net/qq_45841205/article/details/115165704