图书管理系统功能:登陆、查询、借书、还书(示例只实现了登陆功能)
一、环境准备
数据库软件:SQL Server 2005
IDE:Eclipse
JDK:jdk1.8.0_144
Tomcat:apache-tomcat-8.5.29
在Eclipse中部署Tomcat:Window-->preferences-->server-->Runtime Environments-->Add-->选择你的Tomcat所在目录
二、创建数据库表
1)书籍信息表Book
BookID BookName Stock(书籍库存)
2)学生信息表
StudentID StudentName Password
3)借阅记录表
RecordID BookID StudentID
除Stock是int类型外,其他都是nchar(10)类型
在SQL Server 2005中建立外键约束:
一个表中的主键可以作为另一个表的外键。右键外键表-->关系-->添加-->点击表和列规范后的“...”图标。
三、Maven简介
1、什么是Maven
Apache Maven是一个项目管理和整合工具。基于工程对象模型的概念(POM),通过一个中央信息管理模块,Maven能够管理项目的构建、报告和文档。
Maven工程结构和内容被定义在一个xml文件中——pom.xml,是Project Object Model的简称,此文件是Maven系统的基础组件。
2、为什么要用Maven
当我们创建一个Maven项目后,就不需要自己去导入各种jar包了,将要导入的jar包依赖信息配置在pom.xml中,Maven项目会根据具体的配置自动在编译、测试和运行的时候从本地仓库中导入相应的各种依赖。
这样做有两个最大的好处:一是项目的依赖被统一管理,不容易出现依赖冲突(比如说jar包引入的版本冲突);另一个就是项目的体积变小了,毕竟一个稍微大些的项目光是引入的jar包就占了相当多的体积,而Maven项目只需要一个pom.xml文件就搞定了。
这里有两个问题:
1)pom.xml文件的<dependencies>节点的<dependency>子节点用于配置各种jar包的依赖,我试了一下,当将spring-core的version改成与spring所需的其他jar包不一样的时候,运行还是会报jar包冲突的错误,为避免这种情况,有两种解决方案:①在pom.xml文件中加上<properties>元素,用来指定一个统一的版本,之后用${}来取值就可以了,这样可以保证版本的一致性。②去http://www.mvnrepository.com/查找所需要的jar包,点击对应版本(选择的时候注意版本的一致性),会出现对应的<dependency>语句,只用复制粘贴进你的pom.xml文件即可。
2)之前说过使用Maven管理项目不需要自行导入jar包,只需添加依赖,项目会到本地的maven仓库中找相应的jar包,若本地仓库中没有,maven会自动下载至仓库中。仓库中的jar包可供所有项目使用。此处有两个问题:①maven下载大量的jar包,导致某盘不够用,需要更换更大的分区。Eclipse自带的Maven插件,其仓库默认是在C盘的,这就更不好了。可以通过Window-->Preferences-->Maven-->User Settings来查看和更改仓库的默认路径。②并不是所有的jar包Maven都能自行下载成功的,比如我用的连接SQL Server数据库的sqljdbc4.jar Maven就不能下载成功(具体原因我也不知道...),这时就需要我们自行下载,然后放到maven的仓库中去。(注意,maven的jar包管理是分类的,不能直接将下载好的jar包丢在根目录下,应该寻找它应处的正确位置。比如sqljdbc4.jar存在com-->microsoft-->sqlserver-->sqljdbc4-->4.0目录下,虽然maven没有下载成功,但是在该目录下已经有两个.lastUpdated文件)
约定优于配置
Maven使用约定而不是配置,开发者不需要再关心每一个配置细节。当创建Maven工程时,Maven会创建默认的工程结构,开发者只需要合理的放置文件,并在pom.xml中添加项目相关的依赖。
使用Maven创建项目,默认分为以下几个文件夹:
src/main/java 用来存放项目源码
src/main/resources 存放资源文件,比如.properties文件
src/test/java 存放测试用的代码
src/test/resources 存放测试用的资源文件
target/classes 编译后的文件
target/test-classes 编译后用于测试的文件
四、使用Eclipse的Maven插件
使用Eclipse的Maven插件创建并管理项目。File-->New-->Maven Project
在网上看的都说要自行下载并配置Maven,但是我看Eclipse上有,就没有下载,不知道两者有什么差别。
在Eclipse上用Maven创建一个Web项目教程:
五、使用SSM框架搭建项目
1、基本概念
SSM框架是Spring、SpringMVC、MyBatis框架的整合,是标准的MVC模式,将整个系统划分为表现层、controller层、service层和DAO层。使用SpringMVC负责请求的转发和视图管理,Spring实现业务对象管理,MyBatis作为数据对象的持久化引擎。
1)Spring 是一个于2003年兴起的轻量级Java开发框架,是为了解决企业应用开发的复杂性创建的。Spring能使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发,从简单性、可测试性、松耦合的角度而言,任何Java应用都能从Spring中受益。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。我们平时开发接触最多的估计就是IoC容器,它可以装载Bean(也就是Java中的类),有了这个机制,我们就不用在每次使用这个类的时候为它初始化,很少看见关键字new。另外,Spring的AOP,事务管理等等都是我们经常用到的(这两个方面我还不是很懂)。
AOP:面向切面编程,是面向对象开发的一种补充,它允许开发人员在不改变原来模型的基础上动态的修改模型以满足新的需求,如动态的增加日志、安全或异常处理等。AOP使业务逻辑各部分间的耦合度降低,提高程序的可重用性,提高开发效率。
2)SpringMVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
3)MyBatis 是一个基于Java的持久层框架,消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置或原始映射,将接口和Java的POJOs(普通的Java对象)映射成数据库中的记录。MyBatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,其中配置了每个类对数据库所需进行的sql语句映射,在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
2、SSM整合
这次整合分了两个配置文件:spring-mybatis.xml和spring-mvc.xml文件
一个资源文件:jdbc.properties文件
都放在src/main/resources文件夹下。
1)引入jar包(在我的pom.xml文件中都有,就不一一列举了)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.LibraryManage</groupId>
<artifactId>LibraryManage</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>LibraryManage Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<!-- 主要是为了验证这个节点是不是可以自命名,建议用spring.version这样明确的名字 -->
<haha.version>4.3.5.RELEASE</haha.version>
</properties>
<dependencies>
<!-- junit包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<!-- 表示开发的时候引入,发布的时候不会加载此包 -->
<scope>test</scope>
</dependency>
<!-- javaee包 -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<!-- Spring核心包 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${haha.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.5.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!-- mybatis-spring核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!-- 连接SQL server的jar包 -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
<!-- mysql数据库链接包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
<!-- dbcp核心包,用于在applicationContext.xml中配置数据库 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- jstl标签类 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 日志文件管理包 -->
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- 格式化对象,方便输出日志 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.46</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
<scope>test</scope>
</dependency>
<!-- log end -->
<!-- 映入JSON -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<!-- 上传组件包 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
</dependencies>
<build>
<finalName>LibraryManage</finalName>
<plugins>
<!-- 修改maven的默认JRE版本,防止maven update project之后把JRE配置成默认的1.5 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
2)Spring与MyBatis的整合
①建立jdbc.properties属性文件(修改文件编码为utf-8)
jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url=jdbc:sqlserver://localhost:1433;DatabaseName=LibraryManage
jdbc.username=zxx
jdbc.password=120963
#定义初始连接数
initialSize = 0
#定义最大连接数
maxActive = 20
#定义最大空闲
maxIdle = 20
#定义最小空闲
minIdle = 1
#定义最长等待时间
maxWait = 60000
########连接mysql数据库语句########
#driver=com.mysql.jdbc.Driver
#url=jdbc:mysql://localhost:3306/LibraryManage
#username=zxx
#password=120963
###############################
自动扫描、自动注入、配置数据库。
<?xml version="1.0" encoding="UTF-8"?>
<!-- 创建spring.xml文件,引入beans、context、mvc、tx命名空间 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
<!-- 自动扫描 -->
<!-- 关于配置文件中的service层的配置,扫描包下所有的service层 -->
<context:component-scan base-package="com.zxx.service" />
<!-- 引入配置文件 -->
<!--
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties" />
</bean>
-->
<!-- 加载外部资源,此处为数据库文件 -->
<context:property-placeholder location = "classpath:/jdbc.properties" />
<!-- 定义一个数据源,其中${...}的值是从外部资源获取的,name必须和资源文件的属性名称相同 -->
<!-- 配置数据库连接池,配置类可以用BasicDataSource,也可以用阿里巴巴的配置核心类DruidDataSource -->
<!-- <bean id = "dataSource" class = "com.alibaba.druid.pool.DruidDataSource" -->
<!-- destroy-method = "close"意思为在bean工厂关闭时调用的自定义销毁方法的名称
The name of the custom destroy method to invoke on bean factory shutdown. The method must have no arguments, but may throw any exception. Note: Only invoked on beans whose lifecycle is under the full control of the factory - which is always the case for singletons, but not guaranteed for any other scope. -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- Spring和MyBatis整合,主要是整合sessionFactory。让Spring管理sqlSessionFactory -->
<!-- 配置sessionFactory -->
<bean id = "sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入dataSource,值为数据源的id或别名 -->
<property name = "dataSource" ref = "dataSource" />
<!-- 自动扫描mapper.xml文件 -->
<!-- 注入mapperLocations,值为mapper的资源路径 -->
<property name = "mapperLocations" value = "classpath:com/zxx/mapper/*.xml" />
</bean>
<!-- DAO接口所在包名,Spring会自动查找其下的类 动态代理实现 不用写dao的实现类-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.zxx.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<!-- 配置事务管理器transaction manager,方便通过注解控制事务提交
use JtaTransactionManager for global tx -->
<!-- 事务管理对于企业级应用来说是至关重要的,即使出现异常情况,也可以保持数据的一致性
Spring支持编程式事务管理和声明式事务管理
声明式事务管理有两种方式:一种是基于tx和aop名字空间的xml配置文件;另一种就是基于@Transaction注解 -->
<bean id = "transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name = "dataSource" ref = "dataSource" />
</bean>
<!-- 通过注解来控制事务提交 -->
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
3)整合SpringMVC
上面已经完成了两大框架的整合,SpringMVC的配置文件单独放,然后在web.xml中配置整合。
自动扫描控制器、视图模式、注解的启动这三个。
<?xml version="1.0" encoding="UTF-8"?>
<!-- spring-mvc配置文件,引入命名空间 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
<!-- 开启注解 -->
<context:annotation-config />
<!-- 开启mvc的注解驱动
<mvc:annotation-driven />
-->
<!-- 自动扫描controller包下的所有类,使SpringMVC认为包下用了@Controller注解的是控制器 -->
<context:component-scan base-package="com.zxx.controller" />
<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
<bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 自动给后面action方法的return字符串加上前后缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
②配置web.xml文件
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<!-- web.xml主要是用来注册写的功能,像一些servlet、dispatcher、filter等 -->
<!-- 每定义了一个注册的功能,都加一个mapping与之对应 -->
<!-- 遇见不一样的url产生不一样的操作 -->
<!-- web-app元素声明的是下面每个子元素的声明,是该文档的根元素 -->
<web-app>
<!-- 如果使用工具编辑部署描述符,display-name元素包含的就是XML编辑器显示的名称 -->
<display-name>Archetype Created Web Application</display-name>
<!-- spring和mybatis的配置文件 -->
<!-- 在web.xml文件中通过contextConfigLocation配置Spring,该参数定义了要装入的Spring配置文件
如果想装入多个配置文件,可以在param-value标记中用逗号做分隔符 -->
<!-- context-param使用上下文初始化参数
含有一对参数名和参数值,用作应用的Servlet上下文初始化参数,参数名在整个web应用中必须是唯一的
在web的整个生命周期中上下文初始化参数都存在,任意的Servlet和jsp都可以随时访问他
作为选择,可以用<description>子元素来描述它-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mybatis.xml</param-value>
</context-param>
<!-- 配置编码过滤器 -->
<!-- filter可以认为是Servlet的加强版,主要用于对用户请求request进行预处理,也可对response进行后处理,是个典型的处理链
使用filter的流程是:对用户请求进行预处理,接着将请求HTTPServletRequest交给Servlet进行处理并生成响应,最后Filter再对服务器响应HTTPServletResponse进行后处理
Filter与Servlet具有相同的生命周期,且可通过init-param来初始化参数
获取Filter的初始化参数使用FilterConfig的getInitParameter() -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<!-- "/"会匹配到一个像"/spring"这样的路径型url
"/*"会匹配到所有的url,包括像*.jsp这样的后缀型 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置Spring监听器,必须使用listener,而context-param可有可无 -->
<!-- listener为web应用程序定义监听器,用来监听各种事件 -->
<!-- 该Listener用来加载xml文件,根据之前context-param中的classpath路径来加载
如果没有指定,则会默认加载/WEB-INF/下的applicationContext.xml文件 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 防止Spring内存溢出监听器 -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<!-- 配置Spring MVC Servlet -->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!-- load-on-startup的值可以为空,或者是一个整数。这个值表示由web容器载入内存的顺序 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- servlet-mapping用于将url模式映射到某个Servlet,即该Servlet处理的url -->
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
至此,我认为最难的部分已经做完了(配置文件真的是我认为最难的,这个项目只是根据网上的示例做的,配置文件基本都是copy copy copy,还不算真正理解吧,之后还要好好研究研究)
搭建好之后,项目的目录结构大概是:
3、系统实现
框架搭好了,可以开始写具体的功能了~
要完成一个具体的功能:
1)先写实体类entity,定义对象的属性(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码之前)
2)写Mapper.xml(mybatis),其中定义你的功能,对应要对数据库进行的哪些操作,比如select、insert、update、delete等
3)写Dao.java,一般是接口类型的,将Mapper中的操作按照id映射成Java方法。
4)写Service.java,为控制层提供服务,接受控制层的参数,完成相应的功能,并返回给控制层。
5)写Controller.java连接页面请求和服务层,获取页面请求的参数,通过自动装配,映射不同的URL到相应的处理函数,并获取参数,对参数进行处理,之后传给服务层。
6)写JSP页面调用,请求哪些参数,需要获取哪些数据。
六、过程中遇到的问题
1、NoSuchBeanDefinitionException: No qualifying bean of type xxx found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency.这个错是指Spring的依赖注入出了问题,没有找到符合的bean,好好检查spring-mybatis.xml配置文件,一般是这里面出了问题。
2、数据库相关问题
之前一直用的mysql数据库,这次换成SQL Server真的有挺多地方不一样,需要注意。
首先是连接数据库的jar包,这个在之前已经说过了。
然后是数据库配置文件有一点点不一样,不过基本套路还是一样的(driver、url、username、password)。这里有两点需要注意:一是数据库的端口号,mysql默认是3306,而SQL Server则不一样,需要自己去看本机的数据库端口号,我的是1433,具体方法百度一下就有。二是以上说的四个参数(driver、url、username、password),如果数据表中有相同名字的字段(比如学生表中也有Password字段),最好改一下参数的名字,比如说加上一个“jdbc.”前缀,不然也会报错,就是这么任性。这两个问题报的错都是“用户xxx无法连接到数据库”这种类似的。
然后是权限问题,我是在数据库中新建了一个用户“zxx”,该用户只有连接的权限,没有增删改查数据的权限,这个时候就需要对该用户进行授权,具体方法也百度一下。当然,如果用的mysql就没有这些乱七八糟的问题。
3、还有其它问题皆百度之
天下文章一大抄,天下代码也是一大抄。不过希望我抄了之后能真的弄懂吧。
花了一个多星期才写完一个简单的登陆,也是没谁了...