700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java web之数据库的连接(使用JDBC连接sql server )

java web之数据库的连接(使用JDBC连接sql server )

时间:2020-09-26 05:57:14

相关推荐

java web之数据库的连接(使用JDBC连接sql server )

一、安装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对象代替StatementpreparedStatement对象的创建创建时的参数之一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);

其中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 —Microsoft SQL Server 配置管理器

如果在这里没有,则右键我的电脑-管理,按下图所示将右边的“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.Statement对象的创建

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

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");、Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=xxx", user, password);

创建Statement对象的三种声明

Statement stmt = con.createStatement();Statement stmt = con.createStatement(int resultType,int concurrency);Statement stmt = con.createStatement(int resultType,int concurrency,int holdability);

对于这三个参数的解释牵涉到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开始

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——不可滚动

移动结果集游标的方法(对于可滚动的结果集)
②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)

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");}

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);

创建时的参数之一sql语句的参数-“?”和对?进行赋值

在sql语句中用?指定参数。(或者说是占位符)

从字符串左侧开始第一个占位符的序号为1,以此类推

pstmt.setXxx(int index, Xxx value);用于给占位符赋值

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

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

//查询语句ResultSet result = pstmt.executeQuery();//更新语句int n = pstmt.executeUpdate();//其他语句Boolean b = pstmt.execute();

六、一个完整的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 blocke.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 stubString 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 stubdoGet(request,response);}public void destroy() {try {dbconn.close();}catch(Exception e) {e.printStackTrace();}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。