您的位置:首页 > 数据库 > Oracle

Java程序连接oracle数据库,并实现注册与登录功能

2016-10-29 19:47 836 查看

易错点:

1.运行时出错:ORA-00913: 值过多。

主要是因为程序里的参数个数与oracle 数据库中的表中的参数个数不一致。本程序中我在Oracle中创建的表有三个属性:

create table users(
id number(7) primary key,
name varchar2(10) unique,
password varchar2(8)  not null
);


但是一般登录都只需要用户输入用户名和密码,所以在下面的注册登录过程中,我将sql语句中的id写死为506。其实也可以让其自动生成id。方法如下:(其中cycle表示循环,cache 表示刷新)

create sequence auto_Id
increment by 1
start with 2016001
minvalue 2016001
maxvalue 2016999
cycle
cache 3


如果是用自动生成的id号,那么下面的程序中main方法里的sql语句需要修改为

String sql = "insert into sxt_users values ( auto_sxtId.nextval, ?, ?)";


2.另外一个容易出错的地方就是关流的时候了

public class JDBCRegister {
//数据库,只连接一次就好;
static Connection con = DBUtils.getConnectionOfDB();

public static void main(String[] args) {
String sql = "insert into sxt_users values( 506, ?, ?)";
//输入用户名
String name = Tools.inputString("请输入用户名》》");
//判断用户名是否被注册过,使用循环判断
boolean flag = isOnly(name);
while(flag == false){
System.out.println("用户名"+name+"已被注册");
name = Tools.inputString("请直接登录或重新输入用户名》》");
flag = isOnly(name);
}
//输入密码并使用循环判断
String password = Tools.inputString("请输入密码》》");
String regex = ".{6,8}";
boolean f2 = password.matches(regex);
while(f2== false){
System.out.println("输入的密码长度应在6~8位之间");
password = Tools.inputString("请重新输入密码");
}
//会话
PreparedStatement pstmt = DBUtils.getPreparedStatementOfDB(con, sql);
//为?填写数据
try {
pstmt.setObject(1, name);
pstmt.setObject(2, password);
int i = pstmt.executeUpdate();
if(i>0){
System.out.println("恭喜你,"+name+"注册成功");
//跳转到登录界面
System.out.println("请登录……");
JDBCLogin.main(args);
}else{
System.out.println("注册失败,用户名重复");
}
} catch (SQLException e) {
System.out.println("注册失败,用户名已经存在~~");
} finally {
//不是查询语句,不用获得结果集rs,所以也不用关闭它
DBUtils.closeAll(con, pstmt, null);
}
}

private static boolean isOnly(String name) {
String sql = "select id from sxt_users where name= ?";
boolean flag = true;
PreparedStatement pstmt=null;
ResultSet rs = null;
try {
pstmt = DBUtils.getPreparedStatementOfDB(con, sql);
pstmt.setObject(1, name);
//这里要获得结果集,进而判断表中是否存在用户名为name的结果。
rs = DBUtils.getResultSetOfDB(pstmt);
if(rs.next()){
flag = false;
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
//con还要接着在主线程里使用,所以不能关;
DBUtils.closeAll(null, pstmt, rs);
}
return flag;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle
相关文章推荐