在学习到SQL语句的嵌入式式编程时,我兴致勃勃地开始尝试受用jdbc尝试一下!!!
但是,让让我悲痛欲绝的一天也就开始了!!!
首先,先来简单的过一遍jdbc连接sql server 数据库的过程:
- 加载驱动程序:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
- 通过DriverManager获得数据库的连接:
Connection conn = DriverManager.getConnection("jdbc:sqlserver://DESKTOP-4HGN7AP:1433;DatabaseName=studentData", "sa", "123456");
- 接下来就是对书数据库进行操作了:
对数据库的操作的语句是通过数据库连接对象进行创建的,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("数据库连接失败");
}
}
}
数据库用完之后要关闭连接,结果集,语句都要关闭!