Java任务:连接数据库
目录
任务描述:用户登录
如图7-1所示,运用JDBC组件实现用户登录功能;并根据登录成功与否,作出提示。
图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);