JDBC常见操作

 

目录

前言

一、对表中数据的增删改查。

二、批量插入数据

 

三、对数据库日期类型的插入与查询

四、clob、blob的操作

1、clob

2、blob



前言

记录Java对mysql数据库进行常见操作。

1、对表中数据的增删改查。

2、批量插入数据。

3、对数据库日期类型的插入与查询

4、clob、blob的操作。

一、对表中数据的增删改查。

首先准备好user表创建如下:

creat table user(

id int,

name varchar(10),

age int,

gender char(1)

)

表中有字段:id   name  age  gender。


对表实现增删改查操作,代码如下:

package JDBCTest;
/**
 * author:葫芦鸡 
 */
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class JDBC {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		List<User> list = new ArrayList<User>();
		Class.forName("com.mysql.cj.jdbc.Driver");
		Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/xixi","root","0705");
		// 增加一条数据
		String sql1 ="INSERT INTO user VALUES(?,?,?,?)";
		PreparedStatement pstmt1 = con.prepareStatement(sql1);
		pstmt1.setInt(1, 2);
		pstmt1.setString(2, "ls");
		pstmt1.setInt(3, 18);
		pstmt1.setString(4, "女");
		int count = 0;
		count = pstmt1.executeUpdate();
		System.out.println("成功增加"+count+"条数据!");
		pstmt1.close();
		//删除一条数据
		String sql2 ="DELETE FROM user WHERE id=?";
		PreparedStatement ps2 = con.prepareStatement(sql2);
		ps2.setInt(1, 2);
		int count2 =0;
		count2 = ps2.executeUpdate();
		System.out.println("删除"+count2+"条记录");
		//修改数据
		String sql3 ="UPDATE user SET NAME='xiaohu' WHERE id=?";
		PreparedStatement ps3 = con.prepareStatement(sql3);
		ps3.setInt(1, 1);
		int count3 =0;
		count3 = ps3.executeUpdate();
		System.out.println("修改"+count3+"条记录");
		//查询数据
		String sql4 = "SELECT * FROM user WHERE id=?";
		PreparedStatement ps4 = con.prepareStatement(sql4);
		ps4.setInt(1, 3);
		ResultSet rs = ps4.executeQuery();
		while(rs.next()) {
			User user = new User();
			user.setAge(rs.getInt(3));
			user.setName(rs.getString(2));
			user.setId(rs.getInt(1));
			user.setGender(rs.getString(4));
			list.add(user);
	
		}
		for(User user:list) {
			System.out.println(user.getId()+"--"+user.getName()+"--"+user.getAge()+"--"+user.getGender());
		}
	}

}

 加载驱动

建立连接

使用PreparedStatement预加载,可以防止sql注入

执行executeUpdate()和executeQuery()方法

二、批量插入数据

 

package JDBCTest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 * 
 * @author 葫芦鸡
 *测试批量处理
 */
public class TestBath {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		Class.forName("com.mysql.cj.jdbc.Driver");  //连接驱动
		Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/xixi","root","0705"); //建立连接
		con.setAutoCommit(false); //手动提交
		String sql;
		Statement stmt = con.createStatement();
		for(int i=0;i<20;i++) {
			int a = (int) Math.round(Math.random()*100);
			sql="insert into user(name,age) values('周"+i+"',"+a+")";
			stmt.addBatch(sql);
		}
		
		int a[] = stmt.executeBatch();
		System.out.println(a.length+"条记录生成成功!");
		con.commit();
		stmt.close();
		con.close();
		
		
	}

}

加载驱动

建立连接

设置手动提交 ——con.setAutoCommit(False)

注意,使用Statement而不是PreparedStatement,后者有时候会出错(有了解原因的小伙伴欢迎评论区解答)。

add.bath

最后在手动提交

三、对数据库日期类型的插入与查询

package JDBCTest;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 测试jdbc 相关日期操作
 * @author 葫芦鸡
 *
 */
public class TestDate {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		Class.forName("com.mysql.cj.jdbc.Driver");  //连接驱动
		Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/xixi","root","0705"); //建立连接
		//查询
		String sql1 = "select * from test_date";
		PreparedStatement ps = con.prepareStatement(sql1);
		ResultSet rs =ps.executeQuery();
		while(rs.next()) {
			System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getDate(3));
		//修改 1号员工的入职日期
		String sql2 = "update test_date set interTime=? where id =1";
		PreparedStatement ps2 =con.prepareStatement(sql2);
		Date d = new Date(System.currentTimeMillis());
		ps2.setDate(1, d);
		ps2.executeUpdate();
		}
		

	}

}

与普通的增删改查差不多

需注意对应Java里的Date为import java.sql.Date包


四、clob、blob的操作

1、clob

package JDBCTest;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 测试blob
 * 1、把文档存入数据库
 * 2、从数据库中取出文档并存入电脑
 * @author 12438
 *
 */
public class TestClob {

	public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException {
		Class.forName("com.mysql.cj.jdbc.Driver");  //连接驱动
		Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/xixi","root","0705"); //建立连接
		
		//存入b.txt
		String sql1="insert into text(txt) values(?)";
		PreparedStatement ps1 = con.prepareStatement(sql1);
		Reader rd = new FileReader("b.txt");
		ps1.setCharacterStream(1, rd);
		ps1.executeUpdate();
		//读取
		String sql2 ="select txt from text where id=?";
		PreparedStatement ps2 = con.prepareStatement(sql2);
		ps2.setInt(1, 1);
		Writer wt = new FileWriter("aaaaa.txt");
		Reader rd2 =null;
		char temp[] = new char[1024*10];
		int len =-1;
//		int temp =0;
		ResultSet rs =ps2.executeQuery();
		while(rs.next()) {
			rd2 =rs.getCharacterStream(1);
			while((len=rd2.read(temp))!=-1) {
				wt.write(temp,0,len);
			}
		}
		wt.flush();
		wt.close();
		rd2.close();
		rd.close();
		ps2.close();
		ps1.close();
		con.close();
		

	}

}

2、blob

package JDBCTest;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 测试bolb 将图片放入数据库,并查询出来存入电脑
 * @author 12438
 *
 */
public class TestBlob {

	public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException {
		Class.forName("com.mysql.cj.jdbc.Driver");  //连接驱动
		Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/xixi","root","0705"); //建立连接
		InputStream is2 =null;
		OutputStream os = null ;
		//添加
		String sql1 = "insert into movie(mov) values(?)";
		PreparedStatement ps1 = con.prepareStatement(sql1);
		InputStream is = new FileInputStream("009.jpg");
		ps1.setBinaryStream(1, is);
		ps1.executeUpdate();
		//查询
		String sql2 ="select mov from movie where id=?";
		PreparedStatement ps2 = con.prepareStatement(sql2);
		ps2.setInt(1, 1);
		ResultSet rs = ps2.executeQuery();
		while(rs.next()) {
			os = new FileOutputStream("jdbcCope.jpg");
			is2 = rs.getBinaryStream(1);
			byte temp[] = new byte[1024];
			while(is2.read(temp)!=-1) {
				os.write(temp, 0, temp.length);
			
			}
		}
		is.close();
		os.flush();
		os.close();
		is2.close();
		ps2.close();
		ps1.close();
		con.close();
		
		

	}

}

blob存储可以操作二进制文件,clob只能文本文件。

和普通的区别在于是操作的io流而不是直接操作数据。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JDBCJava数据库连接)是Java程序与数据库之间进行交互的重要工具。JDBC 8.0.11是JDBC的一个版本,但在使用过程中,可能会遇到一些常见错误。以下是几种常见的错误: 1. ClassNotFoundException(类未找到异常):这通常是由于未找到JDBC驱动程序引起的。在使用JDBC时,需要确保正确配置了驱动程序的类路径,并且驱动程序的jar文件已经导入到项目中。 2. SQLException(SQL异常):这是由于SQL语句执行或连接数据库过程中出现的问题。常见的原因有:错误的SQL语法、连接数据库时的用户名或密码错误、数据库服务器关闭等。在遇到SQLException时,我们需要仔细检查SQL语句的正确性,并确保数据库连接参数的正确性。 3. ConnectException(连接异常):这是由于无法连接到数据库服务器引起的。可能的原因包括:数据库服务器地址或端口号配置错误、网络连接故障、数据库服务器未启动等。在遇到连接异常时,我们需要确保数据库服务器处于正常运行状态,并检查连接参数的准确性。 4. DataConversionException(数据转换异常):这是由于数据类型转换错误引起的。在使用JDBC时,Java和数据库之间的数据类型需要正确匹配。在进行数据操作时,需要确保正确的数据类型转换,以避免此类异常。 5. BatchUpdateException(批处理异常):这是由于批处理操作中某一项失败,导致整个批处理操作失败引起的。在进行批处理操作时,需要逐一检查每一条SQL语句的执行结果,并处理其中的异常情况。 总之,JDBC 8.0.11在使用过程中可能会遇到上述常见错误,我们需要仔细检查代码、确保配置正确、处理异常情况,以保证程序与数据库的正常交互。 ### 回答2: JDBC 8.0.11是Java数据库连接(JDBC)的一个版本,用于在Java程序和数据库之间进行通信。在使用这个版本时,可能会遇到一些常见的错误。下面是一些可能会出现的错误和解决方法: 1. ClassNotFoundException:这个错误通常发生在Java程序无法找到JDBC驱动程序时。解决方法是确保已经将JDBC驱动程序的jar文件添加到项目的类路径中。 2. SQLException:这是一个在与数据库交互时常见的错误。这个错误可能会发生在连接数据库、执行查询或更新语句时。解决方法是检查数据库连接URL、用户名和密码是否正确,并确保数据库服务器运行正常。 3. NullPointerException:这个错误通常表示代码中的空指针引用。在使用JDBC时,可能会发生这个错误,比如在尝试使用已关闭的连接或未初始化的变量时。解决方法是仔细检查代码并确保所有的对象都被正确地初始化和关闭。 4. BatchUpdateException:在批量执行更新操作时可能会出现这个异常。这个异常表示在执行一批更新语句时,其中一个或多个语句执行失败。解决方法是检查每个更新语句的语法和逻辑,并确保它们正确地执行。 5. DataTruncation:这个异常通常发生在尝试将数据插入到字段中,而字段长度不足以容纳该数据。解决方法是检查数据库表结构的设计,并确保字段长度足够容纳所需的数据。 这些是一些JDBC 8.0.11常见的错误和解决方法。当使用JDBC时,遇到错误是很常见的,但通过仔细检查和调试代码,可以很容易地解决这些问题,并确保与数据库的正常通信。 ### 回答3: JDBC 8.0.11是Java连接数据库的一个版本,虽然它相对较新,但仍然有一些常见的错误可能发生。以下是几个常见的错误以及可能的解决方案: 1. ClassNotFoundException:这个错误意味着无法找到指定的JDBC驱动程序。解决方法是检查你的类路径中是否包含正确的驱动程序JAR文件,并确保在连接数据库之前加载驱动程序。 2. SQLException:这个错误通常表示在执行SQL查询或更新时出现问题。可能的原因包括SQL语句的语法错误、无效的表或列名称以及数据库连接问题。为了解决这个问题,首先检查你的SQL语句的正确性,并确保数据库连接的可用性。 3. ConnectionTimeoutException:这个错误意味着连接数据库的超时时间已过。这可能是由于网络问题、数据库服务器负载过高或数据库连接池配置不正确等原因引起的。要解决这个问题,可以尝试增加连接超时时间,并确保数据库服务器的正常运行。 4. IntegrityConstraintViolationException:这个错误意味着在数据库表中违反了完整性约束,例如主键或唯一键冲突。解决这个问题的方法是检查数据插入或更新的值是否满足表中的约束条件,并确保只插入或更新有效的数据。 5. ResultSetClosedException:这个错误意味着试图访问一个已经关闭的结果集。解决这个问题的方法是确保在使用结果集之前,通过调用关闭方法来正确地关闭结果集。 总之,理解和解决这些常见错误能够帮助开发人员更好地使用JDBC 8.0.11连接数据库,并减少潜在的错误和问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值