JDBC访问数据库
目录
JDBC连接数据库的流程
- 加载驱动:提前下载驱动包,加入到项目之中
- 注册驱动:在Java程序中注册要使用的驱动程序。
- 创建连接:通过DriverManager类创建数据库连接对象Connection。
- 创建Statement对象:为执行静态 SQL 语句做准备。
- 调用Statement对象:调用Statement对象的相关方法执行相对应的 SQL 语句。
- 关闭数据库连接
用JDBC实现查询功能
下面通过一个例子来看一下JDBC访问数据库的代码编写方法,该例用于显示所有用户的账号,姓名和城市信息。具体代码如下:
加载指定数据库的驱动程序
Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mysql.com/downloads/connector/j/,解压后得到jar库文件,然后在对应的项目中导入该库文件。
你可以从群邮件里下载MySQL驱动 jar 包:mysql-connector-java-5.1.39-bin.jar
连接MySQL 8.0 时需注意如下问题:https://www.cnblogs.com/null-0/p/9426045.html
导入数据库驱动程序
考试时连不上数据库,多半是这个jar包没加载 !考试时连不上数据库,多半是这个jar包没加载 !考试时连不上数据库,多半是这个jar包没加载 !
配置数据库远程访问
以阿里云主机为例:MySQL远程登陆
创建测试数据
接下来我们在 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 ('liu', '123457'); Query OK, 1 row affected (0.12 sec)
</nowiki>
对客户机授权:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的root用户密码' WITH GRANT OPTION;
windows下MySQL 忘记初始密码:https://www.cnblogs.com/hellojesson/p/5972950.html
连接数据库
package test; import java.sql.*; public class Main3 { //JDBC 驱动名及数据库 URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost:3306/cloud?characterEncoding=utf8"; // 数据库的用户名与密码,需要根据自己的设置 static final String USER = "root"; static final String PASS = "000000"; public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub Connection conn = null; Statement stmt = null; // 注册 JDBC 驱动 Class.forName("com.mysql.jdbc.Driver"); // 打开链接 System.out.println("连接数据库..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); if(conn != null){ System.out.println("MySQL连接成功!"); } } }
参考文档:
[1] http://www.runoob.com/java/java-mysql-connect.html
JDBC核心组件
JDBC API主要位于JDK中的java.sql包中(之后扩展的内容位于javax.sql包中),主要包括:
DriverManager类
主要负责加载各种不同的数据库驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接(Connection)。其常用方法如下:
registerDriver(driver);//注册驱动对象 Connection getConnection(url,user,password);//获取连接对象
Driver接口
驱动程序接口,所有具体的数据库系统厂商要必须实现此接口,形成自己特有的驱动程序包。
装载驱动的语句是Class.forName("驱动类")。
Connection接口
应用程序和数据库的连接,在加载驱动之后,使用url、username、password三个参数,创建和具体数据库系统的连接实例。
例如,获取MySQL连接对象的语句如下:
String url = "jdbc:mysql://localhost:3306/goods"; String user = "root", pwd = "123456"; Connection conn = DriverManager.getConnection(url,user,pwd);
其中,数据库的URL一般由协议名+数据库系统标识+IP地址(域名)+端口+数据库名称组成,用户名和密码是指登录数据库时所使用的用户名和密码。
- Statement接口:用于执行静态的sql语句(单次执行),通过Connection对象创建实例。
Statement stmt=conn.createStatement(); //创建Statement对象
其常用方法如下:
- execute(sql)方法
若sql是查询语句且有结果集则返回true;若是非查询语句或者没有结果集则返回false。例如,boolean flag = stmt.execute(sql);
- executeQuery(sql)方法
执行查询语句,并返回结果集。例如,ResultSet rs = stmt.executeQuery(sql);
- executeUpdate(sql)方法
执行DML语句,并返回影响的记录数。例如,int count = stmt.executeUpdate(sql);
- PreparedStatement接口
是Statement接口的子接口,用于执行预编译sql语句,一般包含动态参数。
- CallableStatement接口
是PreparedStatement接口的子接口,用于执行存储过程。
- ResultSet接口
执行查询SQL语句后返回的结果集,由ResultSet接口接收。
常见的处理方式是遍历或存在性判断(如登录功能)。例如,
String sql = "select * from admin"; ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { out.println(rs.getInt("id")+"," +rs.getString("username") ); }
查询的结果存放在ResultSet对象的行结构中,指针的最初位置在首行之上,可以使用next()方法在行间移动;使用getXXX( )方法取得字段的内容,其参数可以是字段索引(从1开始),也可以是字段名(如getInt(“id”)表示获取当前行内字段名为id的数据,getString(2)表示获取当前行内第2个字段的字符串数据)。
SQLException类
代表在数据库连接的建立、关闭及SQL语句的执行过程中发生的异常。
知识点提炼
- JDBC的核心组件:DriverManager、Connection、Statement、ResultSet
- JDBC连接数据库的步骤:
(1)导入驱动 (2)加载驱动:Class.forName (3)获取连接:Connection (4)构建语句对象:Statement (5)执行SQL语句,并返回结果:ResultSet (6)释放资源:close
返回 Java程序设计