JDBC之获取插入语句返回的主键

news/2024/5/18 22:43:27 标签: jdbc, java

该获取主键并不是绝对的,也和具体的数据库实现的驱动有关。

java">package cn.itcast.jdbc;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;
/**
 * 测试JDBC中的几个其他API
 */
public class OtherApi {
	/**
	 * 测试create方法
	 * @throws SQLException
	 */
	@Test
	public void testCreate() throws SQLException {
		System.out.println(create());
	}
	/**
	 * 测试从数据库读取数据
	 * @throws SQLException
	 * @throws InterruptedException
	 */
	@Test
	public void testRead() throws SQLException, InterruptedException {
		read();
	}
	/**
	 * 读取数据库中的数据
	 * @throws SQLException
	 * @throws InterruptedException
	 */
	static void read() throws SQLException, InterruptedException {
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;
		try {
			//建立连接
			conn = JdbcUtils.getConnection();
			//创建语句
			st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
					ResultSet.CONCUR_UPDATABLE);
			//执行语句
			rs = st.executeQuery("select id, name, money, birthday  from user where id < 5");
			//处理结果
			while(rs.next()) {
				int id = rs.getInt("id");
				System.out.println("show"  + id + "...");
				Thread.sleep(10000);
				System.out.println(id +"\t" + rs.getObject("name") + "\t"
						+ rs.getObject("birthday") + "\t"
						+ rs.getObject("money"));
			}
		} finally {
			JdbcUtils.free(rs, st, conn);
		}
	}
	/**
	 * 向数据库中插入语句
	 * @return
	 * @throws SQLException
	 */
	static int create() throws SQLException {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			//建立连接
			conn = JdbcUtils.getConnection();
			//创建语句
			String sql = "insert into user(name,birthday, money) values ('name2 gk', '1987-01-01', 400) ";
			//通过传入第二个参数,就会产生主键返回给我们
			ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
			ps.executeUpdate();
			//返回的结果集中包含主键,注意:主键还可以是UUID,
			//复合主键等,所以这里不是直接返回一个整型
			rs = ps.getGeneratedKeys();
			int id = 0;
			if(rs.next()) {
				id = rs.getInt(1);
			}
			return id;
		} finally{
			JdbcUtils.free(rs, ps, conn);
		}
	}
}



http://www.niftyadmin.cn/n/1870222.html

相关文章

整数的加法运算

1.1.1 无符号整数加法 假设x&#xff0c;y都是比特位为w的无符号整数&#xff0c;那么x和y分别可以表示为&#xff0c; 0 < x < 2w&#xff0c;0 < y < 2w&#xff0c;0 < xy < 2w1 &#xff0c;xy的结果需要 w1位来表示。如果只有w位来表示两个无符号整数…

从零开始玩转JMX(一)——简介和Standard MBean

JMX的全称为Java Management Extensions. 顾名思义&#xff0c;是管理Java的一种扩展。这种机制可以方便的管理、监控正在运行中的Java程序。常用于管理线程&#xff0c;内存&#xff0c;日志Level&#xff0c;服务重启&#xff0c;系统环境等。 简介 基本术语 MBean&#xff1…

数据的字节对齐(data structure alignment)

1.1.1 为什么需要字节对齐 1、处理器的差异 有的处理器&#xff0c;不容许在字节未对齐的地址上访问字或者是多个字的数据。比如sun sparc cpu&#xff0c;不容许在奇数字节上访问一个字&#xff0c;否则会出现异常。 2、出于CPU读取内存数据效率的考虑。 CPU访问内存的时…

c c++中的“指针、指针变量、指针变量的类型”

1.1 c & c中的“指针、指针变量、指针变量的类型” 1.1.1 指针&#xff1a; 1&#xff0e;是变量的地址 2&#xff0e;指针的长度和计算机的字长相关&#xff0c;例如&#xff1a;在32位计算机中&#xff0c;指针的长度是32位&#xff0c;即4字节&#xff1b;在64位…

java8 手把手教你学会写lambda表达式

项目github地址&#xff1a;bitcarmanlee easy-algorithm-interview-and-practice 欢迎大家star&#xff0c;留言&#xff0c;一起学习进步 Java8发布已经有一段时间了&#xff0c;这次发布的改动比较大&#xff0c;很多人将这次改动与Java5的升级相提并论。Java8其中一个很重要…

c++的 trivial constructor

c的 trivial constructor c的构造器包含trivial和nontrivial两种。现在我们讨论trivial类型。 trivial constructor的特性&#xff1a; 1、由编译器自动生成的(注意编译器自动生成的也有nontrivial类型) 2、类中不包含虚函数 3、类没有虚基类 4、类如果继承自父类&#xff0c;那…

c++的“default constructor”

1.1 c的“default constructor”今天总算搞清楚了c的default constructor的概念&#xff0c;它是指没有参数的构造函数&#xff08;不管是编译器隐式生成的&#xff0c;还是程序员显式声明的&#xff09;。1、如果程序员没有提供任何构造函数&#xff0c;那么编译器就会隐式…

posix 条件变量

条件变量是一中线程同步机制&#xff0c;需要和 pthread_mutex_t配合使用才能完成任务&#xff0c;典型的可以应用在“生产者、消费者”模型中。 条件变量的数据类型&#xff1a;pthread_cond_t 配合的函数有&#xff1a; 1、pthread_cond_t结构的初始化、销毁函数 #include &l…