day22 Java语言中的------JDBC连接

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的方法去操作数据库和思想。

时间: 2024-11-08 21:50:55

day22 Java语言中的------JDBC连接的相关文章

在Java语言中调用存储过程、存储函数、包头、包体

需要拷贝连接Oracle的jar包,路径如下图所示: 连接Oracle数据库的代码: package demo.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBCUtils { private static Stri

Java语言中学习数组、运算符、流程控制的一些理解

一.数组 1.数组的概念及作用 数组是相同数据类型的元素的集合:   数组本身是引用数据类型,即对象.但是数组可以存储基本数据类型,也可以存储引用数据类型. 例如: int [] a = new int [] {1,2,3,4,5,6,}; String [] s = new String [] {"小兔","小小兔","小小小兔",} : Employee [] e = Employee [10];(Employee是自定义类). 2.数组的声

PowerBuilder中使用JDBC连接MYSQL 无法使用COUNT(*) MAX() 函数的处理

PowerBuilder中使用JDBC连接MYSQL 遇到的错误: long ll_count // Profile mysql SQLCA.DBMS = "JDBC" SQLCA.LogPass = "123" SQLCA.LogId = "root" SQLCA.AutoCommit = False SQLCA.DBParm = "Driver='com.mysql.jdbc.Driver',URL='jdbc:mysql://lo

Java 语言中的 StringBuffer类 硬伤ING

StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类. 所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入.删除等操作,使用StringBuffer要更加适合一些. 在StringBuffer类中存在很多和String类一样的方法,这些方法在功能上和String类中的功能是完全一样的. 但是有一个最显著的区别在于,

Java语言中反射动态代理接口的解释与演示

Java语言中反射动态代理接口的解释与演示 Java在JDK1.3的时候引入了动态代理机制.可以运用在框架编程与平台编程时候捕获事件.审核数据.日志等功能实现,首先看一下设计模式的UML图解: 当你调用一个接口API时候,实际实现类继承该接口,调用时候经过proxy实现. 在Java中动态代理实现的两个关键接口类与class类分别如下: java.lang.reflect.Proxy java.lang.reflect.InvocationHandler 我们下面就通过InvocationHan

原码、反码、补码相关内容以及Java语言中是以哪一种码表示的

计算机中的数字是以二进制方式存储的,第一个二进制位为符号位,0代表正数,1代表负数 原码.反码.补码是计算机中存储数字使用的编码 1.原码.反码.补码的概念 原码:符号位加上这个数绝对值 例如正整数1的8位二进制原码为 00000001      负整数-1的8为二进制原码为 10000001 反码:正数的反码就是其本身,负数的反码就是在原码的基础上除符号位外所有的位取反 例如正整数1的8位二进制原码为 00000001 则其反码还为 00000001  负整数-1的8为二进制原码为 10000

Java语言中的定义变量、构造函数

day02 Java语言中的定义类.变量.方法.构造函数 一.概述: 在Java语言中,变量的定义和使用时非常常见和重要的:同时对后续的操作变量奠定基础,在这里定义和使用变量就要使用到我们前一节说到的数据类型了,它们两个就是绑定在一起使用的.我们回顾一下前一节学的数据类型. 学完变量以后就要学会使用变量去定义一些东西,去构造我们需要的一些方法来满足学习的需要.从而引申出了构造这一个词汇.构造就是创造的含义,通过创造一些东西来满足.下面就一一的来看一下. 二.定义"类"(class):

Java语言中的----运算符

day05 Java语言中的----运算符 一.运算符概述: 运算符的使用在每一门开发语言中都会使用到,在不同的语言中也会有不同的使用规则.通过运算符我们可以联想到MySQL数据库中的运算符,这些都是差不多的,可能有些在使用上是不一样的.下面就来看看Java中的运算符. 二.运算符: 1.算术运算符: 主要包含:加.减.乘.除.取余(%).自加(++).自减(--) 2.赋值运算符: 就是等号(=) 3.位运算符: 主要包含:&.|.~.^.<<.>>.>>&g

Java语言中使用OpenMP

从去年年中,开始学习Java,主要是维护公司用Java编写的服务器软件.目前,该服务器软件遇到一个问题,在下载大文件时,如果同时下载的用户很多, 服务器软件工作会出现异常,有的用户无法下载.服务器硬件基本上都是多核处理器,所以,如果能在Java语言中使用并行编程技术,使用OpenMP,可能 会提高服务器软件的性能. 今天,测试了一下,Java语言中也可以使用OpenMP.以下是详细测试过程: 1. 下载jomp1.0b.jar https://www2.epcc.ed.ac.uk/computi