Java任务:连接数据库

来自CloudWiki
跳转至: 导航搜索

任务描述:用户登录

如图7-1所示,运用JDBC组件实现用户登录功能;并根据登录成功与否,作出提示。

Java7-1.png

图7-1 用户登录

任务实现

加载指定数据库的驱动程序

Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mysql.com/downloads/connector/j/,解压后得到jar库文件,然后在对应的项目中导入该库文件。

你可以从群邮件里下载MySQL驱动 jar 包:mysql-connector-java-5.1.39-bin.jar

导入数据库驱动程序

具体参见 Eclipse导入数据库驱动程序

创建测试数据

接下来我们在 MySQL 中创建 cloud 数据库,并创建 user 数据表,表结构如下:

mysql> create database cloud;
    
Query OK, 1 row affected (0.00 sec)

mysql> use cloud;
Database changed
mysql>  CREATE TABLE IF NOT EXISTS `user`(
   `id` INT UNSIGNED AUTO_INCREMENT,
   `name` VARCHAR(100) NOT NULL,
   `password` VARCHAR(40) NOT NULL,
   PRIMARY KEY ( `id` )  
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql>  CREATE UNIQUE INDEX uname on user(name);
Query OK, 0 rows affected (0.25 sec)
Records: 0  Duplicates: 0  Warnings: 0

插入一些数据:

mysql> INSERT INTO `user` (name,password) VALUES ('ma', '123456');
Query OK, 1 row affected (0.12 sec)

mysql> INSERT INTO `user` (name,password) VALUES ('ma', '123457');
ERROR 1062 (23000): Duplicate entry 'ma' for key 2

</nowiki>

建立连接的函数

代码:

private static Connection getConn() {
    	// JDBC 驱动名及数据库 URL
       final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
       final String DB_URL = "jdbc:mysql://localhost:3306/cloud?characterEncoding=utf8";
     
        // 数据库的用户名与密码,需要根据自己的设置
       final String USER = "root";
       final String PASS = "000000";
       
    	Connection conn = null;       
        try {
            Class.forName(JDBC_DRIVER); //classLoader,加载对应驱动
            conn = (Connection) DriverManager.getConnection(DB_URL, USER, PASS);
            System.out.println("MySQL连接成功!");
        } catch (ClassNotFoundException e) {
        	System.out.println(e.getMessage());
        } catch (SQLException e) {
        	System.out.println(e.getMessage());
        }
        return conn;
}

执行查询的函数

 public static void verify(String username, String password) {
    	try { 
    		Connection con = getConn();
    		Statement stmt = null;  
    		ResultSet rs = null;       
    		stmt = con.createStatement();
    		String sql = "SELECT * FROM user WHERE " + "name='" + username + 
                   "' and password='" + password + "'";
    		rs = stmt.executeQuery(sql);
    		if(rs.next()) { 
    			System.out.println("欢迎" + rs.getString("name"));
    		} else {  
    			System.out.println("用户名或密码错误!"); 
    		}
                con.close();
    	 }	catch (SQLException e) {
             	System.out.println(e.getMessage());
         }
    }
   

主类中调用函数

public static void main(String[] args) {
    	getConn();
       verify(""ma","123456");
        System.out.println("Goodbye!");
    }

SQL语句

Statement接口 用于执行静态的sql语句(单次执行),通过 Connection对象创建实例。

例如: Statementstmt=conn.createStatement();//创建Statement对象 其常用方法如下:

executeQuery(sql)方法

executeQuery(sql)方法 执行查询语句,并返回结果集。例如: ResultSetrs= stmt.executeQuery(sql);

用于产生单个结果集(ResultSet)的语句,例如:被执行最多的SELECT 语句。

这个方法被用来执行 SELECT 语句,但也只能执行查询语句,执行后返回代表查询结果的ResultSet对象。


try {
	    	   // Connection conn = getConn();
	    		Statement stmt = null;  
	    		ResultSet rs = null;       
	    		stmt = conn.createStatement();
	    		String sql = "SELECT * FROM user ";
	    		rs = stmt.executeQuery(sql);
	    		int col = rs.getMetaData().getColumnCount();//获取字段数
	          System.out.println("============================");
	          while (rs.next()) {
	              for (int i = 1; i <= col; i++) {
	                  System.out.print(rs.getString(i) + "\t");
	                  
	               }
	              System.out.println("");
	          }
	          System.out.println("============================");
	    		
	            //conn.close();
	        } catch (SQLException e) {
	        	System.out.println(e.getMessage());
	        }

executeUpdate(sql)方法

executeUpdate(sql)方法 执行 DML语句,并返回影响的记录数。例如: intcount= stmt.executeUpdate(sql);

用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。

INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。

executeUpdate 的返回值是一个整数(int),指示受影响的行数(即更新计数) 。 对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。

try {
        	//Connection conn = getConn();     
        	Statement stmt = null; 
    		     
    		stmt = conn.createStatement();
    		//INSERT INTO `user` (name,password) VALUES ('ma', '123456');
    		String sql = "INSERT INTO `user` (name,password) VALUES ('" + user.getName() + 
                   "', '"+user.getPwd()+"')";
    		int i=stmt.executeUpdate(sql);
    		System.out.println(i+"行");
    		//conn.close();
        } catch (SQLException e) {
        	System.out.println(e.getMessage());
        }

execute(sql)方法

execute(sql)方法 若sql是查询语句且有结果集,则返回true;若是非查询语句或者没有结果集,则返回 false。例如: booleanflag= stmt.execute(sql);