标签:
1、JDBC的概念
JDBC:Java Database Connection,表示数据库连接(任何数据库都支持JDBC的连接),是一个独立于特定数据库管理系统、通用的sql数据库存取和操作的公共接口。它是java中专门提供的一组用于操作数据库的标准,所有的数据库生产商如果要是想为java提供支持,则必须支持此标准。既然是标准的话,所以说JDBC实际上是一套访问数据库的接口。
2、常用操作类/接口
Connection接口、Statement接口、PreapredStatement接口、ResultSet接口、CallableStatement接口、DriverManager类。
3、JDBC应用步骤
二、驱动程序下载:
根据上一段的定义,我们明白了,java定义JDBC接口,数据库来实现这个接口。不同的厂商对JDBC有不同的实现,所以厂商要提供自己数据库的驱动,让应用程序来访问。而应用程序则只通过自己的一套JDBC接口来访问就行了,然后驱动程序来实现这个接口,从而让驱动来调用数据库。所以我们终于明白了这句话:驱动程序由数据库提供商提供下载。
在Java中,驱动程序是以jar包的形式提供的,MySQL驱动程序的下载地址:http://dev.mysql.com/downloads/
上图中,选择“Connector/J”的版本进行下载,弹出下一个界面,让我们选择平台来下载:如果选择windows平台,界面如下:
如果选择跨平台,界面会变成下面的这个样子:
上图中,第一个版本是Linux平台的压缩包,第二个是Windows平台中的压缩包,那我们选择上图中的红框部分进行下载:
上图中,不用注册,直接下载。下载完成后,解压:
上图中,红框部分的mysql-connector-java-5.1.33-bin.jar就是我们所需要的包。
三、JDBC实现简单增删改操作
1、JDBC操作前的准备工作:
首先创建数据库表:person。字段:id,name,age,description。建表的命令如下:
CREATE TABLE person(
id int primary key auto_increment,
name varchar(20),
age int(2),
description varchar(100)
);
创建的空表如下:
紧接着导入数据库驱动包:
打开eclipse,新建Java工程JDBC01,然后在根目录下新建一个文件夹libs:
然后复制之前下载的驱动包mysql-connector-java-5.1.33-bin.jar,粘贴到libs目录下,然后到了最关键的一步:将该Java包添加到工程的Build path中,操作如下图:
如果生效之后,就会多出一个文件出来:(下图中的箭头处)
2、实现插入操作:
步骤如下:
注:这个步骤是通俗的用法,可以当做模板来用。我们来举个例子。
在工程文件中新建一个java类,作为主程序:
JdbcTest.java完整版代码如下:(注释很详细)
1 package com.vae.jdbc;
2
3 import java.sql.Connection;
4 import java.sql.DriverManager;
5 import java.sql.SQLException;
6 import java.sql.Statement;
7
8 public class JdbcTest {
9
10 /**
11 * @param args
12 */
13
14 //数据库连接地址
15 private final static String URL = "jdbc:mysql://localhost:3306/mydb_2";
16 //用户名
17 public final static String USERNAME = "root";
18 //密码
19 public final static String PASSWORD = "smyh";
20 //加载的驱动程序类(这个类就在我们导入的jar包中)
21 public final static String DRIVER = "com.mysql.jdbc.Driver";
22
23 public static void main(String[] args) {
24 // TODO Auto-generated method stub
25 insert();
26 }
27
28
29 //方法:插入数据
30 public static void insert(){
31 try {
32 //1、加载数据库驱动程序
33 Class.forName(DRIVER);
34
35 //2、获取数据库连接
36 Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
37
38 //3、构造SQL语句(插入具体的数据)
39 String sql = "insert into person(name,age,description)values(‘生命壹号‘,22,‘学到哪里,我的博客就写到哪里‘)";
40
41 //4、构造一个Statement实例(用来发送SQL语句的载体)
42 Statement state = connection.createStatement();
43
44 //5、执行SQL语句(其实是向数据库中发送sql语句)
45 state.executeUpdate(sql);
46
47 //6、关闭连接(释放资源)
48 state.close();
49 connection.close();
50
51 System.out.println("insert success");
52
53
54 } catch (ClassNotFoundException e) {
55 e.printStackTrace();
56 } catch (SQLException e) {
57 e.printStackTrace();
58 }
59
60 }
61
62 }
注意程序在导包时,导入的是下面的这些包:
代码解释:
15行的url代表连接接数据库的地址。命名格式统一如下:url = "jdbc:mysql://ip地址:端口号/数据库名字"。如果是本机的话,IP地址可以写成localhost。
17行、19行:指的是数据库的用户名和密码。如果输入错误,会报错如下:
21行:我们所加载的驱动程序类的名字是:com.mysql.jdbc.Driver,其实它就指的就是jar包中的com.mysql/jdbc/Driver.class文件。
程序运行成功后,后台会输出:
我们再去数据库看一下,发现数据真的填充进去了:
终于实现了Java代码与数据库之间的联系,任务完成。
3、实现更新操作:
和上面的插入操作相比,只是sql语句不一样而已(因为插入数据和更新数据其实都是更新嘛)
步骤如下:
更新操作的方法如下:(代码解释请参照上面的代码就懂了)
1 //方法:更新数据
2 public static void update(){
3 try {
4 Class.forName(DRIVER);
5 Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
6 String sql = "update person set age=24 where id=1";
7 Statement state = connection.createStatement();
8 state.executeUpdate(sql);
9 state.close();
10 connection.close();
11 System.out.println("update success");
12 } catch (ClassNotFoundException e) {
13 e.printStackTrace();
14 } catch (SQLException e) {
15 e.printStackTrace();
16 }
17 }
核心代码是第6行,我们将之前的22岁改为24岁。程序运行后,数据库里也会对应的进行更新。
4、实现删除操作
同样的道理,和上面的插入操作相比,只是sql语句不一样而已(因为插入数据、更新数据、删除数据其实都是更新嘛)
删除操作的方法如下:
1 //方法:删除操作
2 public static void delete(){
3 try {
4 Class.forName(DRIVER);
5 Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
6 String sql = "delete from person where id=1";
7 Statement state = connection.createStatement();
8 state.executeUpdate(sql);
9 state.close();
10 connection.close();
11 System.out.println("delete success");
12 } catch (ClassNotFoundException e) {
13 e.printStackTrace();
14 } catch (SQLException e) {
15 e.printStackTrace();
16 }
17 }
核心代码是第06行和第08行。
5、代码优化(写成工具类):将字段换成变量
我们上面的增删该的操作都是直接在sql里面放入具体的参数,但是有可能这种参数是外面传进来的,所以一种更方便的写法是把参数换成变量,我们以插入操作为例:
1 //方法:插入数据(代码优化)
2 public static void insert2(){
3 String name = "生命贰号";
4 int age = 22;
5 String description = "哈哈,我是优化之后的代码哦";
6 try {
7 Class.forName(DRIVER);
8 Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
9 //拼接SQL语句
10 String sql = "insert into person(name,age,description)values(‘"+name+"‘,"+age+",‘"+description+"‘)"; //注意拼接的格式
11 Statement state = connection.createStatement();
12 state.executeUpdate(sql);
13 state.close();
14 connection.close();
15 System.out.println("success.");
16
17
18 } catch (ClassNotFoundException e) {
19 e.printStackTrace();
20 } catch (SQLException e) {
21 e.printStackTrace();
22 }
23
24 }
核心代码是第10行,这里的sql语句是以变量的形式出现的,符合工具类的特性,注意它拼接的格式哦~~~来把它拆开再仔细瞧一瞧:
String sql = "insert into person(name,age,description)values(‘ "+name+" ‘, "+age+", ‘ "+description+" ‘)";
运行之后,效果如下:
其实这种拼接的方式很不好:既麻烦又不安全。数据库的查询操作以及详细解释将在下篇文章中学习到,加油!!!
哦,对了,最后再贴一下上方所有代码的完整版:
1 package com.vae.jdbc;
2
3 import java.sql.Connection;
4 import java.sql.DriverManager;
5 import java.sql.SQLException;
6 import java.sql.Statement;
7
8 public class JdbcTest {
9
10 /**
11 * @param args
12 */
13
14 //数据库连接地址
15 private final static String URL = "jdbc:mysql://localhost:3306/mydb_2";
16 //用户名
17 public final static String USERNAME = "root";
18 //密码
19 public final static String PASSWORD = "smyh";
20 //加载的驱动程序类(这个类就在我们导入的jar包中)
21 public final static String DRIVER = "com.mysql.jdbc.Driver";
22
23 public static void main(String[] args) {
24 // TODO Auto-generated method stub
25 insert();
26 //update();
27 //delete();
28 //insert2();
29 }
30
31
32 //方法:插入数据
33 public static void insert(){
34 try {
35 //1、加载数据库驱动程序
36 Class.forName(DRIVER);
37
38 //2、获取数据库连接
39 Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
40
41 //3、构造SQL语句(插入具体的数据)
42 String sql = "insert into person(name,age,description)values(‘生命壹号‘,22,‘学到哪里,我的博客就写到哪里‘)";
43
44 //4、构造一个Statement实例(用来发送SQL语句的载体)
45 Statement state = connection.createStatement();
46
47 //5、执行SQL语句(其实是向数据库中发送sql语句)
48 state.executeUpdate(sql);
49
50 //6、关闭连接(释放资源)
51 state.close();
52 connection.close();
53
54 System.out.println("insert success");
55
56
57 } catch (ClassNotFoundException e) {
58 e.printStackTrace();
59 } catch (SQLException e) {
60 e.printStackTrace();
61 }
62
63 }
64
65
66 //方法:插入数据(代码优化)
67 public static void insert2(){
68 String name = "生命贰号";
69 int age = 22;
70 String description = "哈哈,我是优化之后的代码哦";
71 try {
72 Class.forName(DRIVER);
73 Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
74 //拼接SQL语句
75 String sql = "insert into person(name,age,description)values(‘"+name+"‘,"+age+",‘"+description+"‘)"; //注意拼接的格式
76 Statement state = connection.createStatement();
77 state.executeUpdate(sql);
78 state.close();
79 connection.close();
80 System.out.println("success.");
81
82
83 } catch (ClassNotFoundException e) {
84 e.printStackTrace();
85 } catch (SQLException e) {
86 e.printStackTrace();
87 }
88
89 }
90
91
92 //方法:更新数据
93 public static void update(){
94 try {
95 Class.forName(DRIVER);
96 Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
97 String sql = "update person set age=24 where id=1";
98 Statement state = connection.createStatement();
99 state.executeUpdate(sql);
100 state.close();
101 connection.close();
102 System.out.println("update success");
103 } catch (ClassNotFoundException e) {
104 e.printStackTrace();
105 } catch (SQLException e) {
106 e.printStackTrace();
107 }
108 }
109
110
111 //方法:删除操作
112 public static void delete(){
113 try {
114 Class.forName(DRIVER);
115 Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
116 String sql = "delete from person where id=1";
117 Statement state = connection.createStatement();
118 state.executeUpdate(sql);
119 state.close();
120 connection.close();
121 System.out.println("delete success");
122 } catch (ClassNotFoundException e) {
123 e.printStackTrace();
124 } catch (SQLException e) {
125 e.printStackTrace();
126 }
127 }
128
129 }
标签:
原文地址:http://www.cnblogs.com/timdes/p/4796092.html