一、JDBC连接SQLserver数据库的步骤:
1.下载SQLserver的JDBC驱动文件——Microsoft JDBC Driver 4.0 for SQL Server
2.例如下载得到的文件是sqljdbc_4.0.2206.100_chs.exe,解压文件,将解压缩文件中的sqljdbc4.jar放到eclipse-workspace\User_Message(新建的JavaWeb项目)\WebContent\WEB-INF\lib目录下
3.加载JDBC驱动程序:在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String className)实现,成功加载后,会将Driver类的实例注册到DriverManager类中
示例语句:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
4.创建连接对象:要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象, 该对象就代表一个数据库的连接,使用DriverManager的getConnectin(String url , String username , String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和密码,其中url定义了连接数据库时的协议、子协议、数据源标识,协议——在JDBC中总是以jdbc开始,子协议——是桥连接的驱动程序或是数据库管理系统名称,数据源标识——标记找到数据库来源的地址与连接端口。
示例语句:
String user="sa"; String password="woshizcy0919"; String url= "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=User_DB"; Connection connection=DriverManager.getConnection(url, user, password);
5.准备SQL语句:
示例语句:
String sql="select count(*) from t_user where username=?";
6.执行SQL语句:先将SQL语句赋给preparedStatement对象,下面有两种执行SQL语句的方法executeQuery 、executeUpdate
(1)ResultSet executeQuery():执行查询数据库的SQL语句,返回值为一个结果集(ResultSet)对象。
(2)int executeUpdate():执行INSERT、UPDATE或DELETE语句以及SQL DDL语句(如:CREATE TABLE和DROP TABLE等),并更新数据库,返回值为本次操作影响的行数,即记录数。
示例语句:
PreparedStatement preparedStatement=
connection.prepareStatement(sql);
preparedStatement.setString(1, user.getUsername());
resultSet=preparedStatement.executeQuery();
preparedStatement.executeUpdate();
7.操作结果集对象:
结果集中包含符合SQL语句查询条件的所有行,即所有记录,并且它通过一套get方法提供了对这些行中数据的访问,使用结果集对象(resultSet)的访问方法获取数据。
(1)resultSet.next():读取结果集中的下一行,即下一条记录。
(2)resultSet.getInt(int index)
resultSet.getInt(String columName):
通过索引或者列名来获得查询结果集中的某一列的值。
示例语句:
//例:现有表User:列有id,name String sql="select * from User"; ResultSet resultSet = null; resultSet = preparedStatement.executeQuery(sql); while(resultSet.next) { resultSet.getInt(1)//等价于resultSet.getInt("id"); resultSet.getString(2)//等价于resultSet.getInt("name"); }
8.关闭JDBC对象:
示例语句:
DBUtil.close(resultSet);
DBUtil.close(preparedStatement);
DBUtil.close(connection);
二、登录界面及其功能设计
1.对数据库操作方法的接口
package com.jaovo.msg.dao; import java.util.List; import com.jaovo.msg.model.User; public interface IUserDao { public void add(User user); public void delete(int id); public void update(User user); public User load(int id); public User load(String username); public List<User> load(); }
2.实现接口的类
package com.jaovo.msg.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import com.jaovo.msg.Util.DBUtil; import com.jaovo.msg.Util.UserException; import com.jaovo.msg.model.User; public class UserDaoImpl implements IUserDao { public void add(User user) { //获得连接的对象 Connection connection=DBUtil.getConnection(); //准备sql语句 String sql="select count(*) from t_user where username=?"; //创建语句传输对象 PreparedStatement preparedStatement=null; ResultSet resultSet=null; try { preparedStatement=connection.prepareStatement(sql); preparedStatement.setString(1, user.getUsername()); //接收结果集 resultSet=preparedStatement.executeQuery(); //遍历结果集 while(resultSet.next()) { if(resultSet.getInt(1)>0) { throw new UserException("用户已存在!"); } } sql="insert into t_user(username,nickname,password) values(?,?,?)"; preparedStatement=connection.prepareStatement(sql); preparedStatement.setString(1, user.getUsername()); preparedStatement.setString(2, user.getNickname()); preparedStatement.setString(3, user.getPassword()); preparedStatement.executeUpdate(); //重写底层代码: /* sql="insert into t_user(id,username,userpassword,nickname)values('"+user.getId()+"','"+user.getUsername()+"','"+user.getPassword()+"','"+user.getNickname()+"')"; Statement stmt; Connection con=DBUtil.getConnection(); stmt=con.createStatement(); stmt.executeUpdate(sql); */ //重写结束 } catch (SQLException e) { e.printStackTrace(); } finally { //关闭JDBC对象 DBUtil.close(resultSet); DBUtil.close(preparedStatement); DBUtil.close(connection); } } public void delete(int id) { //获得连接的对象 Connection connection=DBUtil.getConnection(); //准备sql语句 String sql="delete from t_user where id=?"; //创建语句传输对象 PreparedStatement preparedStatement=null; try { preparedStatement=connection.prepareStatement(sql); preparedStatement.setInt(1, id); preparedStatement.executeUpdate(); } catch(SQLException e) { e.printStackTrace(); } finally { DBUtil.close(preparedStatement); DBUtil.close(connection); } } public void update(User user) { //获得连接的对象 Connection connection=DBUtil.getConnection(); //准备sql语句 String sql="delete from t_user where id=?"; //创建语句传输对象 PreparedStatement preparedStatement=null; try { preparedStatement=