实现:点击“登录”以后,到数据库里查用户名是否正确。
我的目前的代码是这样的: if (e.getSource() == ok) {
try{
String url = "jdbc:sqlserver://localhost:1433; DatabaseName=MessageStore";
Connection con;
Statement stmt;
con = DriverManager.getConnection(url, "sa","12345");
String Sql = "select * from UserList where UserName= "+nameText.getText();
ResultSet rs = stmt.executeQuery(Sql);
stmt.close();
con.close();
}
}我这样写是否缺东西啊?我似乎这样写出来,IDE不会报错,但是似乎这个过程直接就被跳过去了,没有验证数据库的过程
请问还应该加入哪些东西?谢谢
我的目前的代码是这样的: if (e.getSource() == ok) {
try{
String url = "jdbc:sqlserver://localhost:1433; DatabaseName=MessageStore";
Connection con;
Statement stmt;
con = DriverManager.getConnection(url, "sa","12345");
String Sql = "select * from UserList where UserName= "+nameText.getText();
ResultSet rs = stmt.executeQuery(Sql);
stmt.close();
con.close();
}
}我这样写是否缺东西啊?我似乎这样写出来,IDE不会报错,但是似乎这个过程直接就被跳过去了,没有验证数据库的过程
请问还应该加入哪些东西?谢谢
解决方案 »
- java代码优化问题
- NetBeans 7 中使用jdk7 的新特性,出现问题
- MANIFEST.MF文件Class-Path:节点需要引入的jar太多怎么解决
- 比较复杂的一个问题。高手进`
- 在演示hibernate练习的时候,我在生成ORM映射的时候,为什么会出现两个POJO类呢?
- 关于DOM的基本概念,谢谢! 100分
- [基础问题]请问怎样从键盘读取一个Int型的数啊(比如999)?
- 请教关于jmf的问题,请大家帮忙!!!我已经搞了好多天了,还是没有解决
- java applet小问题!!!!
- 这本书--《JAVA TCP/IP应用开发详解》如何?
- 求帮助:新手请教2个java的小问题。
- 请教一下,为什么我无法叫醒wait的线程?
IDE里面try{}catch{}抛出异常也是可以判断的。
public class DBConnection {
//数据库驱动
private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
//数据库连接字符串
private static final String URL = "jdbc:sqlserver://localhost:1433;dataBaseName=data";
//数据库帐号
private static final String NAME = "sa";
//数据库密码
private static final String PASS = "sa";
/**
* 得到数据库连接
*/
public Connection getConn() throws ClassNotFoundException,SQLException{
Class.forName(DRIVER); //注册驱动
Connection con = DriverManager.getConnection(URL, NAME, PASS);
return con;
} /**
* 释放资源
*/
public void closeAll(Connection con,PreparedStatement pstmt,ResultSet rs){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pstmt != null){
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con != null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 测试数据库连接
*/
public static void main(String [] args){
DBConnection connection = new DBConnection();
try {
System.out.println(connection.getConn());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
1.信息对了,那让用登陆系统,跳转到系统的主页;
2.信息错误,一般是再次转向登录页面,并对用户弹出提示信息,告诉用户哪儿出现了错误,是用户输入的信息不对,还是执行sql时出现了错误,这些是要告诉用户的
这些加上了,那基本的验证功能才算是实现了但要是在实际的应用中做这个功能,这些代码还不够
1.数据库的操作,如获取连接、获取Statement或PreparedStatement、ResultSet,以及相关对象的关闭等一般是封装到一个Java类里,如3楼的代码,也是通常说的封装一个数据库操作的工具类,当然封装的好与差,这是工作经验的问题了,当然了也不是说一定要封装,这里只是一般的开发习惯,推荐如此
2.sql语句的执行,对其抛出的异常你一定要进行处理,并要将Exception信息在后台打印输出出来,以方便维护人员差错,使用到的相关对象一定要关闭,不管sql是否执行成功,所以应该把它放到finally中去执行,因为获取到的数据对象用完之后不关闭或放回到池中去,时间长了会造成服务器的宕机,而且查起错来相当困难,楼主上面的代码有欠考虑
3.最好不要将你的数据库操作代码与web层的代码放到一起,这样不推荐,不管你是使用struts还是直接servlet来实现都不推荐
4.数据操作执行完毕之后一定要返回一个结果,告诉web层的调用代码,是执行成功了,还是失败了:验证的话一般返回一个boolean值,查数据那就把查到的结果封装到对象里返回或者返回null
5.前台jsp传递过来的参数,一般是封装到一个你自己定义的javabean对象里去的,当然你的参数比较少,直接传过去也没有什么关系,单参数多的话,一个个的写了一遍又一遍,是很麻烦的好了,我暂时就想到就这么多,希望对楼主有所帮助……
1.PreparedStatement它的执行效率要比Statement高
2.使用Statement时,条件查询时,你自己要手动的拼Sql,这是很危险的:(1)会使你的安全验证机制失效而直接进入系统,这是很严重的(2)让你的这个验证程序报错,虽然不影响整个应用的运行,但留着这么一个Bug总是不太好