快速学会JDBC及获取连接的五种方式

Posted 叁 柒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速学会JDBC及获取连接的五种方式相关的知识,希望对你有一定的参考价值。

快速学会JDBC及获取连接的五种方式

1. JDBC基本介绍

  1. JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题
  2. Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,完成对数据库的各种操作。
  3. JDBC基本原理图

2. JDBC快速入门

2.1 JDBC程序编写步骤

  1. 注册驱动-加载Driver类
  2. 获取连接-得到Connection
  3. 执行增删改查-发送SQL给mysql执行
  4. 释放资源-关闭相关连接

2.2 案例演示

2.2.1 前置工作,在数据库中建立对应表
CREATE TABLE `actor`(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(32) NOT NULL DEFAULT '',
sex CHAR(1) NOT NULL DEFAULT '女',
borndate DATETIME,
phone VARCHAR(12));
2.2.2 前置工作,导入MySQL数据库的对应jar包

在项目下新建一个文件夹如libs,将对应jar包拷入,并将其加入library中

public static void main(String[] args) throws SQLException 
        //注册驱动
        Driver driver = new Driver();
        String url="jdbc:mysql://localhost:3306/zxy_db01";
        String user="root";
        String psd = "123";
        DriverManager.registerDriver(driver);
        //获得连接
        Connection connection = DriverManager.getConnection(url,user,psd);
        //执行SQL语句
        String sql = "insert into actor values(null, '刘德华', '男', '1970-11-11', '110')";
        //statement 用于执行静态 SQL 语句并返回其生成的结果的对象
        Statement statement = (Statement) connection.createStatement();
        int rows = statement.executeUpdate(sql);
        System.out.println(rows > 0 ? "成功" : "失败");
        //关闭资源
        statement.close();
        connection.close();
    

然后我们再去查询数据库,就会发现已经成功啦

3. 相关类的介绍

3.1 Statement

相信对于上面的代码中你最好奇的就是Statement这个类,我们就来聊一聊这个。

基本介绍:

  1. 用于执行静态Sql语句并返回其生成结果

  2. 在连接建立后,需要对数据库进行访问,执行命名或是SQL语句,可以通过Statement(存在SQL注入问题)PrepardStatement(预处理) CallableStatement(存储过程)

  3. Statement对象执行SQL语句,存在SQL注入风险

  4. SQL注入是利用某些系统没有对用户输入对数据进行充分对检查,而在用户输入数据中注入非法对SQL语句段或命令,恶意攻击数据库

  5. 要防范SQL注入,只要用PreparedStatement(从Statement扩展而来),取代Statement就可以了

其实归根究底,这个类就是一个用来调用执行SQL语句的类。

3.2 ResultSet[结果集]

这个是执行查询的SQL时返回的对象,如下面这段代码

String sql = "select id, name , sex, borndate from actor";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next())  // 让光标向后移动,如果没有更多行,则返回 false
    int id = resultSet.getInt(1); //获取该行的第 1 列 
    String name = resultSet.getString(2);//获取该行的第 2 列 
    String sex = resultSet.getString(3); 
    Date date = resultSet.getDate(4); 
    System.out.println(id + "\\t" + name + "\\t" + sex + "\\t" + date);

  1. 表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

  2. ResultSet对象保持一个光标指向其当前的数据行。 最初,光标位于第一行之前。 next方法将光标移动到下一行,并且由于在ResultSet对象中没有更多行时返回false ,因此可在while循环中使用循环来遍历结果集。

3.3 PreparedStatement

这个类其实和上面介绍的Statement效果类似,相当于Statement的改进版,增加了预处理过程避免了sql注入现象(简单来讲就是破获你的数据库中的信息),下面我们就来聊聊它

  1. PreparedStatement执行的SQL语句中的参数用问号(?)来表示,调用PreparedStatement对象额setXxx()方法来设置这些参数,setXxx()方法有两个参数,第一个参数是要设置的SQL语句中的参数的索引(从1开始),第二个是设置的SQL语句中的参数的值。
  2. 调用executeQuery(),返回ResultSet对象
  3. 调用 executeUpdate(),执行增删改等操作。

其优点也是极其明显的

  1. 不再使用+拼接SQL语句,减少语法错误
  2. 有效的解决了SQL注入问题
  3. 大大减少了编译次数,效率提高

话不多说,我们直接上案例

String sql = "select name , pwd from admin where name =? and pwd = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "刘德华"); 
preparedStatement.setString(2, "123");
ResultSet resultSet = preparedStatement.executeQuery(sql);
if (resultSet.next())  //如果查询到一条记录,则说明该管理存在 
    System.out.println("恭喜, 登录成功");  
else 
    System.out.println("对不起,登录失败"); 
     

4. 关闭资源

在JDBC编码过程中,我们创建了resultSet,statement,connection等资源,这些资源在使用完毕后一定要进行关闭资源,关闭的过程中遵循从里到外的原则,因为在增删改查中的操作中都要用到这样的关闭操作

resultSet.close();
statement.close();
connection.close();

5. 获取数据库连接的五种方式

方式一

直接通过Driver类获得连接

 public void way1() throws SQLException 
        Driver driver = new Driver();
        String url = "jdbc:mysql://localhost:3306/zxy_db01";
        Properties info = new Properties();
        info.setProperty("user","root");
        info.setProperty("psd","123");
        Connection connect = driver.connect(url, info);
        System.out.println(connect);
    
方式二

通过反射的方式加载Driver类获得连接

 public void way2() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException 
        Class<?> clzz = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver) clzz.newInstance();
        String url = "jdbc:mysql://localhost:3306/zxy_db01";
        Properties info = new Properties();
        info.setProperty("user","root");
        info.setProperty("psd","123");
        Connection connect = driver.connect(url, info);
        System.out.println(connect);
    
方式三

使用DriverManager替换Driver获得连接

 public void way3() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException 
        Class<?> clzz = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver) clzz.newInstance();
        String url="jdbc:mysql://localhost:3306/zxy_db01";
        String user="root";
        String psw = "123";
        DriverManager.registerDriver(driver);
        Connection connection = DriverManager.getConnection(url,user,password);
        System.out.println(connection);
    
方式四

使用Class.forName自动完成驱动注册获得链接

public void way4() throws SQLException, ClassNotFoundException 
        Class.forName("com.mysql.jdbc.Driver");
        String url="jdbc:mysql://localhost:3306/zxy_db01";
        String user="root";
        String psd = "123";
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);
    
方式五

借助配置文件获得来获得连接

user=root
psd=123
url=jdbc:mysql://localhost:3306/zxy_db01
driver=com.mysql.jdbc.Driver
 public void way5() throws SQLException, ClassNotFoundException, IOException 
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\\\\mysql.properties"));
        String user = properties.getProperty("user");
        String password = properties.getProperty("psd");
        String url = properties.getProperty("url");
        String driver = properties.getProperty("driver");
        Class.forName(driver);
        Connection connection = DriverManager.getConnection(url, user, psd);
        System.out.println(connection);
    

相信看完本篇你对jdbc已经有了不错的了解了,谢谢观看。

[简约webAPI]php连接MSsql server的五种方法总结

参考了下php官方手册总结了五种PHP连接MSsql server的方法,mssql_系列函数,sqlsrv_系列函数,odbc方式连接sqlserver,PDO方式连接sqlserver,COM方式连接

 

参考php手册,对php连接sql server系列做出个小结。主要有五种方式:

一、通过mssql_系列函数

mssql_系列函数主要针对php5.3以下的版本和sqlserver2000及以上版本使用。

在php.ini中将;extension=php_mssql.dll;extension=php_msql.dll;extension=php_pdo_mssql.dll ;extension=php_pdo_odbc.dll 前面的分号去掉。

<?php
 $server ="localhost"; //服务器IP地址,如果是本地,可以写成localhost
 $uid ="sa"; //用户名
 $pwd ="123456"; //密码
 $database ="jb51net"; //数据库名称
  
////进行数据库连接
 $conn =mssql_connect($server,$uid,$pwd) or die ("connect failed");
 mssql_select_db($database,$conn);
  
////执行查询语句
 $query ="select * from A_PHP";
 $row =mssql_query($query);
  
////打印输出查询结果
 while($list=mssql_fetch_array($row))
 {
    print_r($list);
    echo "<br>";
 }
?>

二、通过sqlsrv_系列函数

sqlsrv_系列函数主要针对php5.3以上的版本和sql server 2005以上版本使用。

需要下载安装Microsoft Drivers for PHP for SQL Server驱动,地址:https://msdn.microsoft.com/library/dn865013.aspx。下载后解压放到php对应的ext目录下。然后打开php.ini文件,在extension 后面添加一下配置

extension=php_pdo_sqlsrv_53_ts.dll
extension=php_sqlsrv_53_ts.dll

重启apache,查看phpinfo(),确保apache已经支持sqlsrv。如下图所示:

技术图片

 

 并且安装sqlncli.msi,这个文件是协助windows环境访问sql server所在的数据库服务器的

<?php
 
 $serverName = "localhost";
 $connectionInfo = array( "Database"=>"jb51net", "UID"=>"sa", "PWD"=>"123456");
 $conn = sqlsrv_connect( $serverName, $connectionInfo );
 if( $conn === false ) {
   die( print_r( sqlsrv_errors(), true));
 }
 
 $sql = "SELECT * FROM dbo.A_PHP";
 $stmt = sqlsrv_query( $conn, $sql );
 if( $stmt === false) {
   die( print_r( sqlsrv_errors(), true) );
 }
 
 
 while($row = sqlsrv_fetch_array($stmt))
 {echo $row[0]."-----".$row[1]."<br/>";}
?>

三、通过odbc方式连接sqlserver系列

需要在php.ini中开启php_pdo_odbc.dll扩展。

技术图片

<?php
$con = odbc_connect(‘DRIVER={SQL Server};SERVER=localhost;DATABASE=jb51net,‘sa‘,‘123456‘);
$query = "SELECT * FROM dbo.A_PHP";
$result = odbc_do($con,$query);
while(odbc_fetch_row($result))
{
  $list = odbc_result($result, "id");   print_r($list);echo ‘<br/>‘;
}
?>

四、通过PDO方式连接sqlserver

在php.ini中开启php_pdo_mssql.dll扩展。在phpinfo中可查看

<?php
 $conn = new PDO("sqlsrv:server=localhost;database=jb51net","sa","123456");
 $sql = "select count(*) count from CKXS2";
 $res = $conn->query($sql);
 while ($row = $res->fetch()){
 print_r($row);
 }
 
?>

五、通过COM方式连接。

<?php
 $conn = new Com("ADODB.Connection"); //实例化一个Connection对象 
 $connstr = "provider=sqloledb;datasource=.;uid=sa;pwd=123456;database=jb51net;"; 
 $conn->Open($connstr); 
 $rs = new Com("ADODB.Recordset"); //实例化一个Recordcount对象 
 
 $rs->Open(‘select * from CKXS2 ‘, $conn, 1, 1); 
 $count = $rs->RecordCount; 
 echo "共有{$count}条纪录<br />"; 
?>

 

 

 

以上是关于快速学会JDBC及获取连接的五种方式的主要内容,如果未能解决你的问题,请参考以下文章

JDBC连接Mysql的五种方式

JDBC增删改 查操作

JDBC获取数据库连接五种方式

[简约webAPI]php连接MSsql server的五种方法总结

Mysql查看版本号的五种方式介绍

JDBC 数据库的几种连接方式