关于JAVA9通过JDBC连接 sql server 数据库的问题

在学习到SQL语句的嵌入式式编程时,我兴致勃勃地开始尝试受用jdbc尝试一下!!!
但是,让让我悲痛欲绝的一天也就开始了!!!
首先,先来简单的过一遍jdbc连接sql server 数据库的过程:

  1. 加载驱动程序:Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
  2. 通过DriverManager获得数据库的连接:
    Connection conn = DriverManager.getConnection("jdbc:sqlserver://DESKTOP-4HGN7AP:1433;DatabaseName=studentData", "sa", "123456");
  3. 接下来就是对书数据库进行操作了:
    对数据库的操作的语句是通过数据库连接对象进行创建的,
    Statement stmt = conn.createStatement();
    这个语句就相当于创建了一个Statement对象stmt,stmt就是用来向数据库发送sql语句的,既然对数据库进行了操作,那肯定是会有结果的,而且在数据库中的结果好不是一般的单个变量而是乘坐结果集,在Java里就是ResultSet。在创建stmt时我们并没有指明具体执行什么sql语句,接下来就要完成这一步了(当然也有别的方法制定):
    ResultSet rs = stmt.executeQuery(sql);
    这样我们就得到了一个结果集了

    其实连接数据库,操作数据库的过程并不复杂,但是在其中配置环境的过程中常常出现一些令我十分困惑的问题,这也是为什么这是我悲痛欲绝的一天了!接下来就来说说我这次遇到的问题吧:

    1.让你的数据库能够被连接!

要通过jdbc访问数据库,你的数据库就必须是对外开放的,什么意思呢?因为毕竟一个java程序是不属于sql server 的,java程序是通过连接你的数据库所在的服务器来进行访问数据库的,就是通过TCP/IP协议,并且要设置好连接的端口,默认是1433,但是这部配置其实很简单,通过 SQLServerManager(sql server配置管理器)来进行设置就好了。如图:
这里写图片描述
TCP/IP设置成这样就好了,sql server 中的网络配置如下即可:
这里写图片描述
还有就是你的数据库实例要处于启动状态,不然是不可能连接上数据库的哦:
这里写图片描述
这个时候可以打开你的cmd程序,键入telnet 127.0.0.1 1433 看看你的端口设置成功了没有,如果没有重复上述步骤。

2.搞定你的数据库的身份验证方式!

可以打开sql server 的SSMS,右击服务器->属性->安全性,在右侧面板出查看服务器身份验证
这里写图片描述
切记!一定要设置成sql server和windows身份验证模式!之后再查看你要使用的用户名的属性:
这里写图片描述
保证你的用户名允许连接到数据库引擎,登录名是出于启用的状态!

3.找到符合你的JDK的jdbc驱动程序包!!!

这里说的sqljdbc只是一个统称,不同jdk的驱动程序包的包名是不一样的,方便起见,一下均使用sqljdbc表示。
走到这一步也就离成功不远了,但是也是最艰难的一步(至少对我来说是)。一定要是符合你的JDK版本的驱动程序包!!!这里助你一臂之力:点这里找到适合你的sqljdbc驱动程序包!!!
如果jdk和sqljdbc不匹配的话你可能会一直处于无法连上的状态,我猜测是因为如果你的JDK版本更高的话,无法使用低版本的sqljdbc,语序也许是因为sqljdbc是向下兼容的吧。
下载到了sqljdbc之后,就要设置classpath了!既然都到了jdbc这个阶段了,jdk什么的肯定都已经搞定了,这里也就不细说了,找到环境变量,在classpath中添加你下载的sqljdbc包的位置,比如我的是放在 D:\Program Files\Java\jre\jdbc\sqljdbc_6.4\enu\mssql-jdbc-6.4.0.jre9.jar 里的,所以在classpath里添加 “;D:\Program Files\Java\jre\jdbc\sqljdbc_6.4\enu\mssql-jdbc-6.4.0.jre9.jar”,到此sqljdbc驱动程序也就配置好了,写个程序试试吧:


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

public class connectionURL {
    public static void main(String[] args){
         Connection conn;
         Statement stmt;
         ResultSet rs;
         //这里的DEKTOP-4HGN7AP根据自己的受苦的服务器来设置
         String url = "jdbc:sqlserver://DESKTOP-4HGN7AP:1433;DatabaseName=studentData";
         String sql = "select * from student";
         try {
             try {
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                System.out.println("驱动成功!");
             } catch (ClassNotFoundException e) {
                e.printStackTrace();
             }

             // 连接数据库
             conn = DriverManager.getConnection(url, "sa", "123456");
             System.out.println("数据库连接成功!");
             // 建立Statement对象
             stmt = conn.createStatement();
             //获得结果集
             rs = stmt.executeQuery(sql);

             System.out.println("Sno------Sname------Sex------age------dno------dormno");
             while (rs.next()) {
                 String sno = rs.getString("Sno");
                 String sname = rs.getString("Sname");
                 String sex = rs.getString("Sex");
                 int age = rs.getInt("Sage");
                 String dno = rs.getString("dno");
                 String dormno = rs.getString("dormno");

                 System.out.println(sno+"------"+sname+"------"+sex+"------"+age+"------"+dno+"------         "+dormno);
             }
             if (rs != null) {
                 rs.close();
                 rs = null;
             }
             if (stmt != null) {

                 stmt.close();
                 stmt = null;
             }
             if (conn != null) {
                 conn.close();
                 conn = null;
            }
         } catch (SQLException e) {

             e.printStackTrace();
             System.out.println("数据库连接失败");
        }
     }
}

数据库用完之后要关闭连接,结果集,语句都要关闭!

猜你喜欢

转载自blog.csdn.net/miha_singh/article/details/80387407