JDBC——java操作数据库的一系列接口

一、JDBC概述(mysql)

1、Java DataBase Connective

1)概念:JDBC其实就是一套Java操作数据库的规范(接口);

2)数据库驱动:

各个数据库厂商要让java语言去操作数据库就必须实现这套接口,每个数据库都写有一套实现类叫数据库驱动。

3)使用:

//导入mysql数据库jar包

//将jar放在lib目录下 右键add--->builderpath

//加载驱动

Class.forName("com.mysql.jdbc.Driver");

//获取一个数据库连接对象

String url = "jdbc:mysql://localhost:3306/mydb_01";//主协议:子协议://ip:端口号/数据库名

String user = "root";

String password = "root";

Connection conn = DriverManager.getConnection(url, user, password);

//获取操作对象

Statement stat = conn.createStatement();

//执行sequel语句

String sql = "sql的增删改查语句";

ResultSet set = stat.executeQuery(sql); //查 返回的是一个结果集合

//set.next() set.getString("username");

int  i = stat.executeUpdate(sql); //增、删、改 返回值i影响的行数 为0修改失败

boolean b = stat.execute(sql); //所有

//处理结果,释放资源

stat.close();

conn.close();

4)sql注入:

通过一些特殊的字符串拼接,绕过数据库的检验;

例:

select * from login where username = ‘1‘ or ‘1‘=‘1‘ and password = ‘1‘ or ‘1‘=‘1‘;

改进:

Connection conn = DriverManager.getConnection(url, user, password);

String sql = "select * from login where username=? and password=?";

//获取预编译操作对象 取代获取操作对象

PreparedStatement statement = conn.prepareStatement(sql);

//给?号赋值 问号从1开始数

String username="1‘ or ‘1‘=‘1";

String password="1‘ or ‘1‘=‘1";

statement.setString(1, username);

statement.setString(2, password);

ResultSet resultSet = statement.executeQuery();

conn.close();

statement.close();

resultSet.close();

5)调用储存过程

CallableStatement stat = conn.prepareCall("call 储存过程名");

stat.executeUpdate();

2、事务

1)概念:是指一组最小逻辑操作单元,里面有多个操作组成。组成事务的每一部分必须要同时提交成功,如果有一个操作失败,整个操作就回滚。

//简便的说就是 一件事情独立的单元 要么同时成功,要么同时失败

2)ACID特性

原子性(Atomicity):最小逻辑操作单元

一致性(Consistency):过程中,数据处于一致状态

隔离性(Isolation):多个并发事务之间要相互隔离

持久性(Durability):对数据库中数据的改变就是永久性的

3)事务的使用

                //JDBCUtil 自己写的简易的连接数据库的工具类
		import java.sql.Connection;
		import java.sql.DriverManager;
		import java.sql.ResultSet;
		import com.mysql.jdbc.Statement;

		public class JDBCUtil {
			private static String url = null;
			private static String username = null;
			private static String password = null;
			static{	//提前加载驱动
				try {
					Class.forName("com.mysql.jdbc.Driver");
					url = "jdbc:mysql://localhost:3306/mydb_01";
					username = "root";
					password = "root";
				} catch (ClassNotFoundException e) {
					e.printStackTrace();
				}
			}
			private JDBCUtil() {
				super();
			}
			public static Connection getConnection() throws Exception{
				Connection conn = DriverManager.getConnection(url, username, password);
				return conn;
			}
			public static void close(Connection conn,Statement stat,ResultSet resultSet) throws Exception{
				if(conn != null){
					conn.close();
				}
				if(stat != null){
					stat.close();
				}
				if(resultSet != null){
					resultSet.close();
				}
			}
			public static void close(Connection conn,Statement stat) throws Exception{
				if(conn != null){
					conn.close();
				}
				if(stat != null){
					stat.close();
				}
			}
		}
                import java.sql.Connection;
		import java.sql.PreparedStatement;
		import java.sql.SQLException;
		import java.sql.Savepoint;
		import org.westos.util.JDBCUtil;
		import com.mysql.jdbc.Statement;

		public class Shiwu {
			public static void main(String[] args) {
				Savepoint point = null;
				Connection conn = null;
				PreparedStatement stat1 = null;
				PreparedStatement stat2 = null;
				PreparedStatement stat3 = null;
				PreparedStatement stat4 = null;
				try {
					conn = JDBCUtil.getConnection();
					String sql1 = "update bank set money=money-100 where name=‘qwe‘";
					String sql2 = "update bank set money=money+100 where name=‘asd‘";
					//开启事务
					conn.setAutoCommit(false);
						// 为 true 表示启用自动提交模式;为 false 表示禁用自动提交模式
					stat1 = conn.prepareStatement(sql1);
					stat2 = conn.prepareStatement(sql2);
					stat1.executeUpdate();
					stat2.executeUpdate();
					//设置回滚点
					point = conn.setSavepoint();
					String sql3 = "update bank set money=money-1000 where name=‘qwe‘";
					String sql4 = "update bank set money=money+1000 where name=‘asd‘";
					stat3 = conn.prepareStatement(sql3);
					stat4 = conn.prepareStatement(sql4);
					stat3.executeUpdate();
					System.out.println(1/0);
					stat4.executeUpdate();
				} catch (Exception e) {
					//一旦异常 回滚
					try {
		//				conn.rollback(); //回滚到最初状态-->开启事务
						conn.rollback(point);	//回滚到回滚点
					} catch (SQLException e1) {
						e1.printStackTrace();
					}
				}finally{
					//提交事务	将事务中的系列操作提交给数据库
					try {
						conn.commit();
					} catch (SQLException e) {
						e.printStackTrace();
					}
					try {
						JDBCUtil.close(conn, (Statement) stat1);
						JDBCUtil.close(null, (Statement) stat2);
						JDBCUtil.close(null, (Statement) stat3);
						JDBCUtil.close(null, (Statement) stat4);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		}	

二、数据库连接池产品 ———— 连接数据库的第三方jar包

1、DBCP

阿帕奇基金组织产品、高效的管理连接对象,需要导入DBCP两个jar包

1)硬编码的使用方式(不推荐)

//创建连接池对象

BasicDataSource ds = new BasicDataSource();

//设置参数

ds.setDriverClassName("com.mysql.jdbc.Driver");

ds.setUrl("jdbc:mysql:///mydemo");

ds.setUsername("root");

ds.setPassword("root");

//获取预编译对象

Connection conn = ds.getConnection();

String sql = "sql语句";

PreparedStatement statement = conn.prepareStatement(sql);

//执行 关闭资源

2)配置文件的使用方式

//dbcp.properties配置文件

#连接基本设置

driverClassName=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/mydemo

username=root

password=123456

#<!--扩展配置 了解-->

//使用

//创建属性集合类对象

Properties properties = new Properties();

//将dbcp.properties文本中的数据读取到Properties中

properties.load(new FileInputStream("src/dbcp.properties"));

//创建连接池对象

DataSource ds = BasicDataSourceFactory.createDataSource(properties);

//获取预编译对象

Connection conn = ds.getConnection();

String sql = "sql语句";

PreparedStatement statement = conn.prepareStatement(sql);

//执行 关闭资源

2、C3P0 —— 需要导入C3P0jar包

1)硬编码格式

//创建连接池对象

ComboPooledDataSource ds = new ComboPooledDataSource();

//设置参数

ds.setJdbcUrl("");

ds.setDriverClass("");

ds.setUser("");

ds.setPassword("");

//获取预编译对象

Connection conn = ds.getConnection();

PreparedStatement statement = conn.prepareStatement("");

//执行 关闭资源

2)使用配置文件

//要求

a:配置文件的文件名和后缀名固定的 c3p0.properties/c3p0-config.xml

b:配置文件必须放在src目录下

//c3p0.properties配置文件

c3p0.driverClass=com.mysql.jdbc.Driver

c3p0.jdbcUrl=jdbc:mysql:///mydemo

c3p0.user=root

c3p0.password=123456

//c3p0-config.xml配置文件多了个命名的配置

<named-config name="PZWJ">

//使用

ComboPooledDataSource ds = new ComboPooledDataSource("PZWJ");//也可以不写"PZWJ"

Connection conn = ds.getConnection();

//后续一系列操作

3、DBUtils

阿帕奇基金组织出品,封装操作对象的增删改查,需要配合C3P0使用,导入C3P0 jar包和DBUtils jar包

//当然C3P0的配置文件也需要拷进来

1)使用

//创建对象

ComboPooledDataSource ds = new ComboPooledDataSource();

QueryRunner runner = new QueryRunner(ds);

//执行sql语句

String sql = "insert into user values(4,‘qwe‘)";

runner.update(sql); //执行增删改操作

2)查询操作

String sql = "select * from user";

List<User> list = runner.query(sql, new BeanListHandler<>(User.class));

//需要写一个javabean,User类来封装查询到的信息,将信息封装好后存到List集合中

//通过增强for()循环变量User

for(User u : list){

syso(u);

}

时间: 2024-10-19 00:56:36

JDBC——java操作数据库的一系列接口的相关文章

java操作数据库出现(][SQLServer 2000 Driver for JDBC]Error establishing socket.)的问题所在即解决办法

在进行jdbc直接操作数据库时    : 我们需要对该工程进行一次导包(引入"msbase.jar" "mssqlserver.jar" "msutil.jar"  这三个包,具体的做法为  )                         用手标选中我们要导入包的项目,点击右键出现了一些列的列表,选中 Properties ,继而在该面板中选中Java Bukid Path,然后再选中 Add External Jars ,最后选中我们要导入

java操作数据库的3中基本方式

//jdbc提取出来的工具类 package utils; import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.u

java 操作数据库clob类型大字段

java 操作数据库clob类型大字段,处理工具类如下: package org.shefron.utils; import java.io.StringReader; import java.sql.Clob; import java.sql.PreparedStatement; import java.sql.SQLException; public class ClobUtils { public final static String getValueFromClob(Clob clob

java操作数据库增删改查的小工具--TxQueryRunner

在java程序中,一般使用jdbc连接数据库,比较麻烦,在看传智教程时学了一个工具类,用于简化与数据库之间的操作步骤,就是TxQueryRunner,他是QueryRunner的子类,用起来和他是一样的,特点是支持事务,使用时需要导入几个jar包,分别是 : 这个工具类的优点基本上就是阿帕奇出的DBUtils框架里边所具有的特点,极大简化操作者的代码量,底层使用c3p0连接池,可以方便的吧数据库查询出来的结果映射到JavaBean,List,Map等中,以下是笔记及代码: import java

Java操作数据库实现&quot;增删改查&quot;

本文主要讲解JDBC操作数据库    主要实现对MySql数据库的"增删改查" 综合概述: JDBC的常用类和接口 一   DriverManager类 DriverManage类用来管理数据库中的所有驱动程序,是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动之间建立连接,DriverManager类中的方法都是静态方法,下列是DriverManager的常用方法: getConnection(String URL,String user,String

用Java操作数据库Datetime数据

Date.Calendar.Timestamp的区别.相互转换与使用 1 Java.util.Date 包含年.月.日.时.分.秒信息. 1 // String转换为Date 2 String dateStr="2013-8-13 23:23:23"; 3 String pattern="yyyy-MM-dd HH:mm:ss"; 4 DateFormate dateFormat=new SimpleDateFormat(pattern); 5 Date date=

java操作数据库:分页查询

直接上.... 还是用之前的goods表,增加了一些数据 1.实体类Goods // 封装数据 public class Goods { private int gid; private String gname; private String gprice; private String gdate; public int getGid() { return gid; } public void setGid(int gid) { this.gid = gid; } public String

java操作数据库的基本方法

此次开发工具为eclipse,才有的数据库驱动是mysql-connector-java-5.1.8-bin.jar 第一步,在eclipse的工程目录中引用mysql驱动 驱动下载地址:https://dev.mysql.com/downloads/connector/j/ 选择build path 然后选择configure build path 再选择libraries,选择add external library,找到之前下的数据库驱动,确认,ok 然后下一段测试代码将数据库驱动起来 p

JDBC连接-操作数据库

JDBC连接数据库的操作步骤 *条件:先启动mysql,然后创建新连接.这里我用Navicat工具来操作数据库. 前面是创建数据库,以及授权的问题.然后打开eclipse 这里我整理一下 抛出的两个异常的错误原因: ClassNotFoundException: 1.没导入jar包 2.驱动类名称写错了 SQLException: 1.mysql是否启动 2.url,账号.密码参数是否正确 3.URL:数据库名;IP地址;端口是否正确 下面是导入jar包后操作成功...,导入方法: 成功之后可以