eclipse用jdbc连接SQL server时出现了问题……这是什么情况啊!请大神指教!

按照教程一步步来的 驱动器和jdk都是是最新版 不知道哪里出了问题……

一、安装JDBC驱动程序
二、加载驱动程序并建立连接对象
1.sql server的连接代码:
2.关于这里的用户名和密码
3.解决在用sa登录时可能出现的问题
三、建立数据库
四、在servlet中创建语句对象并执行操作
1.Statement对象的创建
2.查询:调用Statement对象的executeQuery()方法,得到ResultSet对象。
3.关于ResultSet对象——获得执行结果
①.next()定位记录
②getXxx获得某条记录中的列值
4.非查询语句:使用executeUpdate()方法
5.讲讲可滚动、可更新的ResultSet——Statement对象创建时的三个参数
①resultType——ResultSet是否可滚动
可能值:
移动结果集游标的方法(对于可滚动的结果集)
②concurrency——是否可通过ResultSet更新表
可能值
更新方法
五、使用预处理语句——preparedStatement对象代替Statement
preparedStatement对象的创建
创建时的参数之一sql语句的参数-“?”和对?进行赋值
执行预处理语句-查询、更新、其他
六、一个完整的servlet示例
一、安装JDBC驱动程序

下载SQL Server JDBC 驱动程序 6.0点击下载,这里我选择的是.exe版本,如下图:

点击Next->下载完成后双击->弹出的窗体中点击【Unzip】按钮
解压后的目录中有一个jre7和jre8文件夹

将对应的.jar包复制到Tomcat安装目录的lib目录中或web应用程序的WEB-INF\lib目录中
注意jdk是什么版本的就复制哪个文件夹下的jar包

如果不知道自己的jdk版本:
win+R 输入cmd 进入命令行 输入 java -version

二、加载驱动程序并建立连接对象

1.sql server的连接代码:

//加载
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");、
//连接数据库
Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=xxx", user, password);
1
2
3
4
其中1433是SQL Server的默认端口号,DatabaseName是要连接数据库的名称,user是用户名,password是登录密码。
其他数据库的连接代码也可以通过百度找到。

2.关于这里的用户名和密码

平时使用数据库时你可能是这么连接的:

要用到用户名和密码的话,可以直接使用sa,按上图方式登录后:安全性->登录名->sa->属性->更改密码

然后关闭ssms,重新开启,选择sql server身份验证,尝试用sa和新的密码登录

3.解决在用sa登录时可能出现的问题

①已成功与服务器建立连接,但是在登录过程中发生错误。(provider:命名管道提供程序,error:0-管道的另一端上无任何进程。)(Microsoft SQL Server,错误:233)
开始—所有程序—Microsoft SQL Server 2017 —Microsoft SQL Server 2017配置管理器
如果在这里没有,则右键我的电脑-管理,按下图所示将右边的“Named Pipes”和“TCP/IP”启用

再重启SQL Server:右键下图中正在运行的sql server-选择重新启动

②用户 ‘sa’ 登录失败。 (Microsoft SQL Server,错误: 18456)
看这里可以解决
感觉它讲得够详细了,这里就不赘述了。

三、建立数据库

和一般建立数据库并没有什么不同,这里就不说了。
如果完全不清楚怎么用可以查看之前的一篇博客:数据库入门

四、在servlet中创建语句对象并执行操作

示例代码——以查询为例

String sql = "SELECT * FROM products";
Statement pstmt = dbconn.Statement();
ResultSet rst = stmt.executeQuery(sql);
if(rst.next())//抛出SQLException异常
{
//创建javaBean实例并给它赋值,并将其存储到作用域变量中请求转发/重定向,例如
Product product = new Product();
product.setProd_id(rst.getString("prod_id"));

}else {
response.sendRedirect("/helloweb/error.jsp");
}
1
2
3
4
5
6
7
8
9
10
11
12
1.Statement对象的创建

语句对象需要通过connection对象创建:(如上文二中建立连接对象的代码)

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");、
Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=xxx", user, password);
1
2
创建Statement对象的三种声明

Statement stmt = con.createStatement();
Statement stmt = con.createStatement(int resultType,int concurrency);
Statement stmt = con.createStatement(int resultType,int concurrency,int holdability);
1
2
3
对于这三个参数的解释牵涉到ResultSet对象,先看下面的内容,在之后会有解释。

2.查询:调用Statement对象的executeQuery()方法,得到ResultSet对象。

执行查询语句时Statement对象调用executeQuery(Srting sql)方法,该方法的返回值是ResultSet,用于保存查询的结果集。
ResultSet rst = stmt.executeQuery(sql);←这样我们就得到了ResultSet对象rst。
注意Result对象的记录行从1开始,而不是0。

3.关于ResultSet对象——获得执行结果

①.next()定位记录

rst.next()用于定位到下一条记录。对新产生的ResultSet对象,游标指向第一行的前面。
该方法的返回值是Boolean,如果已无下一条记录则返回false。

②getXxx获得某条记录中的列值

//当值为String时

rst.getString(String columnName);//参数为列名
rst.getString(int columnIndex);//参数为列的序号,从1开始
1
2
3
4
4.非查询语句:使用executeUpdate()方法

public int executeUpdate(String sql) 返回值为受影响行数,如果语句没有返回值则返回0。
INSERT、CREATE TABLE、DELETE等等语句都可以使用executeUpdate()方法
public int[] executeBatch():用于在有一个操作中发送多条SQL语句。

5.讲讲可滚动、可更新的ResultSet——Statement对象创建时的三个参数

使用不带参数的.createStatement();时,resultset对象默认不可滚动、不可更新。

①resultType——ResultSet是否可滚动

可能值:

ResultSet.TYPE_SCROLL_SENSITIVE——可滚动,且当数据库发生改变时,变化对结果集可见
ResultSet.TYPE_SCROLL_INSENSITIVE——可滚动,但数据库发生改变时,变化对结果集不可见
ResultSet.TYPE_FORWARDONLY——不可滚动

移动结果集游标的方法(对于可滚动的结果集)

方法 说明
public boolean previous() throws SQLException 游标向前移动一行,存在合法的行返回true,不存在返回false
public boolean first() throws SQLException 移动游标使其指向第一行
public boolean last() throws SQLException 移动游标使其指向最后一行
public boolean absolute(int rows) throws SQLException 移动游标使其指向指定行
public boolean relative(int rows) throws SQLException 移动游标,参数为相对现在在的行基准,正向前移动,负向后
public boolean isFirst() throws SQLException 返回游标是否指向第一行
public boolean isLast() throws SQLException 返回游标是否指向最后一行
public int getRow() 返回游标所在当前行行号
②concurrency——是否可通过ResultSet更新表

可能值

ResultSet.CONCUR_READ_ONLY——只读
ResultSet.CONCUR_UPDATABLE——可通过ResultSet更新表

更新方法

更新:
updateXxx,以int类型为例:

//用指定整数x更新当前指定列
public void updateInt(int columnIndex,int x)
public void updateInt(String columnName,int x)
1
2
3
updateXxx指定了更新进去的数据类型。
public void updateRow() throws SQLException//调用updateXxx,再调用updateRow()实现修改,在调用updateRow()前可使用cancelRowUpdate()取消更新。

插入:
①public void moveToInsertRow() throws SQLException //将游标移到插入行,再用updateXxx修改值,再调用insertRow插入
②public void insertRow() throws SQLException //插入一行数据
③public void moveToCurrentRow() throws SQLException //返回当前行,也可以在insertRow() 前调用取消插入

删除:
public void deletetRow() throws SQLException

五、使用预处理语句——preparedStatement对象代替Statement

因为它比Statement的效率要高。

示例代码——依旧以查询为例,注意和四中Statement写法的比较

String sql = "SELECT * FROM products WHERE prod_id=?";
PreparedStatement pstmt = dbconn.prepareStatement(sql);
pstmt.setString(1, productid);
ResultSet rst = pstmt.executeQuery();
if(rst.next())//抛出SQLException异常
{
//创建javaBean实例并给它赋值,并将其存储到作用域变量中请求转发/重定向,例如
Product product = new Product();
product.setProd_id(rst.getString("prod_id"));

}else {
response.sendRedirect("/helloweb/error.jsp");
}
1
2
3
4
5
6
7
8
9
10
11
12
13
preparedStatement对象的创建

它比Statement对象创建时多了一个参数——sql语句

PreparedStatement pstmt = con.prepareStatement(String sql);
PreparedStatement pstmt = con.prepareStatemen(String sql,int resultType,int concurrency);
PreparedStatement pstmt = con.prepareStatemen(String sql,int resultType,int concurrency,int holdability);
1
2
3
创建时的参数之一sql语句的参数-“?”和对?进行赋值

在sql语句中用?指定参数。(或者说是占位符)
从字符串左侧开始第一个占位符的序号为1,以此类推
pstmt.setXxx(int index, Xxx value);用于给占位符赋值

执行预处理语句-查询、更新、其他

注意必须要调用这些方法的无参数版,而且在执行sql语句前必须用setXxx设置好所有参数

//查询语句
ResultSet result = pstmt.executeQuery();

//更新语句
int n = pstmt.executeUpdate();

//其他语句
Boolean b = pstmt.execute();
1
2
3
4
5
6
7
8
六、一个完整的servlet示例

package com.homework7.servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.homework7.bean.Product;

/**
* Servlet implementation class QueryProductServlet
*/
@WebServlet("/queryproduct.do")
public class QueryProductServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

Connection dbconn = null;

public void init() {

String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String dburl = "jdbc:sqlserver://localhost:1433;DatabaseName=webHomework";
String username = "sa";
String password = "123456";
try {
Class.forName(driver);
System.out.println("数据库驱动加载成功");
dbconn = DriverManager.getConnection(dburl, username, password);
System.out.println("数据库连接成功");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(SQLException e2) {}

}
/**
* @see HttpServlet#HttpServlet()
*/
public QueryProductServlet() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String productid = request.getParameter("productid");
try {
String sql = "SELECT * FROM products WHERE prod_id=?";
PreparedStatement pstmt = dbconn.prepareStatement(sql);
pstmt.setString(1, productid);
ResultSet rst = pstmt.executeQuery();
if(rst.next())
{
Product product = new Product();
product.setProd_id(rst.getString("prod_id"));
product.setPname(rst.getString("pname"));
product.setPrice(rst.getDouble("price"));
product.setStock(rst.getInt("stock"));
request.getSession().setAttribute("product", product);
response.sendRedirect("/helloweb/displayProduct.jsp");
}else {
response.sendRedirect("/helloweb/error.jsp");
}
}catch(SQLException e) {
e.printStackTrace();
}
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request,response);
}

public void destroy() {
try {
dbconn.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
文章最后发布于: 2018-06-08
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yogima/article/details/80614575
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-12-08
你的数据库名字是Drivermanager? 不是123吗?
看你这个情况,应该是连接未找到你的数据库名字,把Drivermanager换成你的数据库名字。也就是蓝条状标示出的那一行的Databasename.

eclipse用jdbc连接SQL server时出现了问题……这是什么情况啊!请大神...
3.解决在用sa登录时可能出现的问题 ①已成功与服务器建立连接,但是在登录过程中发生错误。(provider:命名管道提供程序,error:0-管道的另一端上无任何进程。)(Microsoft SQL Server,错误:233)开始—所有程序—Microsoft SQL Server 2017 —Microsoft SQL Server 2017配置管理器 如果在这里没有,则右键我...

Eclipse利用JDBC连接SQL Server的时候显示如下,求解,详细的解!感谢...
没再java里用过sqlserver,但是感觉这个错误,应该是数据库的jdbc驱动版本和数据库版本不兼容,试试换个版本的jdbc驱动。

用jdbc连接sqlsever出现这样的错误,想知道大概哪里出问题?
这个原因是因为jdk版本过低导致的,我原先是jdk1.6.0.43 ,现在换成jdk1.8了,然后将eclipse里的jre记得修改成最新的jdk,重新编译一下执行,应该就没问题了 而且这个问题只会出现在win10上面,昨天win10更新之后就不能用了,我就无语了,强制让你升级吗。

急!用Eclipse写JDBC连接SQLserver2000 出现问题
你下载一个文件:jdbc连接sql server 2000 下载后 解压 或是安装 后 它就提供三个jar文件导入到相应的文件夹里 然后就可以连接了

JDBC连接SQL SERVER报错:RSA premaster secret error
我个人认为有可能是包的问题 建议把另一台电脑的eclipse 找到apache下的tomcat下的lib文件夹里的所有包放到 你那台电脑的tomcat lib下 清除构建路径 自动构建 从新启动tomcat 试试 原答案:如果是单纯的链接问题 那好说 好像现在市面还没有2008的驱动,用2005的sqljdbc_1.2.2828.100_enu.exe 就...

eclipse连接sql server2008r2jar包导进去了还是显示驱动有问题怎么办...
eclipse 连接sql server2008r2 时遇到问题,即使导入了jar:sqljdbc4-6.0.6629.101.jar,仍然提示“加载错误---Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")”。解决方法如下:首先,下载SQL Server驱动包,内含sqljdbc.jar。在建立的工程下操作:project->properties->Java Build Path...

为什么用eclipse和sql server2008连接,sql server2008中sa登录成功了...
问题四、sql server 2005 错误 18452 无法连接到服务器 服务器:消息18452, 级别16,状态1 [Microsoft][ODBC SQL Server Driver][SQL Server]用户‘sa’登陆失败。原因:未与信任SQL Server连接相关联 该错误产生的原因是由于SQL Server使用了"仅 Windows"的身份验证方式,因此用户无法使用SQL Server的...

Eclipse中如何通过JDBC连接SQL Server数据库
1、首先我们打开SQL Server数据库,新建一个测试数据库,如下图所示 2、接下来需要下载SQL Server的JDBC驱动程序,如下图所示,驱动程序是一个Jar包文件 3、然后我们打开Eclipse软件,右键选择New下面的Java Project选项,如下图所示 4、在弹出的新建Java Project界面中我们给项目起一个名字,然后选择合适...

用eclipse连接数据库(sql 2000)有错误,java.sql.SQLException: No s...
3、双击“TCP\/IP”进入属性设置,在“IP 地址”里,可以配置“IPAll”中的“TCP 端口”,默认为1433。4、重新启动SQL Server或者重启计算机。创建数据库 打开“SQL Server Management Studio”,登录连接SQL Server服务器,新建数据库,命名为test 在Eclipse中测试 1、打开Eclipse,“文件”→“新建”→...

数据库和eclipse的连接中,com.microsoft.sqlserver.jdbc.SQLServerExcept...
安装的数据库上Tcp\/IP协议的端口号是否设置成了1433,我记得那会用的时候需要设置3个端口号是1433的,设置好了之后,在重启数据库服务。

相似回答