day22 Java语言中的------JDBC连接
一、JDBC概述:
“JDBC”就是Java连接数据库,根据数据库的不同建立的连接也有一定的区别。我们主要还是对MySQL数据库进行数据的操作。JDBC架构中主要包含两种:一种是JDBC应用程序层,一种是JDBC驱动程序层。下表是JDBC与各种数据库连接的图示。下面就具体的来了解一下Java与数据库之间的一个关系。
二、JDBC:
在具体开始学习JDBC之前,做好相应的准备工作。在MySQL数据库官网下载好相应的jar包(mysql-connector-java-5.1.24-bin.jar),在MySQL数据库中建立好test数据库,以及一张emp数据表,对数据表做好相应的数据准备。
1、使用JDBC连接数据库的基本步骤:
在Java语言中,我们队数据库的连接使用jdbc技术,一般分为以下几个步骤。
1.1、加载驱动:使用Class.forName("......");
1.2、建立连接:使用DriverManager.getConnection("......");
1.3、创建SQL语句对象。createStatement()
1.4、通过SQL对象调取相应的sql语句执行的方法
具体实例:
//使用JDBC连接数据库
package www.com.c1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBC01 {
/*
* 1、com.mysql.jdbc.Driver。加载驱动,这个是固定语法,根据不同的数据库可以更改。
* 2、jdbc:mysql://。类似于协议
* 3、localhost:3306/。安装数据库的本地主机和端口号。也可以改为IP地址和端口号
* 4、test。数据库名
* 5、?,&。表示所带的参数,和参数之间的连接。
* 6、user。数据库的用户名是什么?
* 7、password。数据库的密码是什么?
*/
//连接方式一
private static final String URL01 =
"jdbc:mysql://localhost:3306/test?user=root&password=123456";
//连接方式二
/*private static final String URL02 ="jdbc:mysql://localhost:3306/test";
private static String user ="root";
private static String password = "123456";
*/
//创建连接的对象
private static Connection connection;
public static void main(String[] args) {
try {
//1、加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2、建立连接,方式一。并创建连接对象。
connection = DriverManager.getConnection(URL01);
/* //建立连接,方式二。
DriverManager.getConnection(URL02, user, password);
*/
//3、创建SQL语句对象。
Statement statement = connection.createStatement();
//一、执行查询语句。
//(1)、只能执行查询的sql语句,并使用resultSet结果集来接收存储查询到的所有结果
ResultSet resultSet = statement.executeQuery("select * from emp");
//(2)、遍历结果集
while (resultSet.next()) {
//输出结果集
System.out.println(
"id:"+resultSet.getInt("id")+";"+
"用户名:"+resultSet.getString("username")+";"+
"密码:"+resultSet.getString("password"));
}
//二、执行更新语句。
//(1)更新数据。注意使用更新操作的时候返回值是int类型,即某行数据是否受影响
int updateCount = statement.executeUpdate(
"update emp set password=888888 where id=2");
//(2)判断是否更新成功。
if (updateCount>0) {
System.out.println("更新成功!");
} else {
System.out.println("更新失败!");
}
//三、执行任意的sql语句。
//返回值:注意返回类型是布尔类型,主要分为两种。
//一般在创建表或创建数据库的时候最适用。
//返回true时:执行的是select语句
//返回false时:执行的是插入、更新、删除、或者是create语句
//if not exists关键字是判断该表是否存在,如果存在就不创建
boolean create = statement.execute(
"create table if not exists test(id int primary key,name varchar(20))");
if (create = true) {
System.out.println("创建成功!");
} else {
System.out.println("创建失败!");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
} 2、通过JDBC连接技术,实现“动态sql”操作数据表。
具体实例:
//JDBC中的使用动态sql查询数据
package www.com.c1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBC02 {
//定义连接数据库字符
private static final String URL =
"jdbc:mysql://localhost:3306/test";
//定义字符接收连接数据
private static Connection connection;
public static void main(String[] args) {
try {
//1、加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2、建立连接
connection = DriverManager.getConnection(URL, "root", "123456");
//3、编译动态sql
PreparedStatement ps = connection.prepareStatement(
"select * from emp where id=? and username=?");
//4、假设用户从页面上传递id和username两个参数,
//并作为查询条件查询数据。★★★★
int id = 2;
String username = "ls";
//5、将用户传递过来的id和username复制到动态sql的?处,作为条件
ps.setInt(1, id);
ps.setString(2, username);
//注意:在这一步复制的时候,1代表第一个问号,2代表第二个问号,
//问号是从小标1开始的,不是0.
//6、使用ps调用executeQuery()方法,
//并将查询到的结果集接收,ResultSet表示结果集
ResultSet resultSet = ps.executeQuery();
//7、输出查询到的结果
while (resultSet.next()) {
System.out.println("ID为:"+resultSet.getInt("id"));
System.out.println("用户名为:"+
resultSet.getString("username"));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e){
e.printStackTrace();
}
}
} 3、使用属性文件和封装sql执行方法来操作数据表。
属性文件:就是将一些不改变的代码写入一个文件中,通过调取这个文件直接就可以实现连接。同时在更改数据库信息的时候就只需要更改属性文件即可。不需要更改指定的代码。
具体实例:
(1)、建立属性文件。
在项目的“SRC”一级目录下新建一个文件。new-->Other-->输入Text file就可以创建了。将相关的属性写入到这个文件中
#连接jdbc的属性文件 driver = com.mysql.jdbc.Driver URL = jdbc:mysql://localhost:3306/test username = root password = 123456
命名为:jdbc.properties文件。
(2)、创建JdbcMethod类。用来封装相应的方法。并连接对应的属性文件。
package www.com.c2;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;
//主要用于封装使用动态sql的所有方法。以及数据库的属性文件连接
//注意:我们再属性文件jdbc.properties中已经将各种属性写好了,我们只需要应用。
public class JdbcMethod {
//1、使用构造函数建立数据库连接:
// 在jdbctest类中是创建该类的对象,
// 我们可以直接通过构造函数来建立连接,因为构造函数是在创建对象的时刻就执行代码。
// 3)定义conn接收连接数据
private Connection connection;
public JdbcMethod(){
// 1)加载属性文件
ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
String driver = bundle.getString("driver");
String url = bundle.getString("URL");
String user = bundle.getString("username");
String password = bundle.getString("password");
try {
// 2)加载驱动
Class.forName(driver);
// 4)建立连接
connection = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
//---------------------------------------------------
//2、写动态sql
// 1)、封装实现insert、update、delete操作
public int excuteUpdate(String sql){
Statement statement;
int count = 0;
try {
//(1):创建sql对象
statement = connection.createStatement();
//(2):执行更新语句
count = statement.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return count;
}
// 2)、封装实现查询语句
public ResultSet excuteQuery(String sql){
Statement statement;
ResultSet rs = null;
try {
//(1):创建sql对象
statement = connection.createStatement();
//(2):执行相关的查询语句
rs = statement.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
//3、使用带多个问号的方式封装动态sql的查询【★★★★★】
/**
* @param sql:是需要执行的查询,可以带问号或者不带问号。
* @param ...:代表不可预估的带问号的个数。
* @param params:在sql中需要的参数
* @return 【执行查询】
*/
public ResultSet excuteQuery(String sql , Object ... params ){
PreparedStatement preparedStatement;
ResultSet resultSet = null;
try {
//调取执行sql的方法,
preparedStatement = connection.prepareStatement(sql);
//判断sql语句中是否带有?。
if (params != null && params.length > 0){
//如果有就对问号进行赋值
for (int i = 0; i < params.length; i++) {
preparedStatement.setObject(i+1 , params[i] );
}
}
resultSet = preparedStatement.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return resultSet;
}
}(3)、新建一个JdbcTest类,带有主函数。
package www.com.c2;
import java.sql.ResultSet;
//主要调取封装的动态sql的方法,
public class JdbcTest {
public static void main(String[] args) {
JdbcMethod jdbcMethod = new JdbcMethod();
//创建相应的sql语句去操作数据表。
int inser = jdbcMethod.excuteUpdate("insert into emp values()");
int update = jdbcMethod.excuteUpdate("update emp set where");
int delete = jdbcMethod.excuteUpdate("delete from emp where....");
//2、执行查询语句、返回的是结果集
ResultSet resultSet = jdbcMethod.excuteQuery("select* from emp where ");
}
}四、结束语
到这里我们就把JDBC的一些常用的方法说完了,记住,连接数据库无须就对表中数据的增删改查。一定要掌握使用动态sql的方法去操作数据库和思想。
本文出自 “程序猿” 博客,转载请与作者联系!
原文地址:http://dzx123.blog.51cto.com/13270347/1983207