JDBC API知识总结

什么是JDBC?

Java Database Connectivity:Java和数据库的连接技术,sun公司推出的一套java用于数据库操作的接口API。JDBC可以访问各种不同的数据库,如:Mysql、Oracle、SQLServer、DB2等,开发者只需面对这套接口编程即可,不同数据库厂商需针对这套接口提供不同实现。不同的实现集合即为不同数据库的驱动。

 

JDBC程序编写步骤

注册驱动

获取连接

执行增删改查

释放资源

以MySQL为例:

准备工作:首先配置MySQL驱动,驱动程序由数据库提供商提供下载。MySQL驱动下载地址为:http://dev.mysql.com/downloads/。

     将下载好的驱动mysql-connector-java-5.1.36-bin.jar拷贝到当前项目的lib文件中,如图。

                 

       然后将该文件添加到项目的类路径下:File-Project Structure- Modules。

 

        然后在当前工程的lib文件中选中mysql驱动文件

        然后点击Apply应用即可。

一、驱动加载:驱动加载有两种方式,方式一为通过new方式进行驱动加载,方式二为通过反射加载。

                         方式一:DriverManager.registerDriver(new Driver()); 可是在底层文件中可以看出,在new对象的过程中还会new一次对象,会使得创建的对象冗余。且这种方式加载的类是编译时类,若编译时该                                       类不存在,会出现错误。因此这种方式我们不常用。

 

                         方式二:通过反射加载类。Class.forName("com.mysql.jbc.Driver");这种方式加载的是运行时类,降低了类的依赖性,效率高。

二、驱动连接:可以通过DriverManager类建立到数据库的连接Connection:

       DriverManager.getConnection(String url);

                         DriverManager.getConnection(String url,String user,String password);

                         DriverManager.getConnection(String url,Properties info)

                         其中:Properties info通常至少应该包括“user"和”password"属性

                                     JDBC URL用于标识一个被注册的驱动程序,驱动程序管理器通过这个url选择正确的驱动程序,从而建立到数据库的连接。通常URL包括三个部分,各部门间用冒号分隔。

                                     协议(JDBC URL的协议总是jdbc):子协议(用于标识一个数据库的驱动程序):子名称(标识数据库的方法)

 

                         url="jdbc:mysql://localhost:3306/test(数据库名)                             

                         DriverManager.getConnection(url);

                         DriverManager.getConnection(url,root,****);

                         DriverManager.getConnection(info.getProperties("url"),info.getProperties("user"),info.getProperties("password"));//一般选择此种方式

三、操作或访问数据库:数据库连接用于向数据库服务器发送命令和SQL语句,并接受数据库服务器返回的结果。其实数据库连接就是一个Socket连接。

                         Connection连接对象接口:createStatement():生成命令对象    preparedStatement():生成预编译命令对象(常用,这种sql语句可通过设置占位符以避免执行SQL语句时乱码)

                          Statement命令对象接口:executeUpdate(sql):执行增删改语句,返回受影响的行数

                                                                    executeQuery(sql):执行查询语句,返回结果集

                                                                    execute(sql):执行查询语句,返回boolean

                          Connection连接对象接口:createStatement():生成命令对象    preparedStatement():生成预编译命令对象(常用,这种sql语句可通过设置占位符以避免执行SQL语句时乱码)

                          PreparedStatement命令对象接口:executeUpdate(sql):执行增删改语句,返回受影响的行数

                                                                    executeQuery(sql):执行查询语句,返回结果集

                                                                    execute(sql):执行查询语句,返回boolean

                   setXX(占位符索引,占位符的值):设置对应索引的占位符的值,类型为XX类型

                           ResultSet结果集对象接口:next():下移一行,返回当前行是否有值

                                                                        previous():上移一行,返回当前行是走有值

                                                                        getXX(列索引||列明|别名):返回对应列的值,返回类型为XX

四、关闭连接:connection.close();set.close();driver.close();

 

PreparedStatement与Statement的区别:

Statement的sql拼接是个难题;PreparedStatement可防止SQL注入,可处理Blob类型数据,可最大可能提高性能。

——————————————————————————————————————————————————————————————————————————

//加载驱动
DriverManager.registerDriver(new Driver());//一般不用这种
Class.forName(driver);//通过配置文件获取driver=com.mysql.jdbc.Driver
//获取连接
Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/girls","root","1014");
Connection connection = DriverManager.getConnection(url, user, password);//通过配置文件获取三者信息
//执行操作
//String sql="DELETE from beauty where id=9";
//String sql="UPDATE beauty set name='穷查查' WHERE id=7" ;
String sql="select count(*) from admin where username=? and password=?";//编写SQL语句:?表示占位符
preparedStatement.setString(1,username);
preparedStatement.setString(2,pas);
PreparedStatement preparedStatement = connection.prepareStatement(sql);//获取执行SQL语句的命令对象
ResultSet set = preparedStatement.executeQuery();//返回结果集
//关闭连接
set.close();
statement.close();
connection.close();

———————————————————————————————————————————————————————————————————————————

 

 

 

 

 

 

 

 

                          

              

 

 

 


 

 

 

      

 

posted @ 2021-12-17 16:46  ganrui~~~  阅读(150)  评论(0)    收藏  举报