- 导 jar 包: 驱动!! mysql 对应的是 `mysql-connector-java` - 加载驱动类: `Class.forName('类名');` - 给出 url, username, password; - 使用 DriverManager 类获得 Connection 对象. - 须要声明两个异常: `ClassNotFoundException` 和 `SQLException`.
public class Demo{ /* * 链接数据库, 获得 Connection 对象 * 对数据库进行增, 删, 改 * */ public void fun() throws ClassNotFoundException, SQLException{ // 加载驱动类(注册驱动) Class.forName("com.mysql.jdbc.Driver"); /* * 与下面代码等同 * com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver(); * DriverManager.registerDriver(driver); * * 每种数据库的驱动都须要实现 java.sql.Driver 接口. * Class.forName 用来加载一个类,在加载类的过程当中, 会执行该类的静态代码块. * 全部的 java.sql.Driver 实现类, 都提供了静态代码块, 块内的代码就是把 * 本身注册到 DriverManager 中. * * jdbc 4.0 以后, 每一个驱动 jar 包中, 在 META-INF/services 目录下提供了 * 一个名为 java.sql.Driver 的文件, 文件的内容就是 java.sql.Driver 的实现类名称. * */ // jdbc 协议的格式, jdbc:厂商的名称:子协议(由厂商本身来规定) // 对 MySql 而言, 它的子协议结构: //主机:端口号/数据库名称 String url = "jdbc:mysql://localhost:3306/mydb1"; // 数据库用户名和密码 String username = "root"; String password = "root"; // 使用 DriverManager, 获得 Connection. 须要导入 java.sql.Connection 包 Connection con = DriverManager.getConnection(url,username,password); /* * 对数据库作增, 删, 改 * 1. 经过 Connection 对象获得 Statement 对象, 它的功能是向数据库发送 sql 语句. * 2. 调用它的 int executeUpdate(String sql), 发送 DML, DDL 语句. */ // java.sql.Statement 包 Statement stmt = con.createStatement(); // 向数据库中添加数据 String sql = "INSERT INTO stu VALUES(1113,'zhangsan',24,'male')"; // 返回值为 int 类型, 表示 sql 语句所影响的行数 int r = stmt.executeUpdate(sql); /* * 执行查询 * 1. 获得 Connection 对象 * 2. 获得 Statement 对象,发送 select 语句 * 调用 Statement 对象的 ResultSet rs = stmt.executeQuery(String querySql); * 3. 对查询返回的"表格"进行解析! * 返回的"表格" rs, 有两个虚拟的位置: beforeFirst, afterLast * rs 的内部有一个行光标, 默认位置为 beforeFirst. * ResultSet 的 next() 方法能够把光标向下移动一行. * next() 返回 boolean 类型的值, 表示当前行是否存在. * ResultSet 提供了一系列的 getXxxx() 方法, 获取某一列中的数据. * 其中, getString() 和 getObject() 两个方法较为经常使用. * JavaSE java.sql.ResultSet 包 */ // 查询 t_stu 表格 String sql2 = "SELECT * FROM t_stu"; ResultSet rs = stmt.executeQuery(sql2); // 解析"表格" while(rs.next()){ String name = rs.getString("sname"); int age = rs.getInt("age"); String gender = rs.getString("gender"); System.out.println(name+','+age+','+gender); } /* * 若是不知道列的内容, 还可使用下面的方法获取 * * 获取列数 * int count = rs.getMetaData().getColumnCount(); * while(rs.next()){ * for(int i=1; i<=count; i++){ * 获取列中的数据 * System.out.print(rs.getObject(i)); * 若是不是一行结尾, 则在每一个列后面加逗号 * if(i<count){ * System.out.print(", "); * } * } * 每一行以后, 换行 * System.out.println(); * } */ // 关闭资源 // 倒关: 先获得的对象后关闭, 后获得的对象先关闭. rs.close(); stmt.close(); con.close(); // 这个东西必须关闭!! } }
public void query(){ Connection con = null; Statement stmt = null; ResultSet rs = null; try{ con = DriverManager.getConnection(); stmt = con.createStatement(); String sql = "SELECT * FROM user"; rs = stmt.executeQuery(sql); while(rs.next()){ String username = rs.getString(1); // 获取第一列的值, 参数为列编号或列名 String password = rs.getString(2); // 获取第二列的值 System.out.println(username+","+password); } } catch(Exception e){ throw new RuntimeException(e); } finally{ try{ if(rs != null) rs.close(); if(stmt != null) stmt.close(); if(con != null) con.close(); } catch(SQLException e){ throw new RuntimeException(e); } } }
1. DriverManagerjava
2. Connection 对象mysql
Statement stmt = con.createStatement();
3. Statement 对象sql
int executeUpdate(String sql);
执行更新操做, 即执行 insert, update, delete 语句.ResultSet executeQuery(String sql);
执行查询操做, 返回 ResultSet.boolean execute();
能够用来执行增, 删, 改, 查全部 SQL 语句. 返回的是 boolean 类型,4. ResultSet 之滚动结果集数据库
next()
方法来移动光标.5. 获取列相关的内容服务器
rs.getMetaData();
返回值为 ResultSetMetaData();int getColumnCount();
String getColumnName(int colIndex);
PreparedStatement prepareStatement(String sql模板);
// 示例:查询表中的姓名为张三, 年龄为24 的详细信息 // 给出 SQL 模板 String sql = "SELECT * FROM t_user WHERE username=? AND age=?"; // 获取 PreparedStatement 对象, 注意 con.prepareStatement, 为 prepare PreparedStatement pstmt = con.prepareStatement(sql); // 为参数赋值 pstmt.setString(1,"张三"); // 给第一个问号赋值, 值为 "张三" pstmt.setInt(2,24); // 给第二个问号赋值, 值为 24, 不须要使用引号. // 向数据库发送查询语句 ResultSet rs = pstmt.executeQuery();
参考资料:ide